SimulatorDlg.h 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. 
  2. // SimulatorDlg.h: 头文件
  3. //
  4. #pragma once
  5. #include "TCPServerIOCP.h"
  6. #include "PubFun.h"
  7. #include <map>
  8. #include "PktAssembleBuff.h"
  9. #include "DlgRecord.h"
  10. #include "CSM315ProtocolEx.h"
  11. //
  12. //struct stClientItem
  13. //{
  14. // SOCKET sock;
  15. // sockaddr_in from;
  16. // int recvCount;
  17. // int sendCount;
  18. // SYSTEMTIME stConnect;
  19. // SYSTEMTIME stLastRecv;
  20. //};
  21. struct stNodeItem
  22. {
  23. TCHAR szName[100];
  24. WORD wNodeID;
  25. vector<WORD> vctAcqID;
  26. };
  27. struct Clt315_Info// : public JDSP_CLIENT_SESSION
  28. {
  29. ClientInfo* pTcpClt;
  30. PktAssembleBuff pktAssembleBuff;
  31. PktQueue AysnPktQueue;
  32. };
  33. // CSimulatorDlg 对话框
  34. class CSimulatorDlg : public CDialogEx, public ITcpServerCallBack
  35. {
  36. // 构造
  37. public:
  38. CSimulatorDlg(CWnd* pParent = nullptr); // 标准构造函数
  39. ~CSimulatorDlg()
  40. {
  41. delete m_pDlgRecord;
  42. }
  43. // 对话框数据
  44. #ifdef AFX_DESIGN_TIME
  45. enum { IDD = IDD_SIMULATOR_DIALOG };
  46. #endif
  47. //CTCPSocket m_jhdSock; //JHD连接SOCKET
  48. TCPServerIOCP m_tcpServer_315; //tcp服务
  49. //bool m_bJHDConnected; //JHD服务器连接标志
  50. CDlgRecord* m_pDlgRecord;
  51. CString m_strClientIP;
  52. UINT m_uPort;
  53. //std::map<std::string, stClientItem> m_mapClients; //key=ip:port
  54. protected:
  55. virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
  56. //AFX_MSG_CALL LRESULT OnJhdDisconnect(WPARAM, LPARAM);
  57. public:
  58. void OnInitSocket();
  59. void OnRecvPkt(PKT_DATA* ppd, Clt315_Info* pCltInfo);
  60. public:
  61. virtual void ConnStatusChange(ClientInfo* pCltInfo, BOOL bIsConn);
  62. virtual void OnRecvData_TCPServer(BYTE* pData, int iLen, ClientInfo* pCltInfo);
  63. //315收到数据包后,放入接收队列,由接收处理函数处理接收包
  64. static DWORD WINAPI Thread_DealRecv(LPVOID pParam);
  65. DWORD DealRecv();
  66. //油压油位和转辙机状态主动通知线程
  67. static DWORD WINAPI Thread_SendStatusByInterval(LPVOID pParam);
  68. DWORD SendStatusByInterval();
  69. std::map<ClientInfo*, Clt315_Info*> m_map315CltInfo;
  70. CCriticalSection m_cs315CltList;
  71. bool m_bWIFRunning = false;//系统程序是否运行
  72. HANDLE m_hRcvThread;
  73. HANDLE m_hYWAndStatus;
  74. //HANDLE m_hRecvSema1;//数据信号量 线程1
  75. std::map<string, std::map<WORD, stNodeItem>> m_mapNodes;//key=ip:port key=牵引点ID
  76. int SendHeartbeat();
  77. BOOL DealRequestPkt(PBYTE pBuf, int nBufLen, ClientInfo* pCltI);
  78. void GetGapConfig(C315CommData& CommData);
  79. void InsertClient(const ClientInfo* pCltInfo);
  80. void UpdateClient(const ClientInfo* pCltInfo);
  81. void DeleteClient(const ClientInfo* pCltInfo);
  82. void SendClients(const C315CommData& CommData);
  83. void SendClients(const C315CommData& CommData, const CString &strClientIP, UINT uPort);
  84. // 实现
  85. protected:
  86. HICON m_hIcon;
  87. // 生成的消息映射函数
  88. virtual BOOL OnInitDialog();
  89. afx_msg void OnPaint();
  90. afx_msg HCURSOR OnQueryDragIcon();
  91. DECLARE_MESSAGE_MAP()
  92. public:
  93. afx_msg void OnBnClickedButtonListen();
  94. void OnBnClickedButtonGapcfg();
  95. CListCtrl m_lstClients;
  96. CListCtrl m_lstEqps;
  97. CDateTimeCtrl m_dtBegin;
  98. CDateTimeCtrl m_dtEnd;
  99. afx_msg void OnBnClickedButtonNewvalue();
  100. afx_msg void OnLvnItemchangedListClients(NMHDR* pNMHDR, LRESULT* pResult);
  101. afx_msg void OnBnClickedCheckAllAlarm();
  102. afx_msg void OnBnClickedButtonAlarm();
  103. afx_msg void OnBnClickedButton0x55();
  104. afx_msg void OnBnClickedButton0x56();
  105. afx_msg void OnBnClickedButton0x57();
  106. afx_msg void OnBnClickedButtonRecord();
  107. afx_msg void OnBnClickedButtonParse();
  108. };