315TCPClient.h 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. #ifndef C315_TCP_CLIENT_H
  2. #define C315_TCP_CLIENT_H
  3. #pragma once
  4. #include "TCPClientSocket.h"
  5. #include "CSM315Protocol.h"
  6. #include <list>
  7. #include <map>
  8. #include <atomic>
  9. #include <TimerEngine.h>
  10. #include <MonitorObject.h>
  11. #include <AlarmDefine.h>
  12. class C315SendTask
  13. {
  14. public:
  15. C315SendTask(BYTE const* const pPack, int nPackLen, E_315_PROTOCOL_TYPE protocal, uint8_t packno, int nReSendCount = 0, int nReSendInterval = 0);
  16. void join();//释放调用这个
  17. private:
  18. ~C315SendTask();
  19. public:
  20. BYTE* GetCmdData();
  21. int GetCmdDataSize()const;
  22. public:
  23. LPBYTE m_pData;
  24. int m_nDataLen;
  25. uint8_t m_nPackNO;
  26. E_315_PROTOCOL_TYPE m_eProtocal;
  27. time_t m_uSendTime; //上次发送时间(秒)
  28. int m_nReSendInterval; //重发间隔时间(秒) 0:不重发
  29. int m_nReSendCount; //重发次数 0:不重发 INT_MAX:无限重发
  30. };
  31. class C315TCPClient : public CTCPClientSocket, public ITimerCallBack, public CReceiveBuffer
  32. {
  33. public:
  34. C315TCPClient();
  35. ~C315TCPClient();
  36. virtual void Close() override;
  37. //重发, 有单独线程调用
  38. BOOL ReSend();
  39. virtual int Send(const void* lpBuf, int nBufLen, int nFlags = 0);
  40. void Insert(BYTE const* const pPack, int nPackLen, E_315_PROTOCOL_TYPE protocal, uint8_t packno, bool bPush = false);
  41. void SetProtocolMng(CCSM315Protocol* pMng) { m_lptlManageFrame = pMng; }
  42. virtual int HasPack() override;
  43. //inline void SetFather(per_user_data* a)
  44. //{
  45. // m_pFather = a;
  46. //}
  47. public:
  48. virtual void TimerCallBack(UINT_PTR iTimerID, WPARAM dwBindParameter = 0);
  49. protected:
  50. BOOL ReceiptPack(E_315_PROTOCOL_TYPE protocal, LPBYTE lpData, WORD wDataSize);
  51. std::map<time_t, uint64_t> m_mapSendCout;
  52. protected:
  53. BOOL HandleSubNotify(LPHJDATAHEAD2 lpHead, char* json, int json_len);
  54. protected:
  55. virtual void ProcessPack(LPBYTE pPack, int nLen) override;
  56. virtual void OnConnect(int nErrorCode) override;
  57. virtual void OnClose(int nErrorCode) override;
  58. public:
  59. CRITICAL_SECTION m_LOGMutex;
  60. HANDLE m_hFile = INVALID_HANDLE_VALUE;
  61. int m_nLogMsgMaxLen = 50; //日志报文长度。0:全部写入
  62. DWORD CheckLog();
  63. BOOL writelog(const char* pBuf, int len, BOOL bInOrOut, const char* note);
  64. string GetStrFromData(const BYTE* buf, int dwLen) const;
  65. bool Connect(LPCSTR pszServerIP, UINT nServerPort);
  66. static DWORD OnReconnect(LPVOID lpParam);
  67. bool QueryHistoryAlarm(E_315_PROTOCOL_TYPE ePortocol, stQueryAlarm* pAlarm, int nDataSize);
  68. bool QueryHistoryData(E_315_PROTOCOL_TYPE ePortocol, stQueryHisData* pData, int nDataSize);
  69. bool QueryHistoryCurveList(E_315_PROTOCOL_TYPE ePortocol, stQueryHisCurveList* pCurve, int nDataSize);
  70. bool QueryHistoryCurve(E_315_PROTOCOL_TYPE ePortocol, stQueryHisCurve* pCurve, int nDataSize);
  71. public:
  72. void SendClientConfig(E_315_PROTOCOL_TYPE ePortocol);
  73. //old
  74. void SendCurveData(WORD wEqpNO, eDaoChaPosi posi, const int num, bool bPush,
  75. const MapTimeIntItor& map00, const MapTimeIntItor& map01,
  76. const MapTimeIntItor& map10, const MapTimeIntItor& map11,
  77. const MapTimeIntItor& map20, const MapTimeIntItor& map21, time_t atime);
  78. void SendCurveData(WORD wEqpNO, eDaoChaPosi posi, const int num, bool bPush,
  79. std::map<time_t, int>* mapData[], time_t tmStartSecond, time_t tmEndSecond);
  80. //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);
  81. void SendRealDataValue(WORD wEqpNO, DAOCHA_POSITION byFixOrNot, bool bPush, int nData0, int nData1, int nData2, int nTemp, int nHumi, const CTime& atime);
  82. void SendRealDataValue(E_315_PROTOCOL_TYPE ePortocol);
  83. //cbAlarmStatus 1:报警 2:恢复 dwTime 报警时间 dwRestoreTime:恢复时间 cbAlarmType:报警类型 posi:位置 cbAlarmParam:附加条件 val:报警值 refval:参考值 wSuggestID:建议ID
  84. void SendAlarmData(WORD wNodeID, BYTE cbAlarmStatus, DWORD dwTime, DWORD dwRestoreTime, eZL_ALARMTYPE cbAlarmType,
  85. eDaoChaPosi posi, uint8_t level, eLowHigh cbAlarmParam, TIEDA_ACQ_VALUE& val, TIEDA_ACQ_VALUE& refVal, WORD wSuggestID);
  86. static WORD Get315AlarmID(eZL_ALARMTYPE cbAlarmType, eDaoChaPosi posi, uint8_t level, eLowHigh cbAlarmParam);
  87. unsigned char GetPackageID();
  88. private:
  89. CCSM315Protocol* m_lptlManageFrame;
  90. //per_user_data* m_pFather = nullptr;
  91. int m_nSendFail = 0, m_nSendCount = 0, m_nSendLen = 0;
  92. int m_nRecvCount = 0, m_nRecvLen = 0;
  93. std::list<C315SendTask*> m_task;
  94. std::mutex m_mtx;
  95. std::atomic<unsigned char> m_byAutoPackageID = 1;
  96. };
  97. #endif // !C315_TCP_CLIENT_H