| 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
 
 
  |