/**************************************************************************** * @source : VMSCThread.h * @description : VMS Client Socket Thread header **************************************************************************** * DATE AUTHOR DESCRIPTION * -------------------------------------------------------------------------- * 2012/03/09 CYM [100] First Cut * ****************************************************************************/ //--------------------------------------------------------------------------- #ifndef VMSCThreadH #define VMSCThreadH //--------------------------------------------------------------------------- #include #include #include "VMSProtocol.h" #include "VMSDataTypeF.h" #include "TVmsCtlrF.h" #include "ITSLogF.h" //--------------------------------------------------------------------------- /*************************************** ** ** Constants ** */ #define CLIENT_MSG_BUF_SIZE 65536 /* message buffer size */ #define CLIENT_MAX_PACKET_SIZE 65536 /* max packet size */ #define CLIENT_CONNECT_RETRY_TIME 60 /* connect retry time */ #define CLIENT_CHANGE_TIME 5 /* change wait time */ // client thread typedef struct client_thread_struct { BYTE Idx; /* information index */ AnsiString IpAddress; /* IPÁÖ¼Ò */ int Port; /* Æ÷Æ®¹øÈ£ */ int TimeOut; /* ½Ã°£Ãʰú */ int CycleTime; /* ÁÖ±â */ int Addr; /* local id */ AnsiString VmsId; /* VMS ID */ int State; /* for the statemachine */ TDateTime sTimer; /* timer for state check sending */ int iRetry; /* retry count */ TDateTime cTimer; /* timer for command timeout check */ AnsiString LocalCenterId; /* ·ÎÄà ¼¾ÅÍID */ AnsiString LocalDomainNm; /* ·ÎÄà µµ¸ÞÀθíĪ */ AnsiString CenterId; /* ¼¾ÅÍID */ AnsiString DomainNm; /* µµ¸ÞÀθíĪ */ AnsiString UserName; /* »ç¿ëÀÚ¸í */ AnsiString UserPasswd; /* »ç¿ëÀÚºñ¹Ð¹øÈ£ */ int MaxHeartbeatTime; /* ÃÖ´ëÇãÆ®ºñÆ®Áö¼Ó½Ã°£ */ int DatagramSize; /* µ¥ÀÌÅͱ׷¥ Å©±â */ } CLIENT_THREAD_STRUCT; typedef enum eEN_CLIENT_MACHINE_STATE { /* common */ CT_IDLE = 1, CT_LOGIN, CT_SECTION, CT_CLOSE, CT_REGIST, CT_REGIST_COMMAND, CT_REGIST_WAIT, /* sender */ CT_LOCAL_COMMAND, CT_CLIENT_COMMAND, /* receiver */ CT_LOGIN_WAIT, CT_FRED_WAIT, CT_LOCAL_WAIT, CT_CLIENT_WAIT } EN_CLIENT_MACHINE_STATE; enum { SET_CLIENT_SUCC, SET_CLIENT_FAIL }; //--------------------------------------------------------------------------- class TVMSCThread : public TThread { private: TTcpClient *TcpClient; bool *ThreadActiveIndicator; TVmsCtlr *FVmsObj; AnsiString m_strName; /* thread name */ int m_RxLen; /* received data length */ BYTE m_RxBuff[CLIENT_MAX_PACKET_SIZE]; /* receive data buffer */ TDateTime m_rTimer; /* timer for receiver */ TDateTime m_WatchDogTimer; /* watchdog timer */ CLIENT_THREAD_STRUCT m_Client; /* client thread */ DWORD m_DataPacketNumber; /* DataPacket Number */ DWORD m_SubscribeSerialNbr; /* Subscribe Serial Nbr */ ACCEPT_REGISTERED m_SubRegistered; ACCEPT_REGISTERED m_Registered; /* Accept Registered Subscription */ CLIENT_CTL_INFO m_Ctl; /* local control */ INT_VMS_STATE *m_pState; /* VMS »óÅ Á¤º¸ */ TITSLog *FLogFile; int FWatchDogTime; bool FGenState, FModState, FPowState; int FErrLine; void __fastcall ClientInitInfo(void); void __fastcall ClientTerminate(void); void __fastcall LOG_WriteTime(Time_t *pTime); int __fastcall SaveStateData(GeneralStatusMessage_t *pGS); int __fastcall RecvPacket(void *Data, int Len); int __fastcall ProcessRecvPacket(BYTE *pBuffer, int Len); int __fastcall PacketAccept(Accept_t *pAccept); int __fastcall PacketReject(Reject_t *pReject); int __fastcall PacketPublication(Publication_t *pPublication); int __fastcall PacketPublicationData(PublicationData_t *pData); int __fastcall SendPacket(void *Data, int Len, BYTE cmd); int __fastcall ProcessCommand(BYTE cmd, CLIENT_ARGUMENT *arg); int __fastcall CommandLogin(Login_t *pLogin); int __fastcall CommandSubscription(Subscription_t *pSubscripiton, SUBSCRIPTION_ARGUMENT Arg); void __fastcall ClientStateMachine(void); void __fastcall ProcErrorState(bool flag, int result); void __fastcall SetClientState(int ACase); int __fastcall CheckLocalData(bool &ARequest); int __fastcall CheckClientData(bool &ARequest); int __fastcall CheckRegistData(bool &ARequest); protected: void __fastcall Execute(); void __fastcall TcpClientConnect(TObject *Sender); void __fastcall TcpClientCreateHandle(TObject *Sender); void __fastcall TcpClientDestroyHandle(TObject *Sender); void __fastcall TcpClientDisconnect(TObject *Sender); void __fastcall TcpClientError(TObject *Sender, int SocketError); void __fastcall TcpClientReceive(TObject *Sender, char *Buf, int &DataLen); void __fastcall TcpClientSend(TObject *Sender, char *Buf, int &DataLen); bool __fastcall SocketActivity(bool &AError); bool __fastcall SocketActivity(); void __fastcall Close(void); int __fastcall SendSubRegister(int AObj); public: __fastcall TVMSCThread(bool CreateSuspended, int Tag, bool *ActiveIndicator); __fastcall ~TVMSCThread(); IPC_LOG_MESSAGE FLogMsg; int LogData(char *ASndRcv, BYTE *AData, int ALen); int LogWrite(int ALogKind, char *AFmt, ...); int SysLogWrite(int ALogKind, char *AFmt, ...); }; //--------------------------------------------------------------------------- #endif