diff --git a/linesider_screen_bankend.sln b/linesider_screen_bankend.sln new file mode 100644 index 0000000..11e0538 --- /dev/null +++ b/linesider_screen_bankend.sln @@ -0,0 +1,67 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.13.35919.96 d17.13 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{02EA681E-C7D8-13C7-8484-4AC65E1B71E8}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "linesider_screen_bankend.Modules.ModuleName.Tests", "linesider_screen_bankend\Tests\linesider_screen_bankend.Modules.ModuleName.Tests\linesider_screen_bankend.Modules.ModuleName.Tests.csproj", "{35E456EA-B00D-836A-01DD-847FD5160483}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Modules", "Modules", "{C9AD4566-5B66-40D2-B6C0-7CE2C1434FFA}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "linesider_screen_bankend.Modules.ModuleName", "linesider_screen_bankend\Modules\linesider_screen_bankend.Modules.ModuleName\linesider_screen_bankend.Modules.ModuleName.csproj", "{D6FC7446-D621-6607-8B56-DBFF09E12B6D}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Services", "Services", "{FD560FA8-19E9-42DF-AFAC-D8D439F16916}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "linesider_screen_bankend.Services", "linesider_screen_bankend\Services\linesider_screen_bankend.Services\linesider_screen_bankend.Services.csproj", "{D9EC6920-FC64-BE4A-ECC0-BFD93DA3FEC1}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "linesider_screen_bankend.Services.Interfaces", "linesider_screen_bankend\Services\linesider_screen_bankend.Services.Interfaces\linesider_screen_bankend.Services.Interfaces.csproj", "{2D870641-D0E0-20A4-F37D-15DA8673ABCB}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "linesider_screen_bankend", "linesider_screen_bankend\linesider_screen_bankend\linesider_screen_bankend.csproj", "{2CA9B9D5-2DC8-260D-0931-3AA8F065172C}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "linesider_screen_bankend.Core", "linesider_screen_bankend\linesider_screen_bankend.Core\linesider_screen_bankend.Core.csproj", "{3153BFCD-9C29-CFC5-A014-A425BB1CF856}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {35E456EA-B00D-836A-01DD-847FD5160483}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {35E456EA-B00D-836A-01DD-847FD5160483}.Debug|Any CPU.Build.0 = Debug|Any CPU + {35E456EA-B00D-836A-01DD-847FD5160483}.Release|Any CPU.ActiveCfg = Release|Any CPU + {35E456EA-B00D-836A-01DD-847FD5160483}.Release|Any CPU.Build.0 = Release|Any CPU + {D6FC7446-D621-6607-8B56-DBFF09E12B6D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D6FC7446-D621-6607-8B56-DBFF09E12B6D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D6FC7446-D621-6607-8B56-DBFF09E12B6D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D6FC7446-D621-6607-8B56-DBFF09E12B6D}.Release|Any CPU.Build.0 = Release|Any CPU + {D9EC6920-FC64-BE4A-ECC0-BFD93DA3FEC1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D9EC6920-FC64-BE4A-ECC0-BFD93DA3FEC1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D9EC6920-FC64-BE4A-ECC0-BFD93DA3FEC1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D9EC6920-FC64-BE4A-ECC0-BFD93DA3FEC1}.Release|Any CPU.Build.0 = Release|Any CPU + {2D870641-D0E0-20A4-F37D-15DA8673ABCB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2D870641-D0E0-20A4-F37D-15DA8673ABCB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2D870641-D0E0-20A4-F37D-15DA8673ABCB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2D870641-D0E0-20A4-F37D-15DA8673ABCB}.Release|Any CPU.Build.0 = Release|Any CPU + {2CA9B9D5-2DC8-260D-0931-3AA8F065172C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2CA9B9D5-2DC8-260D-0931-3AA8F065172C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2CA9B9D5-2DC8-260D-0931-3AA8F065172C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2CA9B9D5-2DC8-260D-0931-3AA8F065172C}.Release|Any CPU.Build.0 = Release|Any CPU + {3153BFCD-9C29-CFC5-A014-A425BB1CF856}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3153BFCD-9C29-CFC5-A014-A425BB1CF856}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3153BFCD-9C29-CFC5-A014-A425BB1CF856}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3153BFCD-9C29-CFC5-A014-A425BB1CF856}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {35E456EA-B00D-836A-01DD-847FD5160483} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} + {D6FC7446-D621-6607-8B56-DBFF09E12B6D} = {C9AD4566-5B66-40D2-B6C0-7CE2C1434FFA} + {D9EC6920-FC64-BE4A-ECC0-BFD93DA3FEC1} = {FD560FA8-19E9-42DF-AFAC-D8D439F16916} + {2D870641-D0E0-20A4-F37D-15DA8673ABCB} = {FD560FA8-19E9-42DF-AFAC-D8D439F16916} + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {83A42B0B-1337-4726-94BF-622DD10C68BD} + EndGlobalSection +EndGlobal diff --git a/linesider_screen_bankend/Modules/linesider_screen_bankend.Modules.ModuleName/ModuleNameModule.cs b/linesider_screen_bankend/Modules/linesider_screen_bankend.Modules.ModuleName/ModuleNameModule.cs new file mode 100644 index 0000000..0a15454 --- /dev/null +++ b/linesider_screen_bankend/Modules/linesider_screen_bankend.Modules.ModuleName/ModuleNameModule.cs @@ -0,0 +1,28 @@ +using linesider_screen_bankend.Core; +using linesider_screen_bankend.Modules.ModuleName.Views; +using Prism.Ioc; +using Prism.Modularity; +using Prism.Regions; + +namespace linesider_screen_bankend.Modules.ModuleName +{ + public class ModuleNameModule : IModule + { + private readonly IRegionManager _regionManager; + + public ModuleNameModule(IRegionManager regionManager) + { + _regionManager = regionManager; + } + + public void OnInitialized(IContainerProvider containerProvider) + { + _regionManager.RequestNavigate(RegionNames.ContentRegion, "ViewA"); + } + + public void RegisterTypes(IContainerRegistry containerRegistry) + { + containerRegistry.RegisterForNavigation(); + } + } +} \ No newline at end of file diff --git a/linesider_screen_bankend/Modules/linesider_screen_bankend.Modules.ModuleName/ViewModels/ViewAViewModel.cs b/linesider_screen_bankend/Modules/linesider_screen_bankend.Modules.ModuleName/ViewModels/ViewAViewModel.cs new file mode 100644 index 0000000..3df4fc5 --- /dev/null +++ b/linesider_screen_bankend/Modules/linesider_screen_bankend.Modules.ModuleName/ViewModels/ViewAViewModel.cs @@ -0,0 +1,27 @@ +using linesider_screen_bankend.Core.Mvvm; +using linesider_screen_bankend.Services.Interfaces; +using Prism.Regions; + +namespace linesider_screen_bankend.Modules.ModuleName.ViewModels +{ + public class ViewAViewModel : RegionViewModelBase + { + private string _message; + public string Message + { + get { return _message; } + set { SetProperty(ref _message, value); } + } + + public ViewAViewModel(IRegionManager regionManager, IMessageService messageService) : + base(regionManager) + { + Message = messageService.GetMessage(); + } + + public override void OnNavigatedTo(NavigationContext navigationContext) + { + //do something + } + } +} diff --git a/linesider_screen_bankend/Modules/linesider_screen_bankend.Modules.ModuleName/Views/ViewA.xaml b/linesider_screen_bankend/Modules/linesider_screen_bankend.Modules.ModuleName/Views/ViewA.xaml new file mode 100644 index 0000000..95cf926 --- /dev/null +++ b/linesider_screen_bankend/Modules/linesider_screen_bankend.Modules.ModuleName/Views/ViewA.xaml @@ -0,0 +1,13 @@ + + + + + diff --git a/linesider_screen_bankend/Modules/linesider_screen_bankend.Modules.ModuleName/Views/ViewA.xaml.cs b/linesider_screen_bankend/Modules/linesider_screen_bankend.Modules.ModuleName/Views/ViewA.xaml.cs new file mode 100644 index 0000000..e448704 --- /dev/null +++ b/linesider_screen_bankend/Modules/linesider_screen_bankend.Modules.ModuleName/Views/ViewA.xaml.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Navigation; +using System.Windows.Shapes; + +namespace linesider_screen_bankend.Modules.ModuleName.Views +{ + /// + /// Interaction logic for ViewA.xaml + /// + public partial class ViewA : UserControl + { + public ViewA() + { + InitializeComponent(); + } + } +} diff --git a/linesider_screen_bankend/Modules/linesider_screen_bankend.Modules.ModuleName/linesider_screen_bankend.Modules.ModuleName.csproj b/linesider_screen_bankend/Modules/linesider_screen_bankend.Modules.ModuleName/linesider_screen_bankend.Modules.ModuleName.csproj new file mode 100644 index 0000000..358b59e --- /dev/null +++ b/linesider_screen_bankend/Modules/linesider_screen_bankend.Modules.ModuleName/linesider_screen_bankend.Modules.ModuleName.csproj @@ -0,0 +1,13 @@ + + + net6.0-windows + true + + + + + + + + + \ No newline at end of file diff --git a/linesider_screen_bankend/Services/linesider_screen_bankend.Services.Interfaces/IMessageService.cs b/linesider_screen_bankend/Services/linesider_screen_bankend.Services.Interfaces/IMessageService.cs new file mode 100644 index 0000000..c03a0b4 --- /dev/null +++ b/linesider_screen_bankend/Services/linesider_screen_bankend.Services.Interfaces/IMessageService.cs @@ -0,0 +1,7 @@ +namespace linesider_screen_bankend.Services.Interfaces +{ + public interface IMessageService + { + string GetMessage(); + } +} diff --git a/linesider_screen_bankend/Services/linesider_screen_bankend.Services.Interfaces/linesider_screen_bankend.Services.Interfaces.csproj b/linesider_screen_bankend/Services/linesider_screen_bankend.Services.Interfaces/linesider_screen_bankend.Services.Interfaces.csproj new file mode 100644 index 0000000..f45bdfc --- /dev/null +++ b/linesider_screen_bankend/Services/linesider_screen_bankend.Services.Interfaces/linesider_screen_bankend.Services.Interfaces.csproj @@ -0,0 +1,7 @@ + + + + netstandard2.1 + + + diff --git a/linesider_screen_bankend/Services/linesider_screen_bankend.Services/MessageService.cs b/linesider_screen_bankend/Services/linesider_screen_bankend.Services/MessageService.cs new file mode 100644 index 0000000..3f35bd1 --- /dev/null +++ b/linesider_screen_bankend/Services/linesider_screen_bankend.Services/MessageService.cs @@ -0,0 +1,12 @@ +using linesider_screen_bankend.Services.Interfaces; + +namespace linesider_screen_bankend.Services +{ + public class MessageService : IMessageService + { + public string GetMessage() + { + return "Hello from the Message Service"; + } + } +} diff --git a/linesider_screen_bankend/Services/linesider_screen_bankend.Services/linesider_screen_bankend.Services.csproj b/linesider_screen_bankend/Services/linesider_screen_bankend.Services/linesider_screen_bankend.Services.csproj new file mode 100644 index 0000000..6a557b9 --- /dev/null +++ b/linesider_screen_bankend/Services/linesider_screen_bankend.Services/linesider_screen_bankend.Services.csproj @@ -0,0 +1,11 @@ + + + + netstandard2.1 + + + + + + + diff --git a/linesider_screen_bankend/Tests/linesider_screen_bankend.Modules.ModuleName.Tests/ViewModels/ViewAViewModelFixture.cs b/linesider_screen_bankend/Tests/linesider_screen_bankend.Modules.ModuleName.Tests/ViewModels/ViewAViewModelFixture.cs new file mode 100644 index 0000000..02e24a3 --- /dev/null +++ b/linesider_screen_bankend/Tests/linesider_screen_bankend.Modules.ModuleName.Tests/ViewModels/ViewAViewModelFixture.cs @@ -0,0 +1,41 @@ +using linesider_screen_bankend.Modules.ModuleName.ViewModels; +using linesider_screen_bankend.Services.Interfaces; +using Moq; +using Prism.Regions; +using Xunit; + +namespace linesider_screen_bankend.Modules.ModuleName.Tests.ViewModels +{ + public class ViewAViewModelFixture + { + Mock _messageServiceMock; + Mock _regionManagerMock; + const string MessageServiceDefaultMessage = "Some Value"; + + public ViewAViewModelFixture() + { + var messageService = new Mock(); + messageService.Setup(x => x.GetMessage()).Returns(MessageServiceDefaultMessage); + _messageServiceMock = messageService; + + _regionManagerMock = new Mock(); + } + + [Fact] + public void MessagePropertyValueUpdated() + { + var vm = new ViewAViewModel(_regionManagerMock.Object, _messageServiceMock.Object); + + _messageServiceMock.Verify(x => x.GetMessage(), Times.Once); + + Assert.Equal(MessageServiceDefaultMessage, vm.Message); + } + + [Fact] + public void MessageINotifyPropertyChangedCalled() + { + var vm = new ViewAViewModel(_regionManagerMock.Object, _messageServiceMock.Object); + Assert.PropertyChanged(vm, nameof(vm.Message), () => vm.Message = "Changed"); + } + } +} diff --git a/linesider_screen_bankend/Tests/linesider_screen_bankend.Modules.ModuleName.Tests/linesider_screen_bankend.Modules.ModuleName.Tests.csproj b/linesider_screen_bankend/Tests/linesider_screen_bankend.Modules.ModuleName.Tests/linesider_screen_bankend.Modules.ModuleName.Tests.csproj new file mode 100644 index 0000000..3d4bded --- /dev/null +++ b/linesider_screen_bankend/Tests/linesider_screen_bankend.Modules.ModuleName.Tests/linesider_screen_bankend.Modules.ModuleName.Tests.csproj @@ -0,0 +1,27 @@ + + + + net6.0-windows + + false + + + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + + diff --git a/linesider_screen_bankend/linesider_screen_bankend.Core/Mvvm/RegionViewModelBase.cs b/linesider_screen_bankend/linesider_screen_bankend.Core/Mvvm/RegionViewModelBase.cs new file mode 100644 index 0000000..668adbc --- /dev/null +++ b/linesider_screen_bankend/linesider_screen_bankend.Core/Mvvm/RegionViewModelBase.cs @@ -0,0 +1,35 @@ +using System; +using Prism.Regions; + +namespace linesider_screen_bankend.Core.Mvvm +{ + public class RegionViewModelBase : ViewModelBase, INavigationAware, IConfirmNavigationRequest + { + protected IRegionManager RegionManager { get; private set; } + + public RegionViewModelBase(IRegionManager regionManager) + { + RegionManager = regionManager; + } + + public virtual void ConfirmNavigationRequest(NavigationContext navigationContext, Action continuationCallback) + { + continuationCallback(true); + } + + public virtual bool IsNavigationTarget(NavigationContext navigationContext) + { + return true; + } + + public virtual void OnNavigatedFrom(NavigationContext navigationContext) + { + + } + + public virtual void OnNavigatedTo(NavigationContext navigationContext) + { + + } + } +} diff --git a/linesider_screen_bankend/linesider_screen_bankend.Core/Mvvm/ViewModelBase.cs b/linesider_screen_bankend/linesider_screen_bankend.Core/Mvvm/ViewModelBase.cs new file mode 100644 index 0000000..1b0f461 --- /dev/null +++ b/linesider_screen_bankend/linesider_screen_bankend.Core/Mvvm/ViewModelBase.cs @@ -0,0 +1,18 @@ +using Prism.Mvvm; +using Prism.Navigation; + +namespace linesider_screen_bankend.Core.Mvvm +{ + public abstract class ViewModelBase : BindableBase, IDestructible + { + protected ViewModelBase() + { + + } + + public virtual void Destroy() + { + + } + } +} diff --git a/linesider_screen_bankend/linesider_screen_bankend.Core/RegionNames.cs b/linesider_screen_bankend/linesider_screen_bankend.Core/RegionNames.cs new file mode 100644 index 0000000..3f686b1 --- /dev/null +++ b/linesider_screen_bankend/linesider_screen_bankend.Core/RegionNames.cs @@ -0,0 +1,7 @@ +namespace linesider_screen_bankend.Core +{ + public static class RegionNames + { + public const string ContentRegion = "ContentRegion"; + } +} diff --git a/linesider_screen_bankend/linesider_screen_bankend.Core/Tools/BartenderPrintingTool.cs b/linesider_screen_bankend/linesider_screen_bankend.Core/Tools/BartenderPrintingTool.cs new file mode 100644 index 0000000..d1022ad --- /dev/null +++ b/linesider_screen_bankend/linesider_screen_bankend.Core/Tools/BartenderPrintingTool.cs @@ -0,0 +1,119 @@ +using System; +using BarTender; + +namespace linesider_screen_bankend.Core.Tools +{ + public class BartenderPrintHelper : IDisposable + { + private Application _btApp; + private Format _btFormat; + private bool _disposed = false; + + /// + /// 初始化 Bartender 应用程序 + /// + public BartenderPrintHelper() + { + try + { + _btApp = new Application(); + } + catch (Exception ex) + { + throw new Exception("无法初始化 Bartender 应用程序。请确保 BarTender 已安装。", ex); + } + } + + /// + /// 打印标签 + /// + /// 标签模板路径 + /// 标签变量键值对 + /// 打印份数 + /// 序列化标签数量 + /// 是否打印成功 + public bool PrintLabel(string templatePath, System.Collections.Generic.Dictionary subStringValues, int copies = 1, int serializedLabels = 1) + { + if (_disposed) + throw new ObjectDisposedException("BartenderPrintHelper", "对象已被释放,不能执行打印操作。"); + + try + { + // 打开标签模板 + _btFormat = _btApp.Formats.Open(templatePath); + + // 设置打印参数 + _btFormat.PrintSetup.IdenticalCopiesOfLabel = copies; + _btFormat.PrintSetup.NumberSerializedLabels = serializedLabels; + + // 设置标签变量值 + if (subStringValues != null) + { + foreach (var item in subStringValues) + { + _btFormat.SetNamedSubStringValue(item.Key, item.Value); + } + } + + // 执行打印 + _btFormat.PrintOut(false, false); + return true; + } + catch (Exception ex) + { + throw new Exception($"打印标签时出错: {ex.Message}", ex); + } + finally + { + if (_btFormat != null) + { + _btFormat.Close(BtSaveOptions.btDoNotSaveChanges); + System.Runtime.InteropServices.Marshal.ReleaseComObject(_btFormat); + _btFormat = null; + } + } + } + + /// + /// 释放资源 + /// + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + protected virtual void Dispose(bool disposing) + { + if (!_disposed) + { + if (disposing) + { + // 清理托管资源 + } + + // 清理非托管资源 + if (_btFormat != null) + { + _btFormat.Close(BtSaveOptions.btDoNotSaveChanges); + System.Runtime.InteropServices.Marshal.ReleaseComObject(_btFormat); + _btFormat = null; + } + + if (_btApp != null) + { + _btApp.Quit(BtSaveOptions.btDoNotSaveChanges); + System.Runtime.InteropServices.Marshal.ReleaseComObject(_btApp); + _btApp = null; + } + + _disposed = true; + } + } + + ~BartenderPrintHelper() + { + Dispose(false); + } + } +} diff --git a/linesider_screen_bankend/linesider_screen_bankend.Core/linesider_screen_bankend.Core.csproj b/linesider_screen_bankend/linesider_screen_bankend.Core/linesider_screen_bankend.Core.csproj new file mode 100644 index 0000000..9aa585b --- /dev/null +++ b/linesider_screen_bankend/linesider_screen_bankend.Core/linesider_screen_bankend.Core.csproj @@ -0,0 +1,20 @@ + + + net6.0-windows + true + + + + tlbimp + 0 + 11 + d58562c1-e51b-11cf-8941-00a024a9083f + 0 + false + true + + + + + + \ No newline at end of file diff --git a/linesider_screen_bankend/linesider_screen_bankend/App.xaml b/linesider_screen_bankend/linesider_screen_bankend/App.xaml new file mode 100644 index 0000000..07c0c30 --- /dev/null +++ b/linesider_screen_bankend/linesider_screen_bankend/App.xaml @@ -0,0 +1,9 @@ + + + + + diff --git a/linesider_screen_bankend/linesider_screen_bankend/App.xaml.cs b/linesider_screen_bankend/linesider_screen_bankend/App.xaml.cs new file mode 100644 index 0000000..134bda6 --- /dev/null +++ b/linesider_screen_bankend/linesider_screen_bankend/App.xaml.cs @@ -0,0 +1,93 @@ +using System; +using System.Threading; +using System.Windows; +using EmbedIO; +using EmbedIO.WebApi; +using linesider_screen_bankend.Modules.ModuleName; +using linesider_screen_bankend.Services; +using linesider_screen_bankend.Services.Interfaces; +using linesider_screen_bankend.Views; +using Prism.Ioc; +using Prism.Modularity; +using linesider_screen_bankend.Controller; + +namespace linesider_screen_bankend +{ + /// + /// Interaction logic for App.xaml + /// + public partial class App + { + protected override Window CreateShell() + { + return Container.Resolve(); + } + + protected override void RegisterTypes(IContainerRegistry containerRegistry) + { + containerRegistry.RegisterSingleton(); + } + + protected override void ConfigureModuleCatalog(IModuleCatalog moduleCatalog) + { + moduleCatalog.AddModule(); + } + + private CancellationTokenSource _cts; + + protected override void OnStartup(StartupEventArgs e) + { + base.OnStartup(e); + + // 启动Web服务器 + //StartWebServer(); + } + + //private void StartWebServer() + //{ + // _cts = new CancellationTokenSource(); + + // var url = "http://localhost:9696/"; + + // // 在新线程中运行服务器,避免阻塞UI线程 + // var serverThread = new Thread(() => + // { + // try + // { + // using (var server = CreateWebServer(url)) + // { + // server.RunAsync(_cts.Token).Wait(); + // } + // } + // catch (Exception ex) + // { + // // 处理异常 + // MessageBox.Show($"Web服务器错误: {ex.Message}"); + // } + // }) + // { + // IsBackground = true + // }; + + // serverThread.Start(); + //} + + //private WebServer CreateWebServer(string url) + //{ + // var server = new WebServer(o => o + // .WithUrlPrefix(url) + // .WithMode(HttpListenerMode.EmbedIO)) + // .WithWebApi("/api", m => m + // .WithController()); + + // return server; + //} + + //protected override void OnExit(ExitEventArgs e) + //{ + // // 应用程序退出时停止服务器 + // _cts?.Cancel(); + // base.OnExit(e); + //} + } +} diff --git a/linesider_screen_bankend/linesider_screen_bankend/Controller/MyApiController.cs b/linesider_screen_bankend/linesider_screen_bankend/Controller/MyApiController.cs new file mode 100644 index 0000000..520c26b --- /dev/null +++ b/linesider_screen_bankend/linesider_screen_bankend/Controller/MyApiController.cs @@ -0,0 +1,55 @@ +using EmbedIO.Routing; +using EmbedIO.WebApi; +using EmbedIO; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace linesider_screen_bankend.Controller +{ + public class MyApiController : WebApiController + { + private readonly Action _logAction; + + public MyApiController(Action logAction) + { + _logAction = logAction; + } + + [Route(HttpVerbs.Get, "/hello")] + public string GetHello() + { + _logAction?.Invoke($"GET /api/hello from {HttpContext.RemoteEndPoint}"); + return "Hello from WPF!"; + } + + [Route(HttpVerbs.Post, "/data")] + public async Task PostData() + { + try + { + var data = await HttpContext.GetRequestDataAsync(); + _logAction?.Invoke($"POST /api/data from {HttpContext.RemoteEndPoint}: {data}"); + return $"Received: Name={data.Name}, Value={data.Value}"; + } + catch (Exception ex) + { + _logAction?.Invoke($"Error in POST /api/data: {ex.Message}"); + throw; + } + } + } + + public class MyDataModel + { + public string Name { get; set; } + public int Value { get; set; } + + public override string ToString() + { + return $"Name: {Name}, Value: {Value}"; + } + } +} diff --git a/linesider_screen_bankend/linesider_screen_bankend/Controller/PrintCommunicationController.cs b/linesider_screen_bankend/linesider_screen_bankend/Controller/PrintCommunicationController.cs new file mode 100644 index 0000000..5a14ab7 --- /dev/null +++ b/linesider_screen_bankend/linesider_screen_bankend/Controller/PrintCommunicationController.cs @@ -0,0 +1,31 @@ +using EmbedIO.Routing; +using EmbedIO.WebApi; +using EmbedIO; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace linesider_screen_bankend.Controller +{ + public class PrintCommunicationController: WebApiController + { + private readonly Action _logAction; + + public PrintCommunicationController(Action logAction) + { + _logAction = logAction; + } + + + + [Route(HttpVerbs.Get, "/hello")] + public string GetHello() + { + _logAction?.Invoke($"GET /api/hello from {HttpContext.RemoteEndPoint}"); + return "Hello from WPF!"; + } + + } +} diff --git a/linesider_screen_bankend/linesider_screen_bankend/ViewModels/MainWindowViewModel.cs b/linesider_screen_bankend/linesider_screen_bankend/ViewModels/MainWindowViewModel.cs new file mode 100644 index 0000000..1d87baf --- /dev/null +++ b/linesider_screen_bankend/linesider_screen_bankend/ViewModels/MainWindowViewModel.cs @@ -0,0 +1,19 @@ +using Prism.Mvvm; + +namespace linesider_screen_bankend.ViewModels +{ + public class MainWindowViewModel : BindableBase + { + private string _title = "Prism Application"; + public string Title + { + get { return _title; } + set { SetProperty(ref _title, value); } + } + + public MainWindowViewModel() + { + + } + } +} diff --git a/linesider_screen_bankend/linesider_screen_bankend/Views/MainWindow.xaml b/linesider_screen_bankend/linesider_screen_bankend/Views/MainWindow.xaml new file mode 100644 index 0000000..178ca3a --- /dev/null +++ b/linesider_screen_bankend/linesider_screen_bankend/Views/MainWindow.xaml @@ -0,0 +1,30 @@ + + + + + + + + + + + +