public void P2PGroupMemberJoinAck(ProudSession session, P2PGroup_MemberJoin_AckMessage message) { session.Logger?.Debug("P2PGroupMemberJoinAck {@Message}", message); if (session.P2PGroup == null || session.HostId == message.AddedMemberHostId) { return; } var remotePeer = session.P2PGroup?.Members[session.HostId]; if (remotePeer != null) { //using (remotePeer._sync.Lock()) { var stateA = remotePeer.ConnectionStates?.GetValueOrDefault(message.AddedMemberHostId); if (stateA?.EventId != message.EventId) { return; } stateA.IsJoined = true; var stateB = stateA.RemotePeer?.ConnectionStates?.GetValueOrDefault(session.HostId); if (stateB?.IsJoined == true) { session.Logger?.Debug("Initialize P2P with {TargetHostId}", stateA.RemotePeer.HostId); stateA.RemotePeer.Session.Logger?.Debug("Initialize P2P with {TargetHostId}", session.HostId); stateA.LastHolepunch = stateB.LastHolepunch = DateTimeOffset.Now; stateA.IsInitialized = stateB.IsInitialized = true; remotePeer.SendAsync(new P2PRecycleCompleteMessage(stateA.RemotePeer.HostId)); stateA.RemotePeer?.SendAsync(new P2PRecycleCompleteMessage(session.HostId)); } } } }
public void P2PGroupMemberJoinAck(ProudSession session, P2PGroup_MemberJoin_AckMessage message) { session.Logger?.Debug("P2PGroupMemberJoinAck {@Message}", message); if (session.P2PGroup == null || session.HostId == message.AddedMemberHostId) { return; } var remotePeer = session.P2PGroup?.Members[session.HostId]; var stateA = remotePeer?.ConnectionStates.GetValueOrDefault(message.AddedMemberHostId); if (stateA?.EventId != message.EventId) { return; } stateA.IsJoined = true; var stateB = stateA.RemotePeer.ConnectionStates.GetValueOrDefault(session.HostId); if (stateB?.IsJoined == true) { if (!session.P2PGroup.AllowDirectP2P) { return; } // Do not try p2p when the udp relay is not used by one of the clients if (!stateA.RemotePeer.Session.UdpEnabled || !stateB.RemotePeer.Session.UdpEnabled) { return; } session.Logger?.Debug("Initialize P2P with {TargetHostId}", stateA.RemotePeer.HostId); stateA.RemotePeer.Session.Logger?.Debug("Initialize P2P with {TargetHostId}", session.HostId); stateA.LastHolepunch = stateB.LastHolepunch = DateTimeOffset.Now; stateA.IsInitialized = stateB.IsInitialized = true; remotePeer.SendAsync(new P2PRecycleCompleteMessage(stateA.RemotePeer.HostId)); stateA.RemotePeer.SendAsync(new P2PRecycleCompleteMessage(session.HostId)); } }
public void P2PGroupMemberJoinAck(ProudSession session, P2PGroup_MemberJoin_AckMessage message) { if (session.P2PGroup == null || session.HostId == message.AddedMemberHostId) { return; } var remotePeer = session.P2PGroup?.Members[session.HostId]; var connectionState = remotePeer?.ConnectionStates.GetValueOrDefault(message.AddedMemberHostId); if (connectionState?.EventId != message.EventId) { return; } connectionState.IsJoined = true; var connectionStateB = connectionState.RemotePeer.ConnectionStates[session.HostId]; if (connectionStateB.IsJoined) { remotePeer.SendAsync(new P2PRecycleCompleteMessage(connectionState.RemotePeer.HostId)); connectionState.RemotePeer.SendAsync(new P2PRecycleCompleteMessage(session.HostId)); } }