#pragma once #include #include #include "HsmsAction.h" #define ER_NOERROR 0 #define ER_NOTSELECT -1 #define ER_BUSY -2 #define ER_PARAM_ERROR -3 class CModel; class CHsmsPassive { public: CHsmsPassive(); ~CHsmsPassive(); public: /* ÉèÖûúÆ÷ÐͺŠ×î´ó³¤¶È 20 bytes */ void setEquipmentModelType(const char* pszMode); /* ÉèÖÃÈí¼þ°æ±¾ºÅ ×î´ó³¤¶È 20 bytes */ void setSoftRev(const char* pszRev); unsigned OnCimWork(); void OnTimer(UINT nTimerid); void setActionTimeout(int nSecond); int init(CModel* pModel, const char* pszName, unsigned int port); int term(); public: /* request¿ªÍ·µÄº¯ÊýΪÖ÷¶¯·¢ËÍÊý¾ÝµÄº¯Êý */ int requestAreYouThere(); int requestAlarmReport(int ALCD, int ALID, const char* ALTX); private: void replyAck(int s, int f, unsigned int systemBytes, BYTE ack, const char* pszAckName); /* reply¿ªÍ·µÄº¯ÊýΪ»Ø¸´º¯Êý */ int replyAreYouThere(unsigned int systemBytes); int replyEstablishCommunications(unsigned int systemBytes); int replyDatetime(IMessage* pRecv); int replyEanbleDisableEventReport(IMessage* pRecv); int replyEanbleDisableAlarmReport(IMessage* pRecv); int replyTerminalDisplay(IMessage* pRecv); private: inline void Lock() { EnterCriticalSection(&m_criticalSection); } inline void Unlock() { LeaveCriticalSection(&m_criticalSection); } int onRecvMsg(IMessage* pMessage); private: CModel* m_pModel; IPassive* m_pPassive; int m_nActionTimeout; unsigned int m_nSystemByte; unsigned short m_nSessionId; BOOL m_bAreYouThereRequest; std::string m_strEquipmentModelType; std::string m_strSoftRev; CRITICAL_SECTION m_criticalSection; std::list m_listAction; std::list m_listActionSent; private: BOOL m_bCimWorking; HANDLE m_hCimWorkEvent; HANDLE m_hCimWorkThreadHandle; unsigned m_nCimWorkThrdaddr; };