#pragma once #include "IEquipment.h" #include #include "SocketServer.h" #include #include #include "Unit.h" namespace BEQ { class CEquipment : public IEquipment { public: CEquipment(); CEquipment::CEquipment(const char* pszName); ~CEquipment(); public: virtual void setEquipmentListener(EquipmentListener listener); virtual int getName(char* pszBuffer, int nMaxCount); virtual void setName(const char* pszName); virtual int getVersion(char* pszBuffer, int nMaxCount); virtual void setVersion(const char* pszVersion); virtual IUnit* addUnit(const char* pszName, int nDoorCount); virtual IUnit* getUnit(const char* pszName); virtual int runOnClientMode(const char* pAddr, int port); virtual int runOnServerMode(int port); virtual int repRecipeListComplete(); virtual int repLoadReadyComplete(int errorCode); private: void addClient(CAcceptClient* pClient); void removeClient(CAcceptClient* pClient); int decode(CAcceptClient* pClient, const char* pData, int len); int executeCommand(CAcceptClient* pClient, CString& strCmd, std::map& params); const char* getReply(const char* pszReply); CUnit* checkUnitAndReply(std::string& strUnit, CAcceptClient* pClient, const char* pszReply); CUnit* checkUnitAndReplyEx(std::string& strUnit, int& layer, CAcceptClient* pClient, const char* pszReply); void makeResponse(const char* pszReply, const char* pszParam, const char* pValue, CString& strResponse); void makeResponseEx(const char* pszReply, const char* pszParam, const char* pValue, CString& strResponse); void makeResponseEx(const char* pszReply, const char* pszUnit, const char* pszParam, const char* pValue, CString& strResponse); void makeFailResponse(const char* pszReply, const char* pszUnit, const char* pszText, CString& strResponse); void repState(CAcceptClient* pClient, CUnit* pUnit, const char* pszReply); void repDoorState(CAcceptClient* pClient, CUnit* pUnit, const char* pszReply); void repAlarm(CAcceptClient* pClient, CUnit* pUnit, const char* pszReply); void repStep(CAcceptClient* pClient, CUnit* pUnit, const char* pszReply); void repData(CAcceptClient* pClient, CUnit* pUnit, const char* pszReply); void repRecipeList(CAcceptClient* pClient, CUnit* pUnit, const char* pszReply); void repRunRecipe(CAcceptClient* pClient, CUnit* pUnit, int id, const char* pszName, const char* pszReply); void repNotReady(CAcceptClient* pClient, CUnit* pUnit, int layer, const char* pszReply); void repLoadReady(CAcceptClient* pClient, CUnit* pUnit, const char* pszUnitName, const char* pszMaterielId, const char* pszRecipeId, const char* pszReply); void repLoad(CAcceptClient* pClient, CUnit* pUnit, int layer, const char* pszReply); void repUnload(CAcceptClient* pClient, CUnit* pUnit, int layer, const char* pszReply); void repLoadComplete(CAcceptClient* pClient, CUnit* pUnit, const char* pszUnitName, int layer, const char* pszReply); void repUnloadComplete(CAcceptClient* pClient, CUnit* pUnit, const char* pszUnitName, int layer, const char* pszReply); private: std::string timeToString(ULONGLONG time); private: std::string m_strName; std::string m_strVersion; CSocketServer* m_pServer; AcceptClientListener* m_pClientListener; std::list m_clients; std::list m_recycleClients; CAcceptClient* m_pActiveClient; private: std::map m_units; EquipmentListener m_listener; private: CAcceptClient* m_pReqRecipeListClient; CUnit* m_pReqRecipeListUnit; std::string m_strReqRecipeListReply; CAcceptClient* m_pRunRecipeClient; CUnit* m_pRunRecipeUnit; std::string m_strRunRecipeReply; }; }