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