Bläddra i källkod

Add a new feature to show the time when receiving data from tcp client

SenGao 4 veckor sedan
förälder
incheckning
436aae849b

+ 2 - 0
Tools/AlarmInfoServerSim/Services/IInfoSendingService.cs

@@ -1,4 +1,5 @@
 using RTCommunicatorBase;
+using TLVProtocal;
 using UniversalNetFrame451.IO;
 
 namespace AlarmInfoServerSim.Services
@@ -10,5 +11,6 @@ namespace AlarmInfoServerSim.Services
 
         event EventHandler<bool>? ConnectionStatusChanged;
         event EventHandler<TcpConnection>? TcpConnectionChanged;
+        event EventHandler<(ushort, TlvData)>? DataReceived;
     }
 }

+ 12 - 1
Tools/AlarmInfoServerSim/Services/InfoSendingService.cs

@@ -1,4 +1,5 @@
 using RTCommunicatorBase;
+using System.Text;
 using TLVProtocal;
 using UniversalNetFrame451.IO;
 
@@ -24,6 +25,7 @@ namespace AlarmInfoServerSim.Services
 
         public event EventHandler<bool>? ConnectionStatusChanged;
         public event EventHandler<TcpConnection>? TcpConnectionChanged;
+        public event EventHandler<(ushort, TlvData)>? DataReceived;
 
         public bool Open()
         {
@@ -59,7 +61,16 @@ namespace AlarmInfoServerSim.Services
 
         public void Received(TlvData data)
         {
-            throw new NotImplementedException();
+            if (data.RawData is null || data.RawData.Length == 0)
+            {
+                //Log
+                return;
+            }
+
+            if(data.Tag==1)
+            {
+                DataReceived?.Invoke(null,(data.Tag, data));
+            }
         }
 
         public TlvData RequestReply(TlvData tlvData)

+ 18 - 7
Tools/AlarmInfoServerSim/ViewModels/StatusBarViewModel.cs

@@ -12,17 +12,17 @@ namespace AlarmInfoServerSim.ViewModels
         private string _status;
 
         [ObservableProperty]
-        private string _ipAddress;
+        private string _remoteIp;
 
         [ObservableProperty]
-        private ushort _port;
+        private string _remotePort;
 
         public StatusBarViewModel(ISharedConfig sharedConfig, IInfoSendingService sendInfoService)
         {
             _sharedConfig = sharedConfig;
             _status = "Disconnected";
-            _ipAddress = "Unknown";
-            _port = _sharedConfig.BasicInfo?.RTServerPort ?? 0;
+            _remoteIp = "Unknown";
+            _remotePort = "Unknown";
 
             _sendInfoService = sendInfoService;
             _sendInfoService.ConnectionStatusChanged += OnConnectionStatusChanged;
@@ -31,15 +31,26 @@ namespace AlarmInfoServerSim.ViewModels
 
         private void OnTcpConnectionChanged(object? sender, UniversalNetFrame451.IO.TcpConnection e)
         {
-            if(Status== "Connected")
+            if (Status == "Connected")
             {
-                IpAddress=e.RemoteEndPoint.Address.ToString();
+                RemoteIp = e.RemoteEndPoint.Address.ToString();
+                RemotePort = e.RemoteEndPoint.Port.ToString();
             }
         }
 
         private void OnConnectionStatusChanged(object? sender, bool e)
         {
-            Status = e ? "Connected" : "Disconnected";
+            if(e)
+            {
+                Status = "Connected";
+            }
+            else
+            {
+                Status = "Disconnected";
+                RemoteIp = "Unknown";
+                RemotePort = "Unknown";
+            }
+            
         }
     }
 }

+ 27 - 3
Tools/AlarmInfoServerSim/ViewModels/WorkAreaViewModel.cs

@@ -6,6 +6,7 @@ using HardwareData;
 using RealtimeData;
 using RTCommunicatorBase;
 using System.Collections.Concurrent;
+using System.Collections.ObjectModel;
 using System.IO;
 
 namespace AlarmInfoServerSim.ViewModels
@@ -43,9 +44,20 @@ namespace AlarmInfoServerSim.ViewModels
         [ObservableProperty]
         private float _floor;
 
