Пример #1
0
 internal P2PConnectionImpl(P2PSettings setting, UdpSocket socket) : base(socket, new EncryptorGenerator())
 {
     m_CookieProvider.Update();
     m_IsOwner = false;
     SelfId    = setting.SelfId;
     P2PTask.UpdateList(setting.Peers, true);
 }
Пример #2
0
 void OnPeerToPeerList(byte[] buf, int size)
 {
     if (IsHost || !UseP2P)
     {
         return;
     }
     P2PTask.OnPeerToPeerList(buf, size);
 }
Пример #3
0
 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);
     }
 }
Пример #4
0
 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();
         }
     }
 }
Пример #5
0
 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);
 }
Пример #6
0
        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);
            }
        }
Пример #7
0
        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);
        }
Пример #8
0
 void OnPeerToPeerAccept(byte[] buf, int size, IPEndPoint remoteEP)
 {
     Log.Debug("receive p2p accept {0}", remoteEP);
     P2PTask.HandshakeComplete(buf, size, remoteEP);
 }