diff options
| author | Roy Ben Shabat <Roy.mail.net@gmail.com> | 2020-01-15 21:13:45 +0200 |
|---|---|---|
| committer | Roy Ben Shabat <Roy.mail.net@gmail.com> | 2020-01-15 21:13:45 +0200 |
| commit | 8d1933f305e8fb4aa4cc7633fa02c419d77766ff (patch) | |
| tree | 780c92eda81022afe1dca6838416ab44480776bf /Software/Visual_Studio/Tango.Integration | |
| parent | 7b5a8bd0e4dbe8f1955a06c720380760ccb67ebd (diff) | |
| download | Tango-8d1933f305e8fb4aa4cc7633fa02c419d77766ff.tar.gz Tango-8d1933f305e8fb4aa4cc7633fa02c419d77766ff.zip | |
External bridge improvements.
Diffstat (limited to 'Software/Visual_Studio/Tango.Integration')
6 files changed, 74 insertions, 34 deletions
diff --git a/Software/Visual_Studio/Tango.Integration/ExternalBridge/ExternalBridgeReceiver.cs b/Software/Visual_Studio/Tango.Integration/ExternalBridge/ExternalBridgeReceiver.cs index 366f1bbdb..4796072f3 100644 --- a/Software/Visual_Studio/Tango.Integration/ExternalBridge/ExternalBridgeReceiver.cs +++ b/Software/Visual_Studio/Tango.Integration/ExternalBridge/ExternalBridgeReceiver.cs @@ -202,7 +202,7 @@ namespace Tango.Integration.ExternalBridge { if (IsLoggedIn) { - await SendRequest<ExternalBridgeLogoutRequest, ExternalBridgeLogoutResponse>(new ExternalBridgeLogoutRequest(), TimeSpan.FromSeconds(0.5)); + await SendRequest<ExternalBridgeLogoutRequest, ExternalBridgeLogoutResponse>(new ExternalBridgeLogoutRequest(), TimeSpan.FromSeconds(3)); } } catch (Exception ex) diff --git a/Software/Visual_Studio/Tango.Integration/ExternalBridge/ExternalBridgeScanner.cs b/Software/Visual_Studio/Tango.Integration/ExternalBridge/ExternalBridgeScanner.cs index 97f15f6b4..ff045a9e5 100644 --- a/Software/Visual_Studio/Tango.Integration/ExternalBridge/ExternalBridgeScanner.cs +++ b/Software/Visual_Studio/Tango.Integration/ExternalBridge/ExternalBridgeScanner.cs @@ -111,11 +111,24 @@ namespace Tango.Integration.ExternalBridge { _connection = new HubConnection(SignalRConfiguration.Address); _proxy = _connection.CreateHubProxy(SignalRConfiguration.Hub); - _connection.Start(); - _signalRDiscoveryThread = new Thread(SignalRDiscoveryThreadMethod); - _signalRDiscoveryThread.IsBackground = true; - _signalRDiscoveryThread.Start(); + bool signalRStarted = false; + + _connection.StateChanged += (x) => + { + if (x.NewState == ConnectionState.Connected) + { + if (!signalRStarted) + { + signalRStarted = true; + _signalRDiscoveryThread = new Thread(SignalRDiscoveryThreadMethod); + _signalRDiscoveryThread.IsBackground = true; + _signalRDiscoveryThread.Start(); + } + } + }; + + _connection.Start(); } catch (Exception ex) { diff --git a/Software/Visual_Studio/Tango.Integration/ExternalBridge/ExternalBridgeService.cs b/Software/Visual_Studio/Tango.Integration/ExternalBridge/ExternalBridgeService.cs index b4d2e4df4..fb56194e8 100644 --- a/Software/Visual_Studio/Tango.Integration/ExternalBridge/ExternalBridgeService.cs +++ b/Software/Visual_Studio/Tango.Integration/ExternalBridge/ExternalBridgeService.cs @@ -48,7 +48,7 @@ namespace Tango.Integration.ExternalBridge /// <summary> /// Occurs when the last client has been disconnected. /// </summary> - public event EventHandler ClientDisconnected; + public event EventHandler FullControlSessionDisconnected; /// <summary> /// Occurs when the service has received a new color profile request. @@ -113,20 +113,26 @@ namespace Tango.Integration.ExternalBridge } } - private bool _isInSession; + private bool _hasSessions; /// <summary> - /// Gets a value indicating whether a remote client is authenticated and in session. + /// Gets a value indicating whether there are any connected sessions. /// </summary> - public bool IsInSession + public bool HasSessions { - get { return _isInSession; } - private set { _isInSession = value; RaisePropertyChangedAuto(); } + get { return _hasSessions; } + private set { _hasSessions = value; RaisePropertyChangedAuto(); } } + private ExternalBridgeReceiver _fullControlSessionReceiver; /// <summary> - /// Gets the current session login intent. + /// Gets the current full control session receiver. /// </summary> - public ExternalBridgeLoginIntent SessionIntent { get; private set; } + public ExternalBridgeReceiver FullControlSessionReceiver + { + get { return _fullControlSessionReceiver; } + private set { _fullControlSessionReceiver = value; RaisePropertyChangedAuto(); } + } + #endregion @@ -290,8 +296,12 @@ namespace Tango.Integration.ExternalBridge if (receiver.LoginIntent == ExternalBridgeLoginIntent.FullControl) { - ClientDisconnected?.Invoke(this, new EventArgs()); + FullControlSessionDisconnected?.Invoke(this, new EventArgs()); } + + HasSessions = _receivers.Count(x => x.IsLoggedIn) > 0; + + FullControlSessionReceiver = _receivers.SingleOrDefault(x => x.IsLoggedIn && x.LoginIntent == ExternalBridgeLoginIntent.FullControl); } private void Receiver_ColorProfileRequest(object sender, ColorProfileRequestEventArgs e) @@ -328,6 +338,12 @@ namespace Tango.Integration.ExternalBridge if (args.Confirmed) { e.Confirm(Machine, MachineOperator.DeviceInformation); + HasSessions = true; + + if (request.Intent == ExternalBridgeLoginIntent.FullControl) + { + FullControlSessionReceiver = sender as ExternalBridgeReceiver; + } } else { @@ -397,7 +413,7 @@ namespace Tango.Integration.ExternalBridge } IsStarted = false; - IsInSession = false; + HasSessions = false; _enabled = false; RaisePropertyChanged(nameof(Enabled)); } @@ -406,7 +422,7 @@ namespace Tango.Integration.ExternalBridge /// <summary> /// Disconnects the current remote client session. /// </summary> - public async void DisconnectSession() + public async void DisconnectFullControlSession() { var sessionReceiver = _receivers.SingleOrDefault(x => x.IsLoggedIn && x.LoginIntent == ExternalBridgeLoginIntent.FullControl); if (sessionReceiver != null) diff --git a/Software/Visual_Studio/Tango.Integration/ExternalBridge/ExternalBridgeSignalRClient.cs b/Software/Visual_Studio/Tango.Integration/ExternalBridge/ExternalBridgeSignalRClient.cs index 3a26e6a25..d541f323a 100644 --- a/Software/Visual_Studio/Tango.Integration/ExternalBridge/ExternalBridgeSignalRClient.cs +++ b/Software/Visual_Studio/Tango.Integration/ExternalBridge/ExternalBridgeSignalRClient.cs @@ -19,8 +19,12 @@ namespace Tango.Integration.ExternalBridge public ExternalBridgeSignalRClient(String url, String hub, String serialNumber) { SerialNumber = serialNumber; + IPAddress = hub; Machine = ObservablesStaticCollections.Instance.Machines.SingleOrDefault(x => x.SerialNumber == serialNumber); Adapter = new SignalRTransportAdapter(url, hub, SignalRTransportAdapter.SignalRTransportAdapterMode.CreateSession, serialNumber); + + KeepAliveTimeout = TimeSpan.FromSeconds(5); + KeepAliveRetries = 2; } public override async Task Connect(ExternalBridgeLoginRequest login) @@ -34,7 +38,7 @@ namespace Tango.Integration.ExternalBridge State = TransportComponentState.Connected; StartThreads(); - LogManager.Log("External Bridge TCP Client Connected..."); + LogManager.Log("External Bridge SignalR Client Connected..."); LogRequestSent(login); diff --git a/Software/Visual_Studio/Tango.Integration/ExternalBridge/ExternalBridgeTcpClient.cs b/Software/Visual_Studio/Tango.Integration/ExternalBridge/ExternalBridgeTcpClient.cs index 064b673bc..f050708d7 100644 --- a/Software/Visual_Studio/Tango.Integration/ExternalBridge/ExternalBridgeTcpClient.cs +++ b/Software/Visual_Studio/Tango.Integration/ExternalBridge/ExternalBridgeTcpClient.cs @@ -245,7 +245,7 @@ namespace Tango.Integration.ExternalBridge { await Adapter.Disconnect(); } - LogManager.Log("External Bridge TCP client disconnected."); + LogManager.Log($"{ComponentName} disconnected."); } internal ExternalBridgeTcpClient() @@ -291,7 +291,14 @@ namespace Tango.Integration.ExternalBridge if (request.Type == MessageType.ExternalBridgeLogoutRequest) { - await SendResponse<ExternalBridgeLogoutResponse>(new ExternalBridgeLogoutResponse(), request.Token); + try + { + await SendResponse<ExternalBridgeLogoutResponse>(new ExternalBridgeLogoutResponse(), request.Token); + } + catch { } + + await Task.Delay(2000); + try { State = TransportComponentState.Disconnected; diff --git a/Software/Visual_Studio/Tango.Integration/ExternalBridge/IExternalBridgeService.cs b/Software/Visual_Studio/Tango.Integration/ExternalBridge/IExternalBridgeService.cs index 39b2f4e07..d2b5ef750 100644 --- a/Software/Visual_Studio/Tango.Integration/ExternalBridge/IExternalBridgeService.cs +++ b/Software/Visual_Studio/Tango.Integration/ExternalBridge/IExternalBridgeService.cs @@ -19,9 +19,9 @@ namespace Tango.Integration.ExternalBridge event EventHandler<ExternalBridgeClientConnectedEventArgs> ConnectionRequest; /// <summary> - /// Occurs when the last client has been disconnected. + /// Occurs when the current full control session has disconnected. /// </summary> - event EventHandler ClientDisconnected; + event EventHandler FullControlSessionDisconnected; /// <summary> /// Occurs when the service has received a new color profile request. @@ -39,6 +39,16 @@ namespace Tango.Integration.ExternalBridge Machine Machine { get; set; } /// <summary> + /// Gets or sets the SignalR configuration. + /// </summary> + ExternalBridgeSignalRConfiguration SignalRConfiguration { get; set; } + + /// <summary> + /// Gets the current full control session receiver. + /// </summary> + ExternalBridgeReceiver FullControlSessionReceiver { get; } + + /// <summary> /// Gets a value indicating whether this instance is started. /// </summary> bool IsStarted { get; } @@ -49,9 +59,9 @@ namespace Tango.Integration.ExternalBridge bool Enabled { get; set; } /// <summary> - /// Gets a value indicating whether a remote client is authenticated and in session. + /// Gets a value indicating whether there are any connected sessions. /// </summary> - bool IsInSession { get; } + bool HasSessions { get; } /// <summary> /// Starts this instance. @@ -66,16 +76,6 @@ namespace Tango.Integration.ExternalBridge /// <summary> /// Disconnects the current remote client session. /// </summary> - void DisconnectSession(); - - /// <summary> - /// Gets the current session login intent. - /// </summary> - ExternalBridgeLoginIntent SessionIntent { get; } - - /// <summary> - /// Gets or sets the SignalR configuration. - /// </summary> - ExternalBridgeSignalRConfiguration SignalRConfiguration { get; set; } + void DisconnectFullControlSession(); } } |
