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