From a351ed8a97a72bddfb281d2aa350a5c42a7f81a5 Mon Sep 17 00:00:00 2001
From: LAPTOP-SNT8I5JK\Boounion <Chenluhua@qq.com>
Date: 星期四, 16 十月 2025 17:40:49 +0800
Subject: [PATCH] 1.添加客户端列表显示;
---
SourceCode/Bond/Servo/ClientListDlg.cpp | 141 +++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 141 insertions(+), 0 deletions(-)
diff --git a/SourceCode/Bond/Servo/ClientListDlg.cpp b/SourceCode/Bond/Servo/ClientListDlg.cpp
new file mode 100644
index 0000000..500062e
--- /dev/null
+++ b/SourceCode/Bond/Servo/ClientListDlg.cpp
@@ -0,0 +1,141 @@
+锘�#include "stdafx.h"
+#include "ClientListDlg.h"
+#include "afxdialogex.h"
+#include "../DAQBridge/core/Collector.h"
+#include "CMaster.h"
+#include "Model.h"
+#include "Servo.h"
+#include <chrono>
+#include <iomanip>
+#include <sstream>
+
+// CClientListDlg 瀵硅瘽妗�
+
+IMPLEMENT_DYNAMIC(CClientListDlg, CDialogEx)
+
+CClientListDlg::CClientListDlg(CWnd* pParent /*=nullptr*/)
+ : CDialogEx(IDD_DIALOG_CLIENT_LIST, pParent)
+{
+}
+
+CClientListDlg::~CClientListDlg()
+{
+}
+
+void CClientListDlg::DoDataExchange(CDataExchange* pDX)
+{
+ CDialogEx::DoDataExchange(pDX);
+ DDX_Control(pDX, IDC_LIST_CLIENTS, m_listClients);
+}
+
+BEGIN_MESSAGE_MAP(CClientListDlg, CDialogEx)
+ ON_BN_CLICKED(IDC_BUTTON_REFRESH, &CClientListDlg::OnBnClickedRefresh)
+ ON_WM_SYSCOMMAND()
+END_MESSAGE_MAP()
+
+// CClientListDlg 娑堟伅澶勭悊绋嬪簭
+
+BOOL CClientListDlg::OnInitDialog()
+{
+ CDialogEx::OnInitDialog();
+
+ // 鍒濆鍖栧垪琛ㄦ帶浠�
+ m_listClients.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES | LVS_EX_HEADERDRAGDROP);
+
+ // 娣诲姞鍒�
+ m_listClients.InsertColumn(0, _T("IP鍦板潃"), LVCFMT_LEFT, 120);
+ m_listClients.InsertColumn(1, _T("绔彛"), LVCFMT_CENTER, 80);
+ m_listClients.InsertColumn(2, _T("鐗堟湰鐘舵��"), LVCFMT_CENTER, 100);
+ m_listClients.InsertColumn(3, _T("杩炴帴鐘舵��"), LVCFMT_CENTER, 100);
+ m_listClients.InsertColumn(4, _T("杩炴帴鏃堕棿"), LVCFMT_LEFT, 150);
+
+ // 鍒锋柊瀹㈡埛绔垪琛�
+ RefreshClientList();
+
+ return TRUE; // 闄ら潪灏嗙劍鐐硅缃埌鎺т欢锛屽惁鍒欒繑鍥� TRUE
+}
+
+void CClientListDlg::OnBnClickedRefresh()
+{
+ RefreshClientList();
+}
+
+void CClientListDlg::OnSysCommand(UINT nID, LPARAM lParam)
+{
+ if (nID == SC_CLOSE)
+ {
+ CDialogEx::OnCancel();
+ return;
+ }
+ CDialogEx::OnSysCommand(nID, lParam);
+}
+
+void CClientListDlg::RefreshClientList()
+{
+ // 娓呯┖褰撳墠鍒楄〃
+ m_listClients.DeleteAllItems();
+ m_clients.clear();
+
+ // 鑾峰彇Collector瀹炰緥
+ extern CServoApp theApp;
+ SERVO::CMaster& master = theApp.m_model.getMaster();
+ Collector* pCollector = master.getCollector();
+
+ if (pCollector)
+ {
+ // 鑾峰彇鐪熷疄鐨勫鎴风鍒楄〃
+ auto clientSummaries = pCollector->getClientList();
+
+ // 杞崲鏁版嵁鏍煎紡
+ for (const auto& summary : clientSummaries)
+ {
+ ClientInfo client;
+ client.ip = summary.ip;
+ client.port = summary.port;
+ client.versionOk = summary.versionOk;
+ client.status = summary.versionOk ? "宸茶繛鎺�" : "鐗堟湰涓嶅尮閰�";
+
+ // 鑾峰彇褰撳墠鏃堕棿浣滀负杩炴帴鏃堕棿锛堝疄闄呭疄鐜颁腑搴旇浠嶤ollector鑾峰彇鐪熷疄杩炴帴鏃堕棿锛�
+ auto now = std::chrono::system_clock::now();
+ auto time_t = std::chrono::system_clock::to_time_t(now);
+ std::tm tm;
+ localtime_s(&tm, &time_t);
+
+ std::ostringstream oss;
+ oss << std::put_time(&tm, "%Y-%m-%d %H:%M:%S");
+ client.connectTime = oss.str();
+
+ m_clients.push_back(client);
+ }
+ }
+ else
+ {
+ // 濡傛灉鏃犳硶鑾峰彇Collector瀹炰緥锛屾樉绀烘彁绀轰俊鎭�
+ ClientInfo noData;
+ noData.ip = "鏃犳硶鑾峰彇鏁版嵁";
+ noData.port = 0;
+ noData.versionOk = false;
+ noData.status = "Collector鏈垵濮嬪寲";
+ noData.connectTime = "";
+ m_clients.push_back(noData);
+ }
+
+ // 鏇存柊鍒楄〃鏄剧ず
+ UpdateClientList(m_clients);
+}
+
+void CClientListDlg::UpdateClientList(const std::vector<ClientInfo>& clients)
+{
+ m_listClients.DeleteAllItems();
+
+ for (size_t i = 0; i < clients.size(); ++i)
+ {
+ const ClientInfo& client = clients[i];
+
+ int nItem = m_listClients.InsertItem(i, CString(client.ip.c_str()));
+ m_listClients.SetItemText(nItem, 1, CString(std::to_string(client.port).c_str()));
+ m_listClients.SetItemText(nItem, 2, client.versionOk ? _T("姝e父") : _T("寮傚父"));
+ m_listClients.SetItemText(nItem, 3, CString(client.status.c_str()));
+ m_listClients.SetItemText(nItem, 4, CString(client.connectTime.c_str()));
+ }
+}
--
Gitblit v1.9.3