Program Listing for File FileObjectState.h¶
↰ Return to documentation for file (src/fileObject/FileObjectState.h)
//
// Created by Aleksey Timin on 11/23/19.
//
#ifndef EIPSCANNER_FILEOBJECT_FILEOBJECTSTATE_H
#define EIPSCANNER_FILEOBJECT_FILEOBJECTSTATE_H
#include <memory>
#include "SessionInfo.h"
#include "MessageRouter.h"
#include "FileObject.h"
#include "cip/GeneralStatusCodes.h"
#include "utils/Logger.h"
namespace eipScanner {
namespace fileObject {
const cip::CipUsint FILE_OBJECT_CLASS_ID = 0x37;
const cip::CipUsint MAX_TRANSFER_SIZE = 255;
enum class FileObjectAttributesCodes : cip::CipUint {
STATE = 1,
};
enum class FileObjectServiceCodes : cip::CipUint {
INITIATE_UPLOAD = 0x4B,
UPLOAD_TRANSFER = 0x4F
};
enum class TransferPacketTypeCodes : cip::CipUsint {
FIRST = 0,
MIDDLE = 1,
LAST = 2,
ABORT = 3,
FIRST_AND_LAST = 4,
};
class FileObjectState {
public:
using UPtr = std::unique_ptr<FileObjectState>;
FileObjectState(FileObjectStateCodes state, FileObject &owner, cip::CipUint objectId, MessageRouter::SPtr messageRouter);
virtual ~FileObjectState();
virtual void initiateUpload(SessionInfoIf::SPtr si, EndUploadHandler handle);
virtual bool transfer(SessionInfoIf::SPtr si);
FileObjectStateCodes getStateCode() const;
void SyncState(SessionInfoIf::SPtr si);
protected:
void logWithStateName(utils::LogLevel logLevel, const std::string &message) const;
std::string getStateName() const;
template <class State, class ... Types>
void setState(Types ... args) {
_owner._state = std::make_unique<State>(_owner, _objectId, _messageRouter, args...);
}
MessageRouter::SPtr _messageRouter;
cip::CipUint _objectId;
FileObjectStateCodes _stateCode;
FileObject &_owner;
};
}
}
#endif // EIPSCANNER_FILEOBJECT_FILEOBJECTSTATE_H