123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178 |
- /****************************************************************************
- * @source : VMSCThread.h
- * @description : VMS Client Socket Thread header
- ****************************************************************************
- * DATE AUTHOR DESCRIPTION
- * --------------------------------------------------------------------------
- * 2012/03/09 CYM [100] First Cut
- *
- ****************************************************************************/
- //---------------------------------------------------------------------------
- #ifndef VMSCThreadH
- #define VMSCThreadH
- //---------------------------------------------------------------------------
- #include <Classes.hpp>
- #include <Sockets.hpp>
- #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
|