#pragma once
|
#include <string>
|
#include <list>
|
#include "HsmsAction.h"
|
#include <functional>
|
#include <vector>
|
|
|
#define ER_NOERROR 0
|
#define ER_NOTSELECT -1
|
#define ER_BUSY -2
|
#define ER_PARAM_ERROR -3
|
|
|
/*
|
* ³£Á¿Êý¾Ý½á¹¹
|
*/
|
typedef struct _EQConstant
|
{
|
unsigned int id;
|
char szValue[256];
|
} EQConstant;
|
|
/*
|
* Command Êý¾Ý½á¹¹
|
*/
|
typedef struct _CommandParameter
|
{
|
char szName[256];
|
char szValue[256];
|
} CommandParameter;
|
|
typedef std::function<void(void* pFrom)> SECSEQOFFLINE;
|
typedef std::function<void(void* pFrom, std::vector<EQConstant>&)> SECSEQCONSTANTREQUEST;
|
typedef std::function<void(void* pFrom, const char*, std::vector<CommandParameter>&)> SECSCommand;
|
typedef struct _SECSListener
|
{
|
SECSEQOFFLINE onEQOffLine;
|
SECSEQOFFLINE onEQOnLine;
|
SECSEQCONSTANTREQUEST onEQConstantRequest;
|
SECSEQCONSTANTREQUEST onEQConstantSend;
|
SECSCommand onCommand;
|
} SECSListener;
|
|
|
class CModel;
|
class CHsmsPassive
|
{
|
public:
|
CHsmsPassive();
|
~CHsmsPassive();
|
|
public:
|
/* ÉèÖûúÆ÷ÐͺŠ×î´ó³¤¶È 20 bytes */
|
void setEquipmentModelType(const char* pszMode);
|
|
/* ÉèÖÃÈí¼þ°æ±¾ºÅ ×î´ó³¤¶È 20 bytes */
|
void setSoftRev(const char* pszRev);
|
|
void setListener(SECSListener listener);
|
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(IMessage* pRecv);
|
int replyEstablishCommunications(IMessage* pRecv);
|
int replyOnLine(IMessage* pRecv);
|
int replyOffLine(IMessage* pRecv);
|
int replyEquipmentConstantRequest(IMessage* pRecv);
|
int replyEquipmentConstantSend(IMessage* pRecv);
|
int replyDatetime(IMessage* pRecv);
|
int replyEanbleDisableEventReport(IMessage* pRecv);
|
int replyCommand(IMessage* pRecv);
|
int replyEanbleDisableAlarmReport(IMessage* pRecv);
|
int replyQueryPPIDList(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<CHsmsAction*> m_listAction;
|
std::list<CHsmsAction*> m_listActionSent;
|
|
private:
|
SECSListener m_listener;
|
BOOL m_bCimWorking;
|
HANDLE m_hCimWorkEvent;
|
HANDLE m_hCimWorkThreadHandle;
|
unsigned m_nCimWorkThrdaddr;
|
};
|