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