//--------------------------------------------------------------------------- #ifndef VMSCThreadH #define VMSCThreadH //--------------------------------------------------------------------------- #include #include #include "AppGlobalF.h" #include "VmsPasigProtocolF.h" #include "VMSDataTypeF.h" #include "TVmsCtlrF.h" #include "ITSLogF.h" //--------------------------------------------------------------------------- //#define CLIENT_SND_BUF_SIZE 65536 /* message buffer size */ //#define CLIENT_SND_BUF_SIZE 111717 /* message buffer size */ #define CLIENT_SND_BUF_SIZE 200000 /* message buffer size */ #define CLIENT_RCV_BUF_SIZE 4096 /* 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 Addr; /* local id */ AnsiString VmsId; /* VMS ID */ int State; /* for the statemachine */ TDateTime reqStatusTimer; /* timer for state check sending */ int pollingCycleTime; /* Á¤º¸¿äûÁÖ±â */ int sendRetry; /* retry count */ TDateTime sendTimer; /* 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 en_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 }; /* ¼³Á¤ Á¤º¸ */ typedef struct tag_set_info_struct { BYTE VmsId[INT_VMS_MAX_ID+1]; /* VMS ID */ BYTE CtlType; /* Á¦¾îÀ¯Çü */ union { struct { BYTE Result; /* Á¦¾î°á°ú */ BYTE OperId[INT_VMS_MAX_OPER_ID+1]; /* Á¦¾î¿î¿µÀÚID */ } Control; struct { int SchMsgTime; /* °èȹµÈ ¸Þ½ÃÁö µ¿À۽ð£ */ int ModuleTemp; /* ¸ðµâÀü¿ø OFF ¿Âµµ */ int FanTemp; /* Fanµ¿ÀÛ ±âÁؿµµ */ int HeaterTemp; /* Heaterµ¿ÀÛ ±âÁؿµµ */ int ModuleFail; /* ¸ðµâÀå¾Ö ÆÇ´ÜÀ² */ int RetryCount; /* Àç½Ãµµ Ƚ¼ö */ int TimeOut; /* ÃÖ´ëÀÀ´ä´ë±â½Ã°£ */ } Para; } Data; } TSET_INFO_STRUCT; //--------------------------------------------------------------------------- class TVMSCThread : public TThread { private: TTcpClient *TcpClient; bool *ThreadActiveIndicator; TVmsCtlr *FVmsObj; AnsiString m_strName; /* thread name */ int m_RxDataLen; int m_RxPktLen; int m_RxState; int m_RxLen; BYTE m_RxBuff[CLIENT_RCV_BUF_SIZE]; /* receive data buffer */ BYTE m_TxBuff[CLIENT_SND_BUF_SIZE]; /* send data buffer */ TDateTime m_rcvPacketTimer; /* timer for receiver */ TDateTime m_WatchDogTimer; /* watchdog timer */ CLIENT_THREAD_STRUCT FClient; /* client thread */ DWORD m_DataPacketNumber; /* DataPacket Number */ DWORD m_SubscribeSerialNbr; /* Subscribe Serial Nbr */ LOCAL_COMMAND FLocalCmd; // VMS_CONTROL_INFO FCliCmd; //Ŭ¶óÀÌ¾ðÆ® Á¦¾î ¸ÞÁö½Ã //////// VMS_SERVER_CTL_INFO FSvrCtl; /* local control */ CLIENT_COMMAND m_Req; /* client request */ TSET_INFO_STRUCT m_Set; /* client set */ //REQUEST_REGISTERED m_Registered; /* local command */ //////// TVmsFormManager *m_pVmsFormList; /* VmsFormList */ INT_VMS_STATE *m_pState; /* VMS »óÅ Á¤º¸ */ TITSLog *FLogFile; int FErrLine; void __fastcall InitRx(); void __fastcall ClientInitInfo(void); void __fastcall ClientTerminate(void); int __fastcall SaveStatusData(BYTE *pGS); int __fastcall RecvPacket(BYTE *ABuffer, int ALen); int __fastcall ProcessRecvPacket(BYTE *ABuffer, int ARcvLen); int __fastcall ResVmsStatus(BYTE *ABuffer, int ARcvLen); int __fastcall ResVmsModuleStatus(BYTE *ABuffer, int ARcvLen); int __fastcall ResVmsMsgDownload(BYTE *ABuffer, int ARcvLen); int __fastcall ResVmsLibDownload(BYTE *ABuffer, int ARcvLen); int __fastcall ResVmsSignboardPowerControl(BYTE *ABuffer, int ARcvLen); int __fastcall ResVmsInitialize(BYTE *ABuffer, int ARcvLen); int __fastcall SendPacket(BYTE *ACmdBuff, int AReqSendLen); int __fastcall ProcessSendPacket(BYTE AOpCode, COMMAND_ARGUMENT *AArg); int __fastcall MakeMsgDownload(BYTE *ABuff, COMMAND_ARGUMENT *AArg); int __fastcall MakeLibDownload(BYTE *ABuff, COMMAND_ARGUMENT *AArg); int __fastcall ClientStateMachine(void); int __fastcall ProcErrorState(bool flag, int result); int __fastcall SetClientState(int ACase); int __fastcall CheckLocalData(bool &ARequest); int __fastcall CheckClientData(bool &ARequest); int __fastcall SendDbThreadMessage(UINT Msg, int wParam, int lParam); int __fastcall SendDbThreadDataMessage(UINT Msg, void *pData, int iLen); void __fastcall ClientResponse(int error); 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); void __fastcall DebugState(); bool __fastcall IsCommandTimeout(); void __fastcall InfoPacket(BYTE *ABuff, int ALen, bool ASend, int AResult=0); 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, ...); bool FUserTerm; void ReqStatus(); }; //--------------------------------------------------------------------------- #endif