diff options
| author | Roy Ben Shabat <Roy.mail.net@gmail.com> | 2020-01-15 01:14:27 +0200 |
|---|---|---|
| committer | Roy Ben Shabat <Roy.mail.net@gmail.com> | 2020-01-15 01:14:27 +0200 |
| commit | 6a0ff2744f0f13a2070b53e9eff20ea9379ee350 (patch) | |
| tree | 324dfe2162f545c92789a8badfe7d6d9e2279d07 /Software/Visual_Studio/Web | |
| parent | 0791a0ee675d6bddd54233bc9511cd6c01ce3a88 (diff) | |
| download | Tango-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.cs | 91 |
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 |