+        [ObservableProperty]
+        private ObservableCollection<string> _receivingTime;
+
+        [ObservableProperty]
+        [NotifyCanExecuteChangedFor(nameof(SendInfoCommand))]
+        private bool _hasConnection;
+
+
+
         public WorkAreaViewModel(IInfoSendingService infoSendingService)
         {
             _infoSendingService = infoSendingService;
+            _infoSendingService.ConnectionStatusChanged += OnConnectionStatusChanged;
+            _infoSendingService.DataReceived += OnDataReceived;
 
             _hardwares = new Hardwares();
             HardwareFileLoader hardwareFileLoader = new HardwareFileLoader(_hardwares);
@@ -55,10 +67,9 @@ namespace AlarmInfoServerSim.ViewModels
             _mini8Channel = [];
 
             _alarmTypes = Enum.GetValues<AlarmType>();
+            _receivingTime = [];
         }
 
-        
-
         partial void OnSelectedMini8IndexChanged(int value)
         {
             SelectedChannelIndex = -1;
@@ -72,7 +83,7 @@ namespace AlarmInfoServerSim.ViewModels
             SelectedAlarmTypeIndex = -1;
         }
 
-        [RelayCommand]
+        [RelayCommand(CanExecute = nameof(HasConnection))]
         private void SendInfo()
         {
             if (SelectedMini8Index > -1 && SelectedChannelIndex > -1 && SelectedAlarmTypeIndex > -1)
@@ -89,5 +100,18 @@ namespace AlarmInfoServerSim.ViewModels
                 });
             }
         }
+
+        private void OnConnectionStatusChanged(object? sender, bool e)
+        {
+            App.Current.Dispatcher.Invoke(() =>
+            {
+                HasConnection = e;
+            });
+        }
+
+        private void OnDataReceived(object? sender, (ushort, TLVProtocal.TlvData) e)
+        {
+            ReceivingTime.Add(e.Item2.DateTime.ToString());
+        }
     }
 }

+ 4 - 4
Tools/AlarmInfoServerSim/Views/StatusBar.xaml

@@ -19,12 +19,12 @@
             <Label Content="{Binding Status}" HorizontalAlignment="Center" VerticalAlignment="Center"></Label>
         </StackPanel>
         <StackPanel Grid.Column="1" Orientation="Horizontal">
-            <Label HorizontalAlignment="Center" VerticalAlignment="Center">IP:</Label>
-            <Label Content="{Binding IpAddress}" HorizontalAlignment="Center" VerticalAlignment="Center"></Label>
+            <Label HorizontalAlignment="Center" VerticalAlignment="Center">Remote IP:</Label>
+            <Label Content="{Binding RemoteIp}" HorizontalAlignment="Center" VerticalAlignment="Center"></Label>
         </StackPanel>
         <StackPanel Grid.Column="2" Orientation="Horizontal">
-            <Label HorizontalAlignment="Center" VerticalAlignment="Center">Port:</Label>
-            <Label Content="{Binding Port}" HorizontalAlignment="Center" VerticalAlignment="Center"></Label>
+            <Label HorizontalAlignment="Center" VerticalAlignment="Center">Remote Port:</Label>
+            <Label Content="{Binding RemotePort}" HorizontalAlignment="Center" VerticalAlignment="Center"></Label>
         </StackPanel>
 
     </Grid>

+ 7 - 3
Tools/AlarmInfoServerSim/Views/WorkArea.xaml

@@ -13,7 +13,8 @@
             <ColumnDefinition Width="300" />
             <ColumnDefinition Width="*"/>
         </Grid.ColumnDefinitions>
-        <StackPanel Grid.Column="0" Orientation="Vertical" Margin="5,10,2,10">
+        <StackPanel Grid.Column="0" Orientation="Vertical" Margin="5,10,5
+                    ,10">
             <StackPanel Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="0,10,0,0">
                 <Label>Mini8: </Label>
                 <ComboBox Width="120" SelectedIndex="{Binding SelectedMini8Index}" ItemsSource="{Binding Mini8}" DisplayMemberPath="Value.Name"/>
@@ -38,8 +39,11 @@
                 <Label>Floor:</Label>
                 <TextBox Width="80" Text="{Binding Floor}"></TextBox>
             </StackPanel>
-
+            <Button Content="Send" Command="{Binding SendInfoCommand}" Margin="20,20,20,20" Width="120" />
         </StackPanel>
-        <Button Grid.Column="1" Content="Send" Command="{Binding SendInfoCommand}" Margin="70,50,70,260"/>
+        <StackPanel Grid.Column="1" Orientation="Vertical" Margin="5,10,5,10">
+            <ListView ItemsSource="{Binding ReceivingTime}" Margin="5,20,5,0"></ListView>
+        </StackPanel>
+        
     </Grid>
 </UserControl>