| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 | #ifndef C315_TCP_CLIENT_H#define C315_TCP_CLIENT_H#pragma once#include "TCPClientSocket.h"#include "CSM315Protocol.h"#include <list>#include <map>#include <atomic>#include <TimerEngine.h>#include <MonitorObject.h>#include <AlarmDefine.h>class C315SendTask{public:	C315SendTask(BYTE const* const  pPack, int nPackLen, E_315_PROTOCOL_TYPE protocal, uint8_t packno, int nReSendCount = 0, int nReSendInterval = 0);	void join();//释放调用这个private:	~C315SendTask();public:	BYTE* GetCmdData();	int GetCmdDataSize()const;public:	LPBYTE	m_pData;	int		m_nDataLen;	uint8_t m_nPackNO;	E_315_PROTOCOL_TYPE m_eProtocal;	time_t	m_uSendTime;		//上次发送时间(秒)	int		m_nReSendInterval;	//重发间隔时间(秒) 0:不重发	int		m_nReSendCount;		//重发次数 0:不重发 INT_MAX:无限重发};class C315TCPClient : public CTCPClientSocket, public ITimerCallBack, public CReceiveBuffer{public:	C315TCPClient();	~C315TCPClient();	virtual void Close() override;	//重发, 有单独线程调用	BOOL ReSend();	virtual int Send(const void* lpBuf, int nBufLen, int nFlags = 0);	void Insert(BYTE const* const  pPack, int nPackLen, E_315_PROTOCOL_TYPE protocal, uint8_t packno, bool bPush = false);	void SetProtocolMng(CCSM315Protocol* pMng) { m_lptlManageFrame = pMng; }	virtual int HasPack() override;	//inline void SetFather(per_user_data* a)	//{	//	m_pFather = a;	//}public:	virtual void TimerCallBack(UINT_PTR iTimerID, WPARAM dwBindParameter = 0);protected:	BOOL ReceiptPack(E_315_PROTOCOL_TYPE protocal, LPBYTE lpData, WORD wDataSize);	std::map<time_t, uint64_t> m_mapSendCout;protected:	BOOL HandleSubNotify(LPHJDATAHEAD2 lpHead, char* json, int json_len);protected:	virtual void ProcessPack(LPBYTE pPack, int nLen) override;	virtual void OnConnect(int nErrorCode) override;	virtual void OnClose(int nErrorCode) override;public:	CRITICAL_SECTION m_LOGMutex;	HANDLE    m_hFile = INVALID_HANDLE_VALUE;	int		  m_nLogMsgMaxLen = 50;	//日志报文长度。0:全部写入	DWORD CheckLog();	BOOL writelog(const char* pBuf, int len, BOOL bInOrOut, const char* note);	string GetStrFromData(const BYTE* buf, int dwLen) const;	bool Connect(LPCSTR pszServerIP, UINT nServerPort);	static DWORD OnReconnect(LPVOID lpParam);	bool QueryHistoryAlarm(E_315_PROTOCOL_TYPE ePortocol, stQueryAlarm* pAlarm, int nDataSize);	bool QueryHistoryData(E_315_PROTOCOL_TYPE ePortocol, stQueryHisData* pData, int nDataSize);	bool QueryHistoryCurveList(E_315_PROTOCOL_TYPE ePortocol, stQueryHisCurveList* pCurve, int nDataSize);	bool QueryHistoryCurve(E_315_PROTOCOL_TYPE ePortocol, stQueryHisCurve* pCurve, int nDataSize);public:	void SendClientConfig(E_315_PROTOCOL_TYPE ePortocol);	//old	void SendCurveData(WORD wEqpNO, eDaoChaPosi posi, const int num, bool bPush,		const MapTimeIntItor& map00, const MapTimeIntItor& map01,		const MapTimeIntItor& map10, const MapTimeIntItor& map11,		const MapTimeIntItor& map20, const MapTimeIntItor& map21, time_t atime);	void SendCurveData(WORD wEqpNO, eDaoChaPosi posi, const int num, bool bPush, 		std::map<time_t, int>* mapData[], time_t tmStartSecond, time_t tmEndSecond);	//void SendCurveData(E_315_PROTOCOL_TYPE ePortocol, uint16_t eqpno, const int num, bool bPush, const std::vector<int>& vctData0, const std::vector<int>& vctData1, const std::vector<int>& vctData2, DWORD atime);	void SendRealDataValue(WORD wEqpNO, DAOCHA_POSITION byFixOrNot, bool bPush, int nData0, int nData1, int nData2, int nTemp, int nHumi, const CTime& atime);	void SendRealDataValue(E_315_PROTOCOL_TYPE ePortocol);	//cbAlarmStatus 1:报警 2:恢复 dwTime 报警时间  dwRestoreTime:恢复时间 cbAlarmType:报警类型 posi:位置 cbAlarmParam:附加条件 val:报警值 refval:参考值 wSuggestID:建议ID	void SendAlarmData(WORD wNodeID, BYTE cbAlarmStatus, DWORD dwTime, DWORD dwRestoreTime, eZL_ALARMTYPE cbAlarmType, 		eDaoChaPosi posi, uint8_t level, eLowHigh cbAlarmParam, TIEDA_ACQ_VALUE& val, TIEDA_ACQ_VALUE& refVal, WORD wSuggestID);	static WORD Get315AlarmID(eZL_ALARMTYPE cbAlarmType, eDaoChaPosi posi, uint8_t level, eLowHigh cbAlarmParam);	unsigned char GetPackageID();private:	CCSM315Protocol* m_lptlManageFrame;	//per_user_data* m_pFather = nullptr;	int m_nSendFail = 0, m_nSendCount = 0, m_nSendLen = 0;	int m_nRecvCount = 0, m_nRecvLen = 0;	std::list<C315SendTask*> m_task;	std::mutex m_mtx;	std::atomic<unsigned char>		m_byAutoPackageID = 1;};#endif // !C315_TCP_CLIENT_H
 |