Example #1
0
        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);
        }