EntitySessionManager.h 4.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. #ifndef __ENTITY_SESSION_MANAGER_H
  2. #define __ENTITY_SESSION_MANAGER_H
  3. #include <map>
  4. #include <vector>
  5. #include <string>
  6. #include "CMessage.h"
  7. // #include "CSocketClient.h"
  8. #include "CWSCodec.h"
  9. namespace Chromium {
  10. enum RequestProcessType {
  11. PROCESS_NOTHING,
  12. PROCESS_SEND,
  13. PROCESS_STARTSESSION,
  14. PROCESS_FINDSESSION,
  15. PROCESS_RECORDMSG
  16. };
  17. enum AckProcessType {
  18. ACKPROCESS_NOTHING,
  19. ACKPROCESS_SEND
  20. };
  21. typedef struct WSClientReqInfoStruct {
  22. int transID;
  23. unsigned int hdlID;
  24. struct WSClientReqInfoStruct* next;
  25. }WSClientReqInfo;
  26. class EntitySessionManager {
  27. public:
  28. // EntitySessionManager(CSocketClient* pSocket, CWSCodec* serializer);
  29. EntitySessionManager();
  30. ~EntitySessionManager();
  31. std::pair<int, std::string> GetStartSessionRequest(std::string entityname, std::string className); //返回分配的transId和生成的beginSession串
  32. std::pair<int, std::string> GetAllSessionRequest(int transId, bool isInitCfg);
  33. std::pair<int, std::string> Get_getconfig_ack(std::string terminalno);
  34. RequestProcessType RequestProcess(CMessage* msg, std::string entityName, unsigned int hdlID, const ws_msgInfo &msgInfo);
  35. AckProcessType AckProcess(CMessage* msg, unsigned int& hdlID);
  36. AckProcessType AskProcessEvent(CMessage* msg, std::vector<std::pair<int, int>>& transIdandHdlIDArr);
  37. std::pair<AckProcessType, std::string> AskProcessSession(CMessage* msg, unsigned int& hdlID);
  38. std::string GetStartSessionAck(CMessage* msg, std::string entityname);
  39. std::pair<bool, std::string> DoSessionRemove(unsigned int session);
  40. EntitySessionManager& DoSessionUpdate(std::string entityname, int session);
  41. int MakeNewTransID(CMessage* msg, unsigned int hdlID);
  42. std::pair<bool, int> getSrcTransID(int newTransID);
  43. WSClientReqInfo* ReduceOriginTransID(CMessage* msg);
  44. void updateBeginSessionTime(std::string entityName, bool doCleanSessionTime = false);
  45. bool checkBeginSession(std::string entityName);
  46. void StoreSessionReq(int transid, std::string entityname);
  47. std::vector<std::string> queryUnLinkSession();
  48. static std::map<std::string, int> queryAllSessionInfo();
  49. void doWithErrorCode(int errorCode, int transId);
  50. static std::pair<bool, std::string> FromSessionIdToEntityName(int sessionId);
  51. private:
  52. static std::map<std::string, int> m_session_map; // entity name -> session id
  53. std::map<int, WSClientReqInfo> m_trans_map; // real trans id -> client trans id & client ws connection handler
  54. std::map<int, std::string> m_session_ack_map; // trans id -> entity name
  55. std::map<std::string, int> m_broadcast_map; // broadcast list
  56. std::map<std::string, time_t> t_BeginSessionTime;
  57. // CSocketClient* m_socket;
  58. // CWSCodec* m_serializer;
  59. private:
  60. std::pair<bool, int> GetSessionIDByEntityName(std::string entityname);
  61. void RemoveAckListNode(int transid);
  62. std::string UpdateSessionMap(int transid, int sessionId); //更新session表并返回更新的实体名
  63. // process with requests
  64. RequestProcessType ProcessWithInfo(CMessage* msg, std::string entityName, unsigned int hdlID, const ws_msgInfo& msgInfo);
  65. RequestProcessType ProcessWithBeginSession(CMessage* msg, std::string entityName, unsigned int hdlID, const ws_msgInfo& msgInfo);
  66. RequestProcessType ProcessWithEndSession(CMessage* msg, std::string entityName, unsigned int hdlID);
  67. RequestProcessType ProcessWithRequest(CMessage* msg, std::string entityName, unsigned int hdlID, const ws_msgInfo& msgInfo);
  68. RequestProcessType ProcessWithRegister(CMessage* msg, std::string entityName, unsigned int hdlID, const ws_msgInfo& msgInfo);
  69. RequestProcessType ProcessWithUnregister(CMessage* msg, std::string entityName, unsigned int hdlID);
  70. RequestProcessType ProcessWithSetVarReq(CMessage* msg, std::string entityName, unsigned int hdlID, const ws_msgInfo& msgInfo);
  71. RequestProcessType ProcessWithGetVarReq(CMessage* msg, std::string entityName, unsigned int hdlID, const ws_msgInfo& msgInfo);
  72. AckProcessType ProcessWithAck(CMessage* msg, unsigned int& hdlID);
  73. AckProcessType ProcessWithRecvEvent(CMessage* msg, unsigned int& hdlID);
  74. };
  75. }
  76. #endif