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); }
public static P2PHostConnection StartLocalHost(LocalHostConfig config) { var impl = new P2PConnectionImpl(config); return(new P2PHostConnection(impl)); }