public void NotifyJitDirectP2PTriggered(ProudSession session, NotifyJitDirectP2PTriggeredMessage message) { session.Logger?.Debug("NotifyJitDirectP2PTriggered {@Message}", message); var group = session.P2PGroup; if (group == null) { return; } var remotePeerA = group.Members.GetValueOrDefault(session.HostId); var remotePeerB = group.Members.GetValueOrDefault(message.HostId); if (remotePeerA == null || remotePeerB == null) { return; } //using (remotePeerA._sync.Lock()) { //using (remotePeerB._sync.Lock()) { var stateA = remotePeerA.ConnectionStates?.GetValueOrDefault(remotePeerB.HostId); var stateB = remotePeerB.ConnectionStates?.GetValueOrDefault(remotePeerA.HostId); if (stateA == null || stateB == null) { return; } if (session.HostId == remotePeerA.HostId) { stateA.JitTriggered = true; } else if (session.HostId == remotePeerB.HostId) { stateB.JitTriggered = true; } if (stateA.JitTriggered || stateB.JitTriggered) { remotePeerA.SendAsync(new NewDirectP2PConnectionMessage(remotePeerB.HostId)); remotePeerB.SendAsync(new NewDirectP2PConnectionMessage(remotePeerA.HostId)); } } } }
public void NotifyJitDirectP2PTriggered(ProudSession session, NotifyJitDirectP2PTriggeredMessage message) { var group = session.P2PGroup; if (group == null) { return; } var remotePeerA = (ServerRemotePeer)group.Members.GetValueOrDefault(session.HostId); var remotePeerB = (ServerRemotePeer)group.Members.GetValueOrDefault(message.HostId); if (remotePeerA == null || remotePeerB == null) { return; } var stateA = remotePeerA.ConnectionStates.GetValueOrDefault(remotePeerB.HostId); var stateB = remotePeerB.ConnectionStates.GetValueOrDefault(remotePeerA.HostId); if (stateA == null || stateB == null) { return; } if (session.HostId == remotePeerA.HostId) { stateA.JitTriggered = true; } else if (session.HostId == remotePeerB.HostId) { stateB.JitTriggered = true; } if (stateA.JitTriggered && stateB.JitTriggered) { remotePeerA.Send(new NewDirectP2PConnectionMessage(remotePeerB.HostId)); remotePeerB.Send(new NewDirectP2PConnectionMessage(remotePeerA.HostId)); } }
public async Task <bool> OnHandle(MessageContext context, NotifyJitDirectP2PTriggeredMessage message) { var session = context.Session; session.Logger.Debug("NotifyJitDirectP2PTriggered {@Message}", message); var group = session.P2PGroup; var remotePeerA = group.GetMemberInternal(session.HostId); var remotePeerB = group.GetMemberInternal(message.HostId); if (remotePeerA == null || remotePeerB == null) { return(true); } var stateA = remotePeerA.ConnectionStates.GetValueOrDefault(remotePeerB.HostId); var stateB = remotePeerB.ConnectionStates.GetValueOrDefault(remotePeerA.HostId); if (stateA == null || stateB == null) { return(true); } if (session.HostId == remotePeerA.HostId) { stateA.JitTriggered = true; } else if (session.HostId == remotePeerB.HostId) { stateB.JitTriggered = true; } if (stateA.JitTriggered && stateB.JitTriggered) { remotePeerA.Send(new NewDirectP2PConnectionMessage(remotePeerB.HostId)); remotePeerB.Send(new NewDirectP2PConnectionMessage(remotePeerA.HostId)); } return(true); }