Program Listing for File FileObject.h

Return to documentation for file (src/FileObject.h)

//
// Created by Aleksey Timin on 11/21/19.
//

#ifndef EIPSCANNER_FILEOBJECT_H
#define EIPSCANNER_FILEOBJECT_H

#include <stdexcept>

#include "cip/Types.h"
#include "cip/GeneralStatusCodes.h"
#include "MessageRouter.h"
#include "BaseObject.h"

namespace eipScanner {
    namespace fileObject {
        class FileObjectState;
        using EndUploadHandler = std::function<void(cip::GeneralStatusCodes status, const std::vector<uint8_t>& fileContent)>;
    }

    enum class FileObjectStateCodes : cip::CipUsint {
        NONEXISTENT = 0,
        FILE_EMPTY = 1,
        FILE_LOADED = 2,
        TRANSFER_UPLOAD_INITIATED = 3,
        TRANSFER_DOWNLOAD_INITIATED = 4,
        TRANSFER_UPLOAD_IN_PROGRESS = 5,
        TRANSFER_DOWNLOAD_IN_PROGRESS = 6,

        UNKNOWN = 255,
    };

    class FileObject : public BaseObject {
        friend class fileObject::FileObjectState;
    public:
        using UPtr = std::unique_ptr<FileObject>;

        FileObject(cip::CipUint instanceId, const SessionInfoIf::SPtr& si);

        FileObject(cip::CipUint instanceId, const SessionInfoIf::SPtr& si, const MessageRouter::SPtr& messageRouter);

        ~FileObject();

        std::unique_ptr<fileObject::FileObjectState>&  getState();

        void beginUpload(SessionInfoIf::SPtr si, fileObject::EndUploadHandler handle);

        bool handleTransfers(SessionInfoIf::SPtr si);


    private:
        std::unique_ptr<fileObject::FileObjectState> _state;
    };
}

#endif  // EIPSCANNER_FILEOBJECT_H