//#ifndef _ZA_ACSPROC //#define _ZA_ACSPROC #pragma once //#include "daq/daq_cmddef.h" #include #include "thirdparty/json.h" #include #include #include "daq/daq_protocol.h" #include "Axiomclient.h" using namespace std; //区域数据结构体 struct area { int areaId; //区域ID string areaName; //区域名称 string areaCode; //区域编码 int parentId; //上级区域ID }; //门禁设备数据结构体 struct device { int deviceNo; //规约中记录的第几个设备 string deviceId; //设备ID string deviceName; //设备名称 int areaId; //所属区域ID string areaName; //所属区域名称 string deviceSn; //设备序列号 string commAddr; //设备IP地址 int isOnline; //设备在线状态 1:在线 0:离线 string commErrorMsg; //设备通信错误信息 当离线时有意义 }; //门数据结构体 struct door { int doorNo; //规约中记录的第几个门 string doorId; //门ID string doorName; //门名称 string doorAddr; //门地址 int areaId; //门所属区域ID string areaName; //门所属区域名称 string deviceId; //门所属控制器ID string deviceName; //门所属控制器名称 }; //实时刷卡记录结构体 struct event { int eventId; //事件ID string areaName; //区域名称 string deviceName; //门禁设备名称 string subDeviceId; //门ID string subDeviceName; //门名称 string eventTime; //事件时间 string eventName; //事件名称 string cardNo; //卡号 string cardType; //卡片类型 int accessBlockedReason; //拒绝类型 }; class AxionAcs : public CProtocol { public: void ReadIni(); virtual sint32 TxProc(); virtual sint32 RxProc(); virtual void Init(S_PROTOCOLCFG* pcfg); sint32 Get_Rtuno(); void Put_AYx(uint16 Rtuno, uint16 YxNo, uint8 YxValue); void PutSoe(int rtuno, int yxno, string time, string cardId); sint32 Get_CmdNum(); sint32 Get_ACmd(sint32 rtuno, S_RAWCMD* cmd); sint32 Del_ACmd(sint32 rtuno); sint32 Rpt_AResult(sint32 rtuno, S_RAWCMD cmd); string Getusername(); string Getpassword(); //------------------- // int GetEventId(int i); //获取第i个事件的事件ID string GetDoorId(int i); //获取第i个事件的门ID string GetEventTime(int i); //获取第i个事件的时间 string GetCardId(int i); //获取第i个事件中的卡号 int GetaccessBlockedReason(int i); //获取第i个事件中的拒绝类型 int Getareas(); //获取所有区域数据 int GetDevices(); //获取所有门禁设备数据 int GetDoors(); //获取所有门数据 int GetDoorState(int doorNo); //获取第doorNo个门的状态 int SetDoorOpen(int doorNo); //控制第doorNO个门为打开 int SetDoorClose(int doorNo); //控制第doorNO个门为关闭 int SetDoorMode(int doorNo, string mode); //控制第doorNO个门的工作模式为mode 0:自动,1:刷卡,2:卡+密码,3:卡或密码,4:常开,5:常闭,6:卡数据 int GetSwipecard(); //获取所有设备的实时刷卡记录 string Getmapdoor(int i); //获取门i对应的门ID //------------------ bool rxflag; bool txflag; bool xxflag; bool httpflag_doors; //获取门状态长连接标志,为true代表连接成功,false代表连接失败 bool httpflag1_doors; //本次长连接中是否为首次问门状态标志,true代表首次 bool httpflag_devices; //获取事件长连接标志 bool httpflag1_devices; //本次长连接中是否为首次获取事件标志 int deviceNum; //设备的总数量 int doorNum; //门的总数量 int lastEventId; //上一次获取事件的ID char logName[256]; //存放所有门信息的地址 int eventid[100]; //按获取到的顺序存放事件ID int eventidex[100]; //按事件ID的大小从小到大存放eventid[]的索引 // string callback_long; Fclient fclient_door; Fclient fclient_device; protected: vector areas; //存放所有区域数据的容器 vector devices; //存放所有门禁设备信息的容器 vector doors; //存放所有门信息的容器 vector events; //存放实时刷卡记录的容器 map map_username; map map_password; map map_device; //存放第几个设备和设备ID map map_door; //存放第几个门和门ID int GetNowSecond(); private: string urls_ip; string server_urls; char username[128]; char password[128]; sint32 rxthread; sint32 txthread; sint32 xxthread; };