ClientSessionF.h 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. //---------------------------------------------------------------------------
  2. #ifndef ClientSessionFH
  3. #define ClientSessionFH
  4. //---------------------------------------------------------------------------
  5. #include <Classes.hpp>
  6. #include "PacketHandllingF.h"
  7. #include "CDSCtlrF.h"
  8. #include <winsock2.h>
  9. typedef enum _e_session_state
  10. {
  11. eSS_none,
  12. eSS_OnDisconnect,
  13. eSS_Disconnect,
  14. eSS_OnConnect,
  15. eSS_LoginReq,
  16. eSS_Connected,
  17. eSS_Recv,
  18. } e_session_state;
  19. struct RefCountable
  20. {
  21. RefCountable()
  22. {
  23. FRefCount = 0;
  24. }
  25. virtual ~RefCountable(){}
  26. void IncRefCount() { ++FRefCount; }
  27. void DecRefCount() { --FRefCount; }
  28. int GetRefCount() { return FRefCount; }
  29. int FRefCount;
  30. };
  31. //---------------------------------------------------------------------------
  32. class TClientSession;
  33. struct OverlappedIO : public OVERLAPPED
  34. {
  35. OverlappedIO()
  36. {
  37. FSession = NULL;
  38. }
  39. TClientSession *FSession;
  40. } ;
  41. //---------------------------------------------------------------------------
  42. #define SESSION_RECV_BUFFER 2018
  43. #define SESSION_SEND_BUFFER 8192
  44. class TClientSession
  45. {
  46. public:
  47. TClientSession();
  48. TClientSession(SOCKET ASock, SOCKADDR_IN* ASockAddr);
  49. void Create(SOCKET ASock, SOCKADDR_IN* ASockAddr);
  50. virtual ~TClientSession();
  51. private:
  52. e_session_state FState;
  53. bool FConnected;
  54. SOCKET FSocket;
  55. SOCKADDR_IN FSocketAddr;
  56. AnsiString FIpAddress;
  57. short FPort;
  58. int FPacketLen;
  59. int FPacketSent;
  60. char *FPacketPtr;
  61. char FRecvBuff[SESSION_RECV_BUFFER];
  62. int FRecvIdx;
  63. char FSendBuff[SESSION_SEND_BUFFER];
  64. int FSendIdx;
  65. TCDSCtlr *FCDSCtlr;
  66. TCDSCtlr *FCDSLogCtlr;
  67. AnsiString FCtlrId;
  68. int FLastErr;
  69. AnsiString FErrorString;
  70. int SocketError();
  71. void Init();
  72. public:
  73. int FCloseTick;
  74. TDateTime FTmrConn;
  75. TDateTime FTmrSend;
  76. TDateTime FTmrRecv;
  77. bool FChkRecvTO; // 수신 타임아웃 체크 플래그, true 이면 타임아웃 체크
  78. int GetFreeSpaceSize();
  79. char* GetBuffer();
  80. void RecvBuffCommit(int ARecvLen);
  81. bool OnConnect();
  82. void Disconnect();
  83. bool OnDisconnected(); /* PacketHandllingF.cpp */
  84. bool SendRequest(char *AData, int ADataLen);
  85. bool SendFlush();
  86. void OnWriteComplete(int ASendLen, int AReqLen);
  87. void OnWrite(char *APktPtr, int ASendLen); /* PacketHandllingF.cpp */
  88. void OnRead(int ALen); /* PacketHandllingF.cpp */
  89. bool CheckLoginClient(); /* PacketHandllingF.cpp */
  90. bool InfoPacket(BYTE AOpCode, int ALen, bool ASend, int AResult=0);
  91. template <class PKT_TYPE>
  92. bool ParsePacket(PKT_TYPE& pkt, int APktLen);
  93. char* GetPacket();
  94. bool ResetPacket(int APktLen);
  95. int DownloadScenarioForm(bool ASchedule=true);
  96. int ReqParameter();
  97. int ReqLedPowerControl(BYTE AOnOff);
  98. int ReqFanPowerControl(BYTE AOnOff);
  99. int ReqTimeControl(char *ATime);
  100. int ReqBrightSet(char *ACmd);
  101. int ReqConfigSet(char *ACmd);
  102. int ReqReset(int AMode);
  103. bool ReqLogin();
  104. char* GetRecvBuff() { return FRecvBuff; }
  105. int LogData(char *ASndRcv, BYTE *AData, int ALen);
  106. int LogWrite(int ALogKind, char *AFmt, ...);
  107. int SysLogWrite(int ALogKind, char *AFmt, ...);
  108. public:
  109. __property bool IsConnected = { read = FConnected };
  110. __property SOCKET Socket = { read = FSocket };
  111. __property e_session_state State = { read = FState, write = FState };
  112. __property AnsiString IpAddress = { read = FIpAddress, write = FIpAddress };
  113. __property short Port = { read = FPort, write = FPort };
  114. __property TCDSCtlr* CDSCtlr = { read = FCDSCtlr, write = FCDSCtlr };
  115. __property TCDSCtlr* CDSLogCtlr = { read = FCDSLogCtlr, write = FCDSLogCtlr };
  116. __property AnsiString CtlrId = { read = FCtlrId, write = FCtlrId };
  117. };
  118. //---------------------------------------------------------------------------
  119. //---------------------------------------------------------------------------
  120. void CALLBACK RecvCompletion(DWORD dwError, DWORD cbTransferred, LPWSAOVERLAPPED lpOverlapped, DWORD dwFlags);
  121. void CALLBACK SendCompletion(DWORD dwError, DWORD cbTransferred, LPWSAOVERLAPPED lpOverlapped, DWORD dwFlags);
  122. //---------------------------------------------------------------------------
  123. #endif