From e57938fbda9bff702004038f76d009422968bff5 Mon Sep 17 00:00:00 2001
From: alielie <alielie@git.com>
Date: 星期五, 06 十一月 2026 18:05:07 +0800
Subject: [PATCH] 提交代码
---
DeviceService/ServiceManager/ServiceManager.cs | 130 +++++++++++++++++++++++++++++++++++++++++++
1 files changed, 130 insertions(+), 0 deletions(-)
diff --git a/DeviceService/ServiceManager/ServiceManager.cs b/DeviceService/ServiceManager/ServiceManager.cs
new file mode 100644
index 0000000..a5acb4e
--- /dev/null
+++ b/DeviceService/ServiceManager/ServiceManager.cs
@@ -0,0 +1,130 @@
+锘縰sing DeviceService.Device;
+using DeviceService.Entity;
+using DeviceService.Logging;
+using DeviceService.Service.NamePipe;
+using System.Windows;
+
+namespace DeviceService.Service
+{
+ public enum ServiceStatus
+ {
+ Idle = 0,
+ Running = 1,
+ Error = 2,
+ }
+
+ public class ServiceStateMachine : NotifyBase
+ {
+ public static ServiceStateMachine GlobalState = new ServiceStateMachine();
+
+ private ServiceStateMachine()
+ {
+
+ }
+
+ private ServiceStatus _state;
+ public ServiceStatus State
+ {
+ get => _state;
+ set
+ {
+ SetProperty(ref _state, value);
+ }
+ }
+
+ private bool _isRunning;
+ public bool IsRunning
+ {
+ get => _isRunning;
+ set
+ {
+ SetProperty(ref _isRunning, value);
+ }
+ }
+
+ }
+
+ public class ServiceManager
+ {
+ private static IService _serviceImpl;
+
+ private const string PipeName = "DeviceService";
+
+ public static void Start()
+ {
+ if (ServiceStateMachine.GlobalState.State == ServiceStatus.Running)
+ {
+ MessageBox.Show("宸插惎鍔�");
+ return;
+ }
+ _serviceImpl = new NamePipeService(PipeName);
+ _serviceImpl.DataReceived += PipeService_DataReceived;
+ _serviceImpl.ClientConnected += PipeService_ClientConnected;
+ _serviceImpl.ClientDisConnected += PipeService_ClientDisConnected;
+
+ string err = string.Empty;
+ bool allDone = true;
+
+ foreach (var device in DeviceHelper.AllDevices)
+ {
+ if (!DeviceManager.Register(device, out string fail))
+ {
+ allDone = false;
+ err += $"{fail}\r\n";
+ }
+ }
+
+ if (!allDone && MessageBox.Show(err, "鎻愮ず", MessageBoxButton.OKCancel) == MessageBoxResult.Cancel)
+ {
+ DeviceManager.UnRegisterAll();
+ ServiceStateMachine.GlobalState.State = ServiceStatus.Error;
+ return;
+ }
+
+
+ if (!_serviceImpl.Start(out string msg))
+ {
+ GlobalLogger.Logger.Error("ServiceManager", $"[鏈嶅姟] 绠¢亾鏈嶅姟鍚姩澶辫触锛歿msg}");
+ Stop();
+ // Stop 浼氭妸鐘舵�佺疆涓� Idle锛岃繖閲屽啀鏍囪涓哄紓甯革紝渚涚晫闈㈡樉绀�
+ ServiceStateMachine.GlobalState.State = ServiceStatus.Error;
+ throw new Exception(msg);
+ }
+ ServiceStateMachine.GlobalState.State = ServiceStatus.Running;
+ }
+
+ public static void Stop()
+ {
+ if (_serviceImpl == null)
+ {
+ return;
+ }
+
+ _serviceImpl.DataReceived -= PipeService_DataReceived;
+ _serviceImpl.ClientConnected -= PipeService_ClientConnected;
+ _serviceImpl.ClientDisConnected -= PipeService_ClientDisConnected;
+ _serviceImpl.Stop(out _);
+ _serviceImpl.Dispose();
+ _serviceImpl = null;
+ ServiceStateMachine.GlobalState.State = ServiceStatus.Idle;
+ }
+
+
+ private static void PipeService_DataReceived(object? sender, RequestArg e)
+ {
+ // 鏁版嵁鍒拌揪浜嬩欢鏉ヨ嚜鍚庡彴绾跨▼锛岄渶瑕佸垏鎹㈠埌 UI 绾跨▼鏄剧ず
+ DeviceManager.HandleClientMessage(e);
+ }
+
+ private static void PipeService_ClientConnected(object? sender, IClient client)
+ {
+ // 杩炴帴/鏂紑浜嬩欢鏉ヨ嚜鍚庡彴绾跨▼锛屽垪琛ㄦ洿鏂伴渶鍒囨崲鍒� UI 绾跨▼
+
+ }
+
+ private static void PipeService_ClientDisConnected(object? sender, IClient client)
+ {
+
+ }
+ }
+}
--
Gitblit v1.9.1