internal P2PConnectionImpl(P2PSettings setting, UdpSocket socket) : base(socket, new EncryptorGenerator()) { m_CookieProvider.Update(); m_IsOwner = false; SelfId = setting.SelfId; P2PTask.UpdateList(setting.Peers, true); }
void OnPeerToPeerList(byte[] buf, int size) { if (IsHost || !UseP2P) { return; } P2PTask.OnPeerToPeerList(buf, size); }
void OnPeerToPeerRequest(byte[] buf, int size, IPEndPoint remoteEP) { if (PeerToPeerRequest.TryUnpack(m_CookieProvider, buf, size, out var packet)) { Log.Debug("receive p2p request {0}", remoteEP); P2PTask.HandshakeAccept(packet, remoteEP); } else { Log.Warning("unpack fail p2p request {0}", remoteEP); } }
protected virtual void PeerUpdate(TimeSpan delta) { m_PeerManager.Update(delta); P2PTask.Update(delta); if (!IsHost) { m_PingTimer -= delta; if (m_PingTimer < TimeSpan.Zero) { m_PingTimer = TimeSpan.FromSeconds(3); BroadcastPing(); } } }
void UpdateP2PList() { if (m_SendP2PList == null) { m_SendP2PList = SendP2PList; } if (m_PeerToPeerListDirty) { m_PeerToPeerListDirty = false; var revision = m_PeerToPeerList.Revision; revision++; var randamKey = P2PTask.GetHostRandamKey(); m_PeerToPeerList = new PeerToPeerList(SelfId, revision, m_PeerManager.CreatePeerInfoList(randamKey)); } m_PeerManager.ForEach(m_SendP2PList, m_PeerToPeerList); }
void OnPeerToPeerHello(byte[] buf, int size, IPEndPoint remoteEP) { if (!UseP2P) { return; } if (PeerToPeerHello.TryUnpack(buf, size, out var packet)) { Log.Debug("receive p2p hello {0}", remoteEP); P2PTask.OnPeerToPeerHello(packet, remoteEP); } else { Log.Warning("unpack fail p2p hello {0}", remoteEP); } }
internal P2PConnectionImpl(LocalHostConfig config) : base(new UdpSocket(), new EncryptorGenerator()) { m_IsOwner = true; m_CookieProvider.Update(); m_Socket.Bind(new IPEndPoint(config.Address, 0), false); SelfId = Random.GenInt(); P2PTask.CreateHostRandamKey(); var randamKey = P2PTask.GetHostRandamKey(); var data = new PeerToPeerRoomData(SelfId, m_CookieProvider.Cookie, randamKey).Pack(); m_DiscoveryService = new DiscoveryService(config.RoomName, m_Socket.LocalEP, data, config.DiscoveryServicePort); m_DiscoveryService.OnHolePunchRequest += (ep) => { var packet = new DiscoveryHolePunch().Pack(); m_Socket.Send(packet, 0, packet.Length, ep); }; m_DiscoveryService.Start(config.DiscoveryQueryMatch); }
void OnPeerToPeerAccept(byte[] buf, int size, IPEndPoint remoteEP) { Log.Debug("receive p2p accept {0}", remoteEP); P2PTask.HandshakeComplete(buf, size, remoteEP); }