aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/Tango.Integration
diff options
context:
space:
mode:
authorRoy Ben Shabat <Roy.mail.net@gmail.com>2020-01-15 21:13:45 +0200
committerRoy Ben Shabat <Roy.mail.net@gmail.com>2020-01-15 21:13:45 +0200
commit8d1933f305e8fb4aa4cc7633fa02c419d77766ff (patch)
tree780c92eda81022afe1dca6838416ab44480776bf /Software/Visual_Studio/Tango.Integration
parent7b5a8bd0e4dbe8f1955a06c720380760ccb67ebd (diff)
downloadTango-8d1933f305e8fb4aa4cc7633fa02c419d77766ff.tar.gz
Tango-8d1933f305e8fb4aa4cc7633fa02c419d77766ff.zip
External bridge improvements.
Diffstat (limited to 'Software/Visual_Studio/Tango.Integration')
-rw-r--r--Software/Visual_Studio/Tango.Integration/ExternalBridge/ExternalBridgeReceiver.cs2
-rw-r--r--Software/Visual_Studio/Tango.Integration/ExternalBridge/ExternalBridgeScanner.cs21
-rw-r--r--Software/Visual_Studio/Tango.Integration/ExternalBridge/ExternalBridgeService.cs38
-rw-r--r--Software/Visual_Studio/Tango.Integration/ExternalBridge/ExternalBridgeSignalRClient.cs6
-rw-r--r--Software/Visual_Studio/Tango.Integration/ExternalBridge/ExternalBridgeTcpClient.cs11
-rw-r--r--Software/Visual_Studio/Tango.Integration/ExternalBridge/IExternalBridgeService.cs30
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();
}
}