VMSCThread.h 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. /****************************************************************************
  2. * @source : VMSCThread.h
  3. * @description : VMS Client Socket Thread header
  4. ****************************************************************************
  5. * DATE AUTHOR DESCRIPTION
  6. * --------------------------------------------------------------------------
  7. * 2012/03/09 CYM [100] First Cut
  8. *
  9. ****************************************************************************/
  10. //---------------------------------------------------------------------------
  11. #ifndef VMSCThreadH
  12. #define VMSCThreadH
  13. //---------------------------------------------------------------------------
  14. #include <Classes.hpp>
  15. #include <Sockets.hpp>
  16. #include "VMSProtocol.h"
  17. #include "VMSDataTypeF.h"
  18. #include "TVmsCtlrF.h"
  19. #include "ITSLogF.h"
  20. //---------------------------------------------------------------------------
  21. /***************************************
  22. **
  23. ** Constants
  24. **
  25. */
  26. #define CLIENT_MSG_BUF_SIZE 65536 /* message buffer size */
  27. #define CLIENT_MAX_PACKET_SIZE 65536 /* max packet size */
  28. #define CLIENT_CONNECT_RETRY_TIME 60 /* connect retry time */
  29. #define CLIENT_CHANGE_TIME 5 /* change wait time */
  30. // client thread
  31. typedef struct client_thread_struct
  32. {
  33. BYTE Idx; /* information index */
  34. AnsiString IpAddress; /* IP주소 */
  35. int Port; /* 포트번호 */
  36. int TimeOut; /* 시간초과 */
  37. int CycleTime; /* 주기 */
  38. int Addr; /* local id */
  39. AnsiString VmsId; /* VMS ID */
  40. int State; /* for the statemachine */
  41. TDateTime sTimer; /* timer for state check sending */
  42. int iRetry; /* retry count */
  43. TDateTime cTimer; /* timer for command timeout check */
  44. AnsiString LocalCenterId; /* 로컬 센터ID */
  45. AnsiString LocalDomainNm; /* 로컬 도메인명칭 */
  46. AnsiString CenterId; /* 센터ID */
  47. AnsiString DomainNm; /* 도메인명칭 */
  48. AnsiString UserName; /* 사용자명 */
  49. AnsiString UserPasswd; /* 사용자비밀번호 */
  50. int MaxHeartbeatTime; /* 최대허트비트지속시간 */
  51. int DatagramSize; /* 데이터그램 크기 */
  52. } CLIENT_THREAD_STRUCT;
  53. typedef enum eEN_CLIENT_MACHINE_STATE
  54. {
  55. /* common */
  56. CT_IDLE = 1,
  57. CT_LOGIN,
  58. CT_SECTION,
  59. CT_CLOSE,
  60. CT_REGIST,
  61. CT_REGIST_COMMAND,
  62. CT_REGIST_WAIT,
  63. /* sender */
  64. CT_LOCAL_COMMAND,
  65. CT_CLIENT_COMMAND,
  66. /* receiver */
  67. CT_LOGIN_WAIT,
  68. CT_FRED_WAIT,
  69. CT_LOCAL_WAIT,
  70. CT_CLIENT_WAIT
  71. } EN_CLIENT_MACHINE_STATE;
  72. enum
  73. {
  74. SET_CLIENT_SUCC,
  75. SET_CLIENT_FAIL
  76. };
  77. //---------------------------------------------------------------------------
  78. class TVMSCThread : public TThread
  79. {
  80. private:
  81. TTcpClient *TcpClient;
  82. bool *ThreadActiveIndicator;
  83. TVmsCtlr *FVmsObj;
  84. AnsiString m_strName; /* thread name */
  85. int m_RxLen; /* received data length */
  86. BYTE m_RxBuff[CLIENT_MAX_PACKET_SIZE]; /* receive data buffer */
  87. TDateTime m_rTimer; /* timer for receiver */
  88. TDateTime m_WatchDogTimer; /* watchdog timer */
  89. CLIENT_THREAD_STRUCT m_Client; /* client thread */
  90. DWORD m_DataPacketNumber; /* DataPacket Number */
  91. DWORD m_SubscribeSerialNbr; /* Subscribe Serial Nbr */
  92. ACCEPT_REGISTERED m_SubRegistered;
  93. ACCEPT_REGISTERED m_Registered; /* Accept Registered Subscription */
  94. CLIENT_CTL_INFO m_Ctl; /* local control */
  95. INT_VMS_STATE *m_pState; /* VMS 상태 정보 */
  96. TITSLog *FLogFile;
  97. int FWatchDogTime;
  98. bool FGenState, FModState, FPowState;
  99. int FErrLine;
  100. void __fastcall ClientInitInfo(void);
  101. void __fastcall ClientTerminate(void);
  102. void __fastcall LOG_WriteTime(Time_t *pTime);
  103. int __fastcall SaveStateData(GeneralStatusMessage_t *pGS);
  104. int __fastcall RecvPacket(void *Data, int Len);
  105. int __fastcall ProcessRecvPacket(BYTE *pBuffer, int Len);
  106. int __fastcall PacketAccept(Accept_t *pAccept);
  107. int __fastcall PacketReject(Reject_t *pReject);
  108. int __fastcall PacketPublication(Publication_t *pPublication);
  109. int __fastcall PacketPublicationData(PublicationData_t *pData);
  110. int __fastcall SendPacket(void *Data, int Len, BYTE cmd);
  111. int __fastcall ProcessCommand(BYTE cmd, CLIENT_ARGUMENT *arg);
  112. int __fastcall CommandLogin(Login_t *pLogin);
  113. int __fastcall CommandSubscription(Subscription_t *pSubscripiton, SUBSCRIPTION_ARGUMENT Arg);
  114. void __fastcall ClientStateMachine(void);
  115. void __fastcall ProcErrorState(bool flag, int result);
  116. void __fastcall SetClientState(int ACase);
  117. int __fastcall CheckLocalData(bool &ARequest);
  118. int __fastcall CheckClientData(bool &ARequest);
  119. int __fastcall CheckRegistData(bool &ARequest);
  120. protected:
  121. void __fastcall Execute();
  122. void __fastcall TcpClientConnect(TObject *Sender);
  123. void __fastcall TcpClientCreateHandle(TObject *Sender);
  124. void __fastcall TcpClientDestroyHandle(TObject *Sender);
  125. void __fastcall TcpClientDisconnect(TObject *Sender);
  126. void __fastcall TcpClientError(TObject *Sender, int SocketError);
  127. void __fastcall TcpClientReceive(TObject *Sender, char *Buf, int &DataLen);
  128. void __fastcall TcpClientSend(TObject *Sender, char *Buf, int &DataLen);
  129. bool __fastcall SocketActivity(bool &AError);
  130. bool __fastcall SocketActivity();
  131. void __fastcall Close(void);
  132. int __fastcall SendSubRegister(int AObj);
  133. public:
  134. __fastcall TVMSCThread(bool CreateSuspended, int Tag, bool *ActiveIndicator);
  135. __fastcall ~TVMSCThread();
  136. IPC_LOG_MESSAGE FLogMsg;
  137. int LogData(char *ASndRcv, BYTE *AData, int ALen);
  138. int LogWrite(int ALogKind, char *AFmt, ...);
  139. int SysLogWrite(int ALogKind, char *AFmt, ...);
  140. };
  141. //---------------------------------------------------------------------------
  142. #endif