// SimulatorDlg.h: 头文件 // #pragma once #include "TCPServerIOCP.h" #include "PubFun.h" #include #include "PktAssembleBuff.h" #include "DlgRecord.h" #include "CSM315ProtocolEx.h" // //struct stClientItem //{ // SOCKET sock; // sockaddr_in from; // int recvCount; // int sendCount; // SYSTEMTIME stConnect; // SYSTEMTIME stLastRecv; //}; struct stNodeItem { TCHAR szName[100]; WORD wNodeID; vector vctAcqID; }; struct Clt315_Info// : public JDSP_CLIENT_SESSION { ClientInfo* pTcpClt; PktAssembleBuff pktAssembleBuff; PktQueue AysnPktQueue; }; // CSimulatorDlg 对话框 class CSimulatorDlg : public CDialogEx, public ITcpServerCallBack { // 构造 public: CSimulatorDlg(CWnd* pParent = nullptr); // 标准构造函数 ~CSimulatorDlg() { delete m_pDlgRecord; } // 对话框数据 #ifdef AFX_DESIGN_TIME enum { IDD = IDD_SIMULATOR_DIALOG }; #endif //CTCPSocket m_jhdSock; //JHD连接SOCKET TCPServerIOCP m_tcpServer_315; //tcp服务 //bool m_bJHDConnected; //JHD服务器连接标志 CDlgRecord* m_pDlgRecord; CString m_strClientIP; UINT m_uPort; //std::map m_mapClients; //key=ip:port protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 //AFX_MSG_CALL LRESULT OnJhdDisconnect(WPARAM, LPARAM); public: void OnInitSocket(); void OnRecvPkt(PKT_DATA* ppd, Clt315_Info* pCltInfo); public: virtual void ConnStatusChange(ClientInfo* pCltInfo, BOOL bIsConn); virtual void OnRecvData_TCPServer(BYTE* pData, int iLen, ClientInfo* pCltInfo); //315收到数据包后,放入接收队列,由接收处理函数处理接收包 static DWORD WINAPI Thread_DealRecv(LPVOID pParam); DWORD DealRecv(); //油压油位和转辙机状态主动通知线程 static DWORD WINAPI Thread_SendStatusByInterval(LPVOID pParam); DWORD SendStatusByInterval(); std::map m_map315CltInfo; CCriticalSection m_cs315CltList; bool m_bWIFRunning = false;//系统程序是否运行 HANDLE m_hRcvThread; HANDLE m_hYWAndStatus; //HANDLE m_hRecvSema1;//数据信号量 线程1 std::map> m_mapNodes;//key=ip:port key=牵引点ID int SendHeartbeat(); BOOL DealRequestPkt(PBYTE pBuf, int nBufLen, ClientInfo* pCltI); void GetGapConfig(C315CommData& CommData); void InsertClient(const ClientInfo* pCltInfo); void UpdateClient(const ClientInfo* pCltInfo); void DeleteClient(const ClientInfo* pCltInfo); void SendClients(const C315CommData& CommData); void SendClients(const C315CommData& CommData, const CString &strClientIP, UINT uPort); // 实现 protected: HICON m_hIcon; // 生成的消息映射函数 virtual BOOL OnInitDialog(); afx_msg void OnPaint(); afx_msg HCURSOR OnQueryDragIcon(); DECLARE_MESSAGE_MAP() public: afx_msg void OnBnClickedButtonListen(); void OnBnClickedButtonGapcfg(); CListCtrl m_lstClients; CListCtrl m_lstEqps; CDateTimeCtrl m_dtBegin; CDateTimeCtrl m_dtEnd; afx_msg void OnBnClickedButtonNewvalue(); afx_msg void OnLvnItemchangedListClients(NMHDR* pNMHDR, LRESULT* pResult); afx_msg void OnBnClickedCheckAllAlarm(); afx_msg void OnBnClickedButtonAlarm(); afx_msg void OnBnClickedButton0x55(); afx_msg void OnBnClickedButton0x56(); afx_msg void OnBnClickedButton0x57(); afx_msg void OnBnClickedButtonRecord(); afx_msg void OnBnClickedButtonParse(); };