VMSCThread.h 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  1. //---------------------------------------------------------------------------
  2. #ifndef VMSCThreadH
  3. #define VMSCThreadH
  4. //---------------------------------------------------------------------------
  5. #include <Classes.hpp>
  6. #include <Sockets.hpp>
  7. #include "AppGlobalF.h"
  8. #include "VmsPasigProtocolF.h"
  9. #include "VMSDataTypeF.h"
  10. #include "TVmsCtlrF.h"
  11. #include "ITSLogF.h"
  12. //---------------------------------------------------------------------------
  13. //#define CLIENT_SND_BUF_SIZE 65536 /* message buffer size */
  14. //#define CLIENT_SND_BUF_SIZE 111717 /* message buffer size */
  15. #define CLIENT_SND_BUF_SIZE 200000 /* message buffer size */
  16. #define CLIENT_RCV_BUF_SIZE 4096 /* max packet size */
  17. #define CLIENT_CONNECT_RETRY_TIME 60 /* connect retry time */
  18. #define CLIENT_CHANGE_TIME 5 /* change wait time */
  19. // client thread
  20. typedef struct client_thread_struct
  21. {
  22. BYTE Idx; /* information index */
  23. AnsiString IpAddress; /* IP주소 */
  24. int Port; /* 포트번호 */
  25. int TimeOut; /* 시간초과 */
  26. int Addr; /* local id */
  27. AnsiString VmsId; /* VMS ID */
  28. int State; /* for the statemachine */
  29. TDateTime reqStatusTimer; /* timer for state check sending */
  30. int pollingCycleTime; /* 정보요청주기 */
  31. int sendRetry; /* retry count */
  32. TDateTime sendTimer; /* timer for command timeout check */
  33. AnsiString LocalCenterId; /* 로컬 센터ID */
  34. AnsiString LocalDomainNm; /* 로컬 도메인명칭 */
  35. AnsiString CenterId; /* 센터ID */
  36. AnsiString DomainNm; /* 도메인명칭 */
  37. AnsiString UserName; /* 사용자명 */
  38. AnsiString UserPasswd; /* 사용자비밀번호 */
  39. int MaxHeartbeatTime; /* 최대허트비트지속시간 */
  40. int DatagramSize; /* 데이터그램 크기 */
  41. } CLIENT_THREAD_STRUCT;
  42. typedef enum en_client_machine_state
  43. {
  44. /* common */
  45. CT_IDLE = 1,
  46. CT_LOGIN,
  47. CT_SECTION,
  48. CT_CLOSE,
  49. CT_REGIST,
  50. CT_REGIST_COMMAND,
  51. CT_REGIST_WAIT,
  52. /* sender */
  53. CT_LOCAL_COMMAND,
  54. CT_CLIENT_COMMAND,
  55. /* receiver */
  56. CT_LOGIN_WAIT,
  57. CT_FRED_WAIT,
  58. CT_LOCAL_WAIT,
  59. CT_CLIENT_WAIT
  60. } EN_CLIENT_MACHINE_STATE;
  61. enum
  62. {
  63. SET_CLIENT_SUCC,
  64. SET_CLIENT_FAIL
  65. };
  66. /* 설정 정보 */
  67. typedef struct tag_set_info_struct
  68. {
  69. BYTE VmsId[INT_VMS_MAX_ID+1]; /* VMS ID */
  70. BYTE CtlType; /* 제어유형 */
  71. union
  72. {
  73. struct
  74. {
  75. BYTE Result; /* 제어결과 */
  76. BYTE OperId[INT_VMS_MAX_OPER_ID+1]; /* 제어운영자ID */
  77. } Control;
  78. struct
  79. {
  80. int SchMsgTime; /* 계획된 메시지 동작시간 */
  81. int ModuleTemp; /* 모듈전원 OFF 온도 */
  82. int FanTemp; /* Fan동작 기준온도 */
  83. int HeaterTemp; /* Heater동작 기준온도 */
  84. int ModuleFail; /* 모듈장애 판단율 */
  85. int RetryCount; /* 재시도 횟수 */
  86. int TimeOut; /* 최대응답대기시간 */
  87. } Para;
  88. } Data;
  89. } TSET_INFO_STRUCT;
  90. //---------------------------------------------------------------------------
  91. class TVMSCThread : public TThread
  92. {
  93. private:
  94. TTcpClient *TcpClient;
  95. bool *ThreadActiveIndicator;
  96. TVmsCtlr *FVmsObj;
  97. AnsiString m_strName; /* thread name */
  98. int m_RxDataLen;
  99. int m_RxPktLen;
  100. int m_RxState;
  101. int m_RxLen;
  102. BYTE m_RxBuff[CLIENT_RCV_BUF_SIZE]; /* receive data buffer */
  103. BYTE m_TxBuff[CLIENT_SND_BUF_SIZE]; /* send data buffer */
  104. TDateTime m_rcvPacketTimer; /* timer for receiver */
  105. TDateTime m_WatchDogTimer; /* watchdog timer */
  106. CLIENT_THREAD_STRUCT FClient; /* client thread */
  107. DWORD m_DataPacketNumber; /* DataPacket Number */
  108. DWORD m_SubscribeSerialNbr; /* Subscribe Serial Nbr */
  109. LOCAL_COMMAND FLocalCmd; //
  110. VMS_CONTROL_INFO FCliCmd; //클라이언트 제어 메지시
  111. ////////
  112. VMS_SERVER_CTL_INFO FSvrCtl; /* local control */
  113. CLIENT_COMMAND m_Req; /* client request */
  114. TSET_INFO_STRUCT m_Set; /* client set */
  115. //REQUEST_REGISTERED m_Registered; /* local command */
  116. ////////
  117. TVmsFormManager *m_pVmsFormList; /* VmsFormList */
  118. INT_VMS_STATE *m_pState; /* VMS 상태 정보 */
  119. TITSLog *FLogFile;
  120. int FErrLine;
  121. void __fastcall InitRx();
  122. void __fastcall ClientInitInfo(void);
  123. void __fastcall ClientTerminate(void);
  124. int __fastcall SaveStatusData(BYTE *pGS);
  125. int __fastcall RecvPacket(BYTE *ABuffer, int ALen);
  126. int __fastcall ProcessRecvPacket(BYTE *ABuffer, int ARcvLen);
  127. int __fastcall ResVmsStatus(BYTE *ABuffer, int ARcvLen);
  128. int __fastcall ResVmsModuleStatus(BYTE *ABuffer, int ARcvLen);
  129. int __fastcall ResVmsMsgDownload(BYTE *ABuffer, int ARcvLen);
  130. int __fastcall ResVmsLibDownload(BYTE *ABuffer, int ARcvLen);
  131. int __fastcall ResVmsSignboardPowerControl(BYTE *ABuffer, int ARcvLen);
  132. int __fastcall ResVmsInitialize(BYTE *ABuffer, int ARcvLen);
  133. int __fastcall SendPacket(BYTE *ACmdBuff, int AReqSendLen);
  134. int __fastcall ProcessSendPacket(BYTE AOpCode, COMMAND_ARGUMENT *AArg);
  135. int __fastcall MakeMsgDownload(BYTE *ABuff, COMMAND_ARGUMENT *AArg);
  136. int __fastcall MakeLibDownload(BYTE *ABuff, COMMAND_ARGUMENT *AArg);
  137. int __fastcall ClientStateMachine(void);
  138. int __fastcall ProcErrorState(bool flag, int result);
  139. int __fastcall SetClientState(int ACase);
  140. int __fastcall CheckLocalData(bool &ARequest);
  141. int __fastcall CheckClientData(bool &ARequest);
  142. int __fastcall SendDbThreadMessage(UINT Msg, int wParam, int lParam);
  143. int __fastcall SendDbThreadDataMessage(UINT Msg, void *pData, int iLen);
  144. void __fastcall ClientResponse(int error);
  145. protected:
  146. void __fastcall Execute();
  147. void __fastcall TcpClientConnect(TObject *Sender);
  148. void __fastcall TcpClientCreateHandle(TObject *Sender);
  149. void __fastcall TcpClientDestroyHandle(TObject *Sender);
  150. void __fastcall TcpClientDisconnect(TObject *Sender);
  151. void __fastcall TcpClientError(TObject *Sender, int SocketError);
  152. void __fastcall TcpClientReceive(TObject *Sender, char *Buf, int &DataLen);
  153. void __fastcall TcpClientSend(TObject *Sender, char *Buf, int &DataLen);
  154. bool __fastcall SocketActivity(bool &AError);
  155. bool __fastcall SocketActivity();
  156. void __fastcall Close(void);
  157. int __fastcall SendSubRegister(int AObj);
  158. void __fastcall DebugState();
  159. bool __fastcall IsCommandTimeout();
  160. void __fastcall InfoPacket(BYTE *ABuff, int ALen, bool ASend, int AResult=0);
  161. public:
  162. __fastcall TVMSCThread(bool CreateSuspended, int Tag, bool *ActiveIndicator);
  163. __fastcall ~TVMSCThread();
  164. IPC_LOG_MESSAGE FLogMsg;
  165. int LogData(char *ASndRcv, BYTE *AData, int ALen);
  166. int LogWrite(int ALogKind, char *AFmt, ...);
  167. int SysLogWrite(int ALogKind, char *AFmt, ...);
  168. bool FUserTerm;
  169. void ReqStatus();
  170. };
  171. //---------------------------------------------------------------------------
  172. #endif