aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/Web
diff options
context:
space:
mode:
authorRoy Ben Shabat <Roy.mail.net@gmail.com>2020-01-15 01:14:27 +0200
committerRoy Ben Shabat <Roy.mail.net@gmail.com>2020-01-15 01:14:27 +0200
commit6a0ff2744f0f13a2070b53e9eff20ea9379ee350 (patch)
tree324dfe2162f545c92789a8badfe7d6d9e2279d07 /Software/Visual_Studio/Web
parent0791a0ee675d6bddd54233bc9511cd6c01ce3a88 (diff)
downloadTango-6a0ff2744f0f13a2070b53e9eff20ea9379ee350.tar.gz
Tango-6a0ff2744f0f13a2070b53e9eff20ea9379ee350.zip
Working on SignalR ExternalBridge...
Diffstat (limited to 'Software/Visual_Studio/Web')
-rw-r--r--Software/Visual_Studio/Web/Tango.MachineService/Hubs/ExternalBridgeHub.cs91
1 files changed, 57 insertions, 34 deletions
diff --git a/Software/Visual_Studio/Web/Tango.MachineService/Hubs/ExternalBridgeHub.cs b/Software/Visual_Studio/Web/Tango.MachineService/Hubs/ExternalBridgeHub.cs
index 564ff4831..d5ce0d145 100644
--- a/Software/Visual_Studio/Web/Tango.MachineService/Hubs/ExternalBridgeHub.cs
+++ b/Software/Visual_Studio/Web/Tango.MachineService/Hubs/ExternalBridgeHub.cs
@@ -10,10 +10,10 @@ namespace Tango.MachineService.Hubs
{
public class ExternalBridgeHub : Hub
{
- private static List<RegisteredMachine> _machines;
+ private static List<ExternalBridgeInfo> _externalBridges;
private static List<MachineSession> _sessions;
- public class RegisteredMachine
+ public class ExternalBridgeInfo
{
public String ConnectionID { get; set; }
public MachineInfo MachineInfo { get; set; }
@@ -21,36 +21,27 @@ namespace Tango.MachineService.Hubs
public class MachineSession
{
+ public String SessionID { get; set; }
+ public String ReceiverConnectionID { get; set; }
public String ControllerConnectionID { get; set; }
- public RegisteredMachine RegisteredMachine { get; set; }
+ public ExternalBridgeInfo ExternalBridge { get; set; }
+
+ public MachineSession()
+ {
+ SessionID = Guid.NewGuid().ToString();
+ }
}
static ExternalBridgeHub()
{
- _machines = new List<RegisteredMachine>();
+ _externalBridges = new List<ExternalBridgeInfo>();
_sessions = new List<MachineSession>();
}
- public class ExternalBridgeSession
- {
- public String ClientA { get; set; }
- public String ClientB { get; set; }
- }
-
- public void Test(String msg)
- {
- this.Clients.Caller.Test(msg);
- }
-
- public int Calc(int a, int b)
- {
- return a + b;
- }
-
public void RegisterMachine(MachineInfo machineInfo)
{
- _machines.RemoveAll(x => x.MachineInfo.SerialNumber == machineInfo.SerialNumber);
- _machines.Add(new RegisteredMachine()
+ _externalBridges.RemoveAll(x => x.MachineInfo.SerialNumber == machineInfo.SerialNumber);
+ _externalBridges.Add(new ExternalBridgeInfo()
{
MachineInfo = machineInfo,
ConnectionID = Context.ConnectionId,
@@ -59,46 +50,78 @@ namespace Tango.MachineService.Hubs
public void UnregisterMachine()
{
- _machines.RemoveAll(x => x.ConnectionID == Context.ConnectionId);
+ _externalBridges.RemoveAll(x => x.ConnectionID == Context.ConnectionId);
}
public List<MachineInfo> GetAvailableMachines()
{
- return _machines.Select(x => x.MachineInfo).ToList();
+ return _externalBridges.Select(x => x.MachineInfo).ToList();
}
- public void Connect(String serialNumber)
+ public String CreateSession(String serialNumber)
{
- var registeredMachine = _machines.SingleOrDefault(x => x.MachineInfo.SerialNumber == serialNumber);
+ var externalBridge = _externalBridges.SingleOrDefault(x => x.MachineInfo.SerialNumber == serialNumber);
- if (registeredMachine != null)
+ if (externalBridge != null)
{
MachineSession session = new MachineSession();
session.ControllerConnectionID = Context.ConnectionId;
- session.RegisteredMachine = registeredMachine;
+ session.ExternalBridge = externalBridge;
_sessions.Add(session);
+ Clients.Client(externalBridge.ConnectionID).OnSessionCreated(session.SessionID);
+ return session.SessionID;
}
+
+ return null;
}
- public void Write(byte[] data)
+ //public void NotifySessionCreated()
+ //{
+ // var session = _sessions.SingleOrDefault(x => x.ReceiverConnectionID == Context.ConnectionId);
+
+ // if (session != null)
+ // {
+ // Clients.Client(session.ControllerConnectionID).SessionCreated();
+ // }
+ //}
+
+ public void JoinSession(String sessionID)
{
- var session = _sessions.SingleOrDefault(x => x.ControllerConnectionID == Context.ConnectionId || x.RegisteredMachine.ConnectionID == Context.ConnectionId);
+ var session = _sessions.SingleOrDefault(x => x.SessionID == sessionID);
+
+ if (session != null)
+ {
+ session.ReceiverConnectionID = Context.ConnectionId;
+ Clients.Client(session.ControllerConnectionID).SessionCreated();
+ }
+ }
+
+ public void Write(List<byte[]> dataCollection)
+ {
+ var session = _sessions.SingleOrDefault(x => x.ReceiverConnectionID == Context.ConnectionId || x.ControllerConnectionID == Context.ConnectionId);
if (session != null)
{
String connectionID = String.Empty;
- if (session.ControllerConnectionID == Context.ConnectionId)
+ if (session.ReceiverConnectionID == Context.ConnectionId)
{
- connectionID = session.RegisteredMachine.ConnectionID;
+ connectionID = session.ControllerConnectionID;
}
else
{
- connectionID = session.ControllerConnectionID;
+ connectionID = session.ReceiverConnectionID;
}
- Clients.Client(connectionID).DataAvailable(data);
+ Clients.Client(connectionID).DataAvailable(dataCollection);
}
}
+
+ public override Task OnDisconnected(bool stopCalled)
+ {
+ _externalBridges.RemoveAll(x => x.ConnectionID == Context.ConnectionId);
+ _sessions.RemoveAll(x => x.ControllerConnectionID == Context.ConnectionId || x.ReceiverConnectionID == Context.ConnectionId);
+ return base.OnDisconnected(stopCalled);
+ }
}
} \ No newline at end of file