Преглед изворни кода

The first version of AlarmInfoServerSim. Only including something basis.

SenGao пре 4 недеља
родитељ
комит
afff5a069a

+ 19 - 0
Configs/CofigOperator/BaseConfigFileLoader.cs

@@ -15,10 +15,29 @@ public class BaseConfigFileLoader
         return true;
     }
 
+    public static bool Load(string path, out BasicInfo? basicInfo)
+    {
+        if(string.IsNullOrWhiteSpace(path) || !Path.Exists(path))
+        {
+            basicInfo = null;
+            return false;
+        }
+
+        if (!XmlHelper.DeserializeXml(path, out basicInfo) || basicInfo is null)
+            return false;
+
+        return true;
+    }
+
     public static void Save(BasicInfo basicInfo)
     {
         XmlFileHelper.WriteFile(ConfigPath, basicInfo);
     }
+
+    public static void Save(string path, BasicInfo basicInfo)
+    {
+        XmlFileHelper.WriteFile(path, basicInfo);
+    }
 }
 
 public class BasicInfo

+ 7 - 1
Tools/AlarmInfoServerSim/AlarmInfoServerSim.csproj

@@ -13,8 +13,14 @@
   </PropertyGroup>
 
   <ItemGroup>
-    <PackageReference Include="CommunityToolkit.Mvvm" />
     <PackageReference Include="Prism.DryIoc" />
+    <PackageReference Include="CommunityToolkit.Mvvm" />
+  </ItemGroup>
+
+  <ItemGroup>
+    <ProjectReference Include="..\..\Communicators\RTCommunicator\RTCommunicatorBase\RTCommunicatorBase.csproj" />
+    <ProjectReference Include="..\..\Configs\CofigOperator\ConfigOperator.csproj" />
+    <ProjectReference Include="..\..\TLVProtocal\TLV_Protocol.csproj" />
   </ItemGroup>
 
 </Project>

+ 2 - 5
Tools/AlarmInfoServerSim/App.xaml

@@ -1,9 +1,6 @@
-<Application x:Class="AlarmInfoServerSim.App"
+<prism:PrismApplication x:Class="AlarmInfoServerSim.App"
              xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
              xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
              xmlns:local="clr-namespace:AlarmInfoServerSim"
              xmlns:prism="http://prismlibrary.com/">
-    <Application.Resources>
-         
-    </Application.Resources>
-</Application>
+</prism:PrismApplication>

+ 16 - 1
Tools/AlarmInfoServerSim/App.xaml.cs

@@ -1,11 +1,26 @@
-namespace AlarmInfoServerSim
+using AlarmInfoServerSim.Services;
+using AlarmInfoServerSim.Views;
+using System.Windows;
+using TLVProtocal;
+
+namespace AlarmInfoServerSim
 {
     /// <summary>
     /// Interaction logic for App.xaml
     /// </summary>
     public partial class App : PrismApplication
     {
+        protected override Window CreateShell() => Container.Resolve<MainWindow>();
+
+        protected override void RegisterTypes(IContainerRegistry containerRegistry)
+        {
+            //Services
+            containerRegistry.RegisterSingleton<ISharedConfig, SharedConfig>();
+            containerRegistry.RegisterSingleton<ISendInfoSevice, SendInfoSevice>();
 
+            //Views
+            containerRegistry.Register<StatusBar>();
+        }
     }
 
 }

+ 11 - 0
Tools/AlarmInfoServerSim/Services/ISendInfoSevice.cs

@@ -0,0 +1,11 @@
+using RTCommunicatorBase;
+
+namespace AlarmInfoServerSim.Services
+{
+    public interface ISendInfoSevice
+    {
+        bool HasConnection { get; }
+        bool Open();
+        bool Send(byte tag, ST_ALARM alarm);
+    }
+}

+ 14 - 0
Tools/AlarmInfoServerSim/Services/ISharedConfig.cs

@@ -0,0 +1,14 @@
+using ConfigOperator;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace AlarmInfoServerSim.Services
+{
+    public interface ISharedConfig
+    {
+        BasicInfo? BasicInfo { get; }
+    }
+}

+ 67 - 0
Tools/AlarmInfoServerSim/Services/SendInfoSevice.cs

@@ -0,0 +1,67 @@
+using RTCommunicatorBase;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using TLVProtocal;
+using UniversalNetFrame451.IO;
+
+namespace AlarmInfoServerSim.Services
+{
+    public class SendInfoSevice : ISendInfoSevice, ITlvProvider
+    {
+        private readonly ISharedConfig _sharedConfig;
+        private readonly ITlvCommunicatorServer _server;
+
+        private bool _isConnected = false;
+
+        public SendInfoSevice(ISharedConfig sharedConfig) 
+        {
+            _sharedConfig= sharedConfig;
+
+            _server = TlvFactory.GetTlvServer();
+            _server.Initialize(this);
+        }
+
+        public bool HasConnection => _isConnected;
+
+        public bool Open()
+        {
+            if (_sharedConfig.BasicInfo is not null)
+            {
+                return _server.Open(_sharedConfig.BasicInfo.RTServerAddress, _sharedConfig.BasicInfo.RTServerPort);
+            }
+            return false;
+        }
+
+        public bool Send(byte tag, ST_ALARM alarm)
+        {
+            if (_isConnected)
+            {
+                return _server.Send(tag, alarm);
+            }
+            return false;
+        }
+
+        public void Connected(TcpConnection connection)
+        {
+            _isConnected = true;
+        }
+
+        public void Disconnected(TcpConnection connection)
+        {
+            _isConnected = false;
+        }
+
+        public void Received(TlvData data)
+        {
+            throw new NotImplementedException();
+        }
+
+        public TlvData RequestReply(TlvData tlvData)
+        {
+            throw new NotImplementedException();
+        }
+    }
+}

