1- using System . Collections . Concurrent ;
2- using System . Globalization ;
3- using System . Reactive . Subjects ;
4- using MudBlazor . Extensions ;
1+ using System . Reactive . Subjects ;
52using OpenShock . Desktop . Config ;
6- using OpenShock . Desktop . Models ;
73using OpenShock . Desktop . Models . BaseImpl ;
8- using OpenShock . Desktop . ModuleBase . Models ;
9- using OpenShock . Desktop . Services ;
104using OpenShock . MinimalEvents ;
115using OpenShock . SDK . CSharp . Hub ;
126using OpenShock . SDK . CSharp . Hub . Models ;
@@ -22,14 +16,12 @@ public sealed class BackendHubManager
2216 private readonly OpenShockHubClient _openShockHubClient ;
2317 private readonly OpenShockApi _openShockApi ;
2418
25- private string _liveConnectionId = string . Empty ;
19+ private string _currentHubConnectionId = string . Empty ;
2620
27- public IAsyncMinimalEventObservable < LogEventArgs > OnRemoteControlledShocker => _onRemoteControlledShocker ;
28- private readonly AsyncMinimalEvent < LogEventArgs > _onRemoteControlledShocker = new ( ) ;
21+ public IAsyncMinimalEventObservable < ShockerLogEventArgs > OnShockerLog => _onShockerLog ;
22+ private readonly AsyncMinimalEvent < ShockerLogEventArgs > _onShockerLog = new ( ) ;
2923
3024 public Subject < Guid ? > OnHubStatusUpdated { get ; } = new ( ) ;
31-
32-
3325
3426 public BackendHubManager ( ILogger < BackendHubManager > logger ,
3527 ConfigManager configManager ,
@@ -41,15 +33,15 @@ public BackendHubManager(ILogger<BackendHubManager> logger,
4133 _openShockApi = openShockApi ;
4234
4335 _openShockHubClient . OnWelcome . SubscribeAsync ( Welcome ) . AsTask ( ) . Wait ( ) ; ;
44- _openShockHubClient . OnLog . SubscribeAsync ( RemoteActivateShockers ) . AsTask ( ) . Wait ( ) ;
36+ _openShockHubClient . OnLog . SubscribeAsync ( OnShockerLogHandler ) . AsTask ( ) . Wait ( ) ;
4537 _openShockHubClient . OnHubUpdate . SubscribeAsync ( DeviceUpdate ) . AsTask ( ) . Wait ( ) ;
4638
4739 _openShockHubClient . OnHubStatus . SubscribeAsync ( HubStatus ) . AsTask ( ) . Wait ( ) ;
4840 }
4941
5042 private Task Welcome ( string connectionId )
5143 {
52- _liveConnectionId = connectionId ;
44+ _currentHubConnectionId = connectionId ;
5345 _openShockApi . HubStates . Clear ( ) ;
5446
5547 OnHubStatusUpdated . OnNext ( null ) ;
@@ -105,15 +97,15 @@ await _openShockHubClient.Setup(new HubClientOptions
10597 } ) ;
10698 }
10799
108- private Task RemoteActivateShockers ( LogEventArgs logEventArgs )
100+ private Task OnShockerLogHandler ( LogEventArgs logEventArgs )
109101 {
110- if ( logEventArgs . Sender . ConnectionId == _liveConnectionId )
102+ var eventArgs = new ShockerLogEventArgs
111103 {
112- _logger . LogDebug ( "Ignoring remote command log cause it was the local connection" ) ;
113- return Task . CompletedTask ;
114- }
104+ LogEventArgs = logEventArgs ,
105+ IsRemote = logEventArgs . Sender . ConnectionId != _currentHubConnectionId
106+ } ;
115107
116- return _onRemoteControlledShocker . InvokeAsyncParallel ( logEventArgs ) ;
108+ return _onShockerLog . InvokeAsyncParallel ( eventArgs ) ;
117109 }
118110
119111 /// <summary>
@@ -134,5 +126,10 @@ public Task Control(IEnumerable<Control> shocks, string? customName = null)
134126 var shocksToSend = shocks . Where ( x => enabledShockers . Contains ( x . Id ) ) ;
135127 return _openShockHubClient . Control ( shocksToSend , customName ) ;
136128 }
137-
129+ }
130+
131+ public readonly struct ShockerLogEventArgs
132+ {
133+ public required LogEventArgs LogEventArgs { get ; init ; }
134+ public required bool IsRemote { get ; init ; }
138135}
0 commit comments