EntitySessionManager.h 3.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  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. RequestProcessType RequestProcess(CMessage* msg, std::string entityName,
  34. unsigned int hdlID);
  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. private:
  51. static std::map<std::string, int> m_session_map; // entity name -> session id
  52. std::map<int, WSClientReqInfo> m_trans_map; // real trans id -> client trans id & client ws connection handler
  53. std::map<int, std::string> m_session_ack_map; // trans id -> entity name
  54. std::map<std::string, int> m_broadcast_map; // broadcast list
  55. std::map<std::string, time_t> t_BeginSessionTime;
  56. // CSocketClient* m_socket;
  57. // CWSCodec* m_serializer;
  58. private:
  59. std::pair<bool, int> GetSessionIDByEntityName(std::string entityname);
  60. void RemoveAckListNode(int transid);
  61. std::string UpdateSessionMap(int transid, int sessionId); //更新session表并返回更新的实体名
  62. // process with requests
  63. RequestProcessType ProcessWithInfo(CMessage* msg, std::string entityName, unsigned int hdlID);
  64. RequestProcessType ProcessWithBeginSession(CMessage* msg, std::string entityName, unsigned int hdlID);
  65. RequestProcessType ProcessWithEndSession(CMessage* msg, std::string entityName, unsigned int hdlID);
  66. RequestProcessType ProcessWithRequest(CMessage* msg, std::string entityName, unsigned int hdlID);
  67. RequestProcessType ProcessWithRegister(CMessage* msg, std::string entityName, unsigned int hdlID);
  68. RequestProcessType ProcessWithUnregister(CMessage* msg, std::string entityName, unsigned int hdlID);
  69. RequestProcessType ProcessWithSetVarReq(CMessage* msg, std::string entityName, unsigned int hdlID);
  70. RequestProcessType ProcessWithGetVarReq(CMessage* msg, std::string entityName, unsigned int hdlID);
  71. AckProcessType ProcessWithAck(CMessage* msg, unsigned int& hdlID);
  72. AckProcessType ProcessWithRecvEvent(CMessage* msg, unsigned int& hdlID);
  73. };
  74. }
  75. #endif