+ 17 - 0
Tools/AlarmInfoServerSim/Services/SharedConfig.cs

@@ -0,0 +1,17 @@
+using ConfigOperator;
+using System.IO;
+
+namespace AlarmInfoServerSim.Services
+{
+    public class SharedConfig : ISharedConfig
+    {
+        private BasicInfo? _basicInfo;
+        public SharedConfig() 
+        {
+            string basicInfoPath = Path.Combine(new DirectoryInfo(Paths.LocalPath!)!.Parent!.Parent!.FullName, "Settings", "Base", "BasicInfo.xml");
+            BaseConfigFileLoader.Load(basicInfoPath, out _basicInfo);
+        }
+
+        public BasicInfo? BasicInfo => _basicInfo;
+    }
+}

+ 10 - 0
Tools/AlarmInfoServerSim/ViewModels/MainWindowViewModel.cs

@@ -0,0 +1,10 @@
+namespace AlarmInfoServerSim.ViewModels
+{
+    public class MainWindowViewModel
+    {
+        public MainWindowViewModel()
+        {
+
+        }
+    }
+}

+ 26 - 0
Tools/AlarmInfoServerSim/ViewModels/StatusBarViewModel.cs

@@ -0,0 +1,26 @@
+using CommunityToolkit.Mvvm.ComponentModel;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace AlarmInfoServerSim.ViewModels
+{
+    public partial class StatusBarViewModel : ObservableObject
+    {
+        [ObservableProperty]
+        private string _status = "Disconnected";
+
+        [ObservableProperty]
+        private string _ipAddress = "0.0.0.0";
+
+        [ObservableProperty]
+        private string _port = "0";
+
+        public StatusBarViewModel() 
+        {
+
+        }
+    }
+}

+ 9 - 4
Tools/AlarmInfoServerSim/MainWindow.xaml

@@ -1,14 +1,19 @@
-<Window x:Class="AlarmInfoServerSim.MainWindow"
+<Window x:Class="AlarmInfoServerSim.Views.MainWindow"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
-        xmlns:local="clr-namespace:AlarmInfoServerSim"
+        xmlns:local="clr-namespace:AlarmInfoServerSim.Views"
         xmlns:prism="http://prismlibrary.com/"
         prism:ViewModelLocator.AutoWireViewModel="True"
         mc:Ignorable="d"
-        Title="MainWindow" Height="450" Width="800">
+        Title="MainWindow" Height="450" Width="600">
     <Grid>
-
+        <Grid.RowDefinitions>
+            <RowDefinition Height="*"/>
+            <RowDefinition Height="200"/>
+        </Grid.RowDefinitions>
+        <local:StatusBar Grid.Row="0" HorizontalAlignment="Center" VerticalAlignment="Top"></local:StatusBar>
+        
     </Grid>
 </Window>

+ 3 - 2
Tools/AlarmInfoServerSim/MainWindow.xaml.cs

@@ -1,4 +1,5 @@
-using System.Text;
+using AlarmInfoServerSim.Services;
+using System.Text;
 using System.Windows;
 using System.Windows.Controls;
 using System.Windows.Data;
@@ -9,7 +10,7 @@ using System.Windows.Media.Imaging;
 using System.Windows.Navigation;
 using System.Windows.Shapes;
 
-namespace AlarmInfoServerSim
+namespace AlarmInfoServerSim.Views
 {
     /// <summary>
     /// Interaction logic for MainWindow.xaml

+ 31 - 0
Tools/AlarmInfoServerSim/Views/StatusBar.xaml

@@ -0,0 +1,31 @@
+<UserControl x:Class="AlarmInfoServerSim.Views.StatusBar"
+             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
+             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
+             xmlns:local="clr-namespace:AlarmInfoServerSim.Views"
+             xmlns:prism="http://prismlibrary.com/"
+             prism:ViewModelLocator.AutoWireViewModel="True"
+             Width="600" Height="40" 
+             mc:Ignorable="d">
+    <Grid Background="#FFCECECE">
+        <Grid.ColumnDefinitions>
+            <ColumnDefinition Width="*"/>
+            <ColumnDefinition Width="200"/>
+            <ColumnDefinition Width="*"/>
+        </Grid.ColumnDefinitions>
+        <StackPanel Grid.Column="0" Orientation="Horizontal">
+            <Label>Status:</Label>
+            <TextBox Text="{Binding Status}"></TextBox>
+        </StackPanel>
+        <StackPanel Grid.Column="1" Orientation="Horizontal">
+            <Label>IP:</Label>
+            <TextBox Text="{Binding IpAddress}"></TextBox>
+        </StackPanel>
+        <StackPanel Grid.Column="2" Orientation="Horizontal">
+            <Label>Port:</Label>
+            <TextBox Text="{Binding Port}"></TextBox>
+        </StackPanel>
+
+    </Grid>
+</UserControl>

+ 28 - 0
Tools/AlarmInfoServerSim/Views/StatusBar.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 AlarmInfoServerSim.Views
+{
+    /// <summary>
+    /// StatusBar.xaml 的交互逻辑
+    /// </summary>
+    public partial class StatusBar : UserControl
+    {
+        public StatusBar()
+        {
+            InitializeComponent();
+        }
+    }
+}