ClientSessionF.h 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  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 _rx_state
  10. {
  11. RX_DLE,
  12. RX_STX,
  13. RX_DATA,
  14. } RX_STATE;
  15. typedef enum _e_session_state
  16. {
  17. eSS_none,
  18. eSS_OnDisconnect,
  19. eSS_Disconnect,
  20. eSS_OnConnect,
  21. eSS_LoginReq,
  22. eSS_Connected,
  23. eSS_Recv,
  24. } e_session_state;
  25. struct RefCountable
  26. {
  27. RefCountable()
  28. {
  29. FRefCount = 0;
  30. }
  31. virtual ~RefCountable(){}
  32. void IncRefCount() { ++FRefCount; }
  33. void DecRefCount() { --FRefCount; }
  34. int GetRefCount() { return FRefCount; }
  35. int FRefCount;
  36. };
  37. //---------------------------------------------------------------------------
  38. class TClientSession;
  39. struct OverlappedIO : public OVERLAPPED
  40. {
  41. OverlappedIO()
  42. {
  43. FSession = NULL;
  44. }
  45. TClientSession *FSession;
  46. } ;
  47. //---------------------------------------------------------------------------
  48. #define SERVER_MAX_PACKET_SIZE 8192 /* max packet size */
  49. #define SESSION_RECV_BUFFER (SERVER_MAX_PACKET_SIZE*100)
  50. #define SESSION_SEND_BUFFER (SERVER_MAX_PACKET_SIZE*100)
  51. class TClientSession
  52. {
  53. public:
  54. TClientSession();
  55. TClientSession(SOCKET ASock, SOCKADDR_IN* ASockAddr);
  56. void Create(SOCKET ASock, SOCKADDR_IN* ASockAddr);
  57. virtual ~TClientSession();
  58. private:
  59. e_session_state FState;
  60. bool FConnected;
  61. SOCKET FSocket;
  62. SOCKADDR_IN FSocketAddr;
  63. AnsiString FIpAddress;
  64. short FPort;
  65. int FPacketLen;
  66. int FPacketSent;
  67. char *FPacketPtr;
  68. char FRecvBuff[SESSION_RECV_BUFFER];
  69. int FRecvIdx;
  70. char FSendBuff[SESSION_SEND_BUFFER];
  71. int FSendIdx;
  72. BYTE FMsgBuff[SESSION_SEND_BUFFER];
  73. TCDSCtlr *FCDSCtlr;
  74. TCDSCtlr *FCDSLogCtlr;
  75. AnsiString FCtlrId;
  76. int FLastErr;
  77. AnsiString FErrorString;
  78. int SocketError();
  79. void Init();
  80. public:
  81. int FCloseTick;
  82. TDateTime FTmrConn;
  83. TDateTime FTmrSend;
  84. TDateTime FTmrRecv;
  85. bool FChkRecvTO; // 수신 타임아웃 체크 플래그, true 이면 타임아웃 체크
  86. int GetFreeSpaceSize();
  87. char* GetBuffer();
  88. void RecvBuffCommit(int ARecvLen);
  89. bool OnConnect();
  90. void Disconnect();
  91. bool OnDisconnected(); /* PacketHandllingF.cpp */
  92. bool SendPacketDleStuffing(char *AData, int ADataLen);
  93. bool SendPacketDLE(char *AData, int ADataLen, bool AIsDle);
  94. bool SendPacket(char *AData, int ADataLen);
  95. bool SendRequest(char *AData, int ADataLen);
  96. bool SendFlush();
  97. bool SendFlushComplete();
  98. void OnWriteComplete(int ASendLen, int AReqLen);
  99. void OnWrite(char *APktPtr, int ASendLen); /* PacketHandllingF.cpp */
  100. void OnRead(int ALen); /* PacketHandllingF.cpp */
  101. bool CheckLoginClient(); /* PacketHandllingF.cpp */
  102. bool InfoPacket(BYTE AOpCode, int ALen, bool ASend, int AResult=0);
  103. template <class PKT_TYPE>
  104. bool ParsePacket(PKT_TYPE& pkt, int APktLen);
  105. char* GetPacket();
  106. bool ResetPacket(int APktLen);
  107. int ReqStauts();
  108. int ReqPowerModuleStatus();
  109. int ReqDisplayModuelStatus();
  110. int ReqParameter();
  111. int ReqPixelImage(char *ACmd);
  112. int ReqUploadCurrentForm();
  113. int ReqDisplayDefaultForm();
  114. int ReqUploadScheduleForm();
  115. int ReqDisplayFormId(char *ACmd);
  116. int ReqStatusControl(char *ACmd, int ALen);
  117. int ReqSendPacket(char *ACmd, int ALen);
  118. int download_ftp_file();
  119. int download_form_schedule(bool ASchedule=true);
  120. int download_form_schedule_complete();
  121. int download_default_form_0x9A();
  122. int download_form_0x9A();
  123. int download_file_0x82();
  124. int download_schedule_form_0x96();
  125. int download_blank_0x9E();
  126. //문자식
  127. int download_lib_form_0x0A();
  128. int download_schedule_form_0x0E();
  129. int download_blank_0x16();
  130. void DisplayResponseError(BYTE *AData);
  131. #if 0
  132. int ReqLedPowerControl(BYTE AOnOff);
  133. int ReqFanPowerControl(BYTE AOnOff);
  134. int ReqTimeControl(char *ATime);
  135. int ReqBrightSet(char *ACmd);
  136. int ReqConfigSet(char *ACmd);
  137. int ReqReset(int AMode);
  138. #endif
  139. char* GetRecvBuff() { return FRecvBuff; }
  140. int LogData(char *ASndRcv, BYTE *AData, int ALen);
  141. int LogWrite(int ALogKind, char *AFmt, ...);
  142. int SysLogWrite(int ALogKind, char *AFmt, ...);
  143. public:
  144. __property bool IsConnected = { read = FConnected };
  145. __property SOCKET Socket = { read = FSocket };
  146. __property e_session_state State = { read = FState, write = FState };
  147. __property AnsiString IpAddress = { read = FIpAddress, write = FIpAddress };
  148. __property short Port = { read = FPort, write = FPort };
  149. __property TCDSCtlr* CDSCtlr = { read = FCDSCtlr, write = FCDSCtlr };
  150. __property TCDSCtlr* CDSLogCtlr = { read = FCDSLogCtlr, write = FCDSLogCtlr };
  151. __property AnsiString CtlrId = { read = FCtlrId, write = FCtlrId };
  152. };
  153. //---------------------------------------------------------------------------
  154. //---------------------------------------------------------------------------
  155. void CALLBACK RecvCompletion(DWORD dwError, DWORD cbTransferred, LPWSAOVERLAPPED lpOverlapped, DWORD dwFlags);
  156. //void CALLBACK SendCompletion(DWORD dwError, DWORD cbTransferred, LPWSAOVERLAPPED lpOverlapped, DWORD dwFlags);
  157. //---------------------------------------------------------------------------
  158. #endif