Пример #1
0
 public bool Send(int connectionId, byte[] buf, int offset, int size, bool encrypt = true)
 {
     if (m_PeerManager.TryGetValue(connectionId, out PeerEntry peer))
     {
         SendImpl(peer, buf, offset, size, encrypt);
         return(true);
     }
     return(false);
 }
Пример #2
0
 public void HandshakeAccept(PeerToPeerRequest packet, IPEndPoint remoteEP)
 {
     if (!m_PeerManager.TryGetValue(packet.ConnectionId, out var peer))
     {
         int nonce     = Random.GenInt();
         var randamKey = m_RandamKey ?? GetPeerRandamKey(packet.ConnectionId);
         var key       = new EncryptorKey(packet, randamKey, nonce);
         var encryptor = m_EncryptorGenerator.Generate(in key);
         peer = new PeerEntry(packet.ConnectionId, nonce, encryptor, remoteEP);
         m_PeerManager.Add(peer);
         m_Connection.SendPeerToPeerList();
     }
     if (m_Connection.TryGetPeerToPeerList(out var list))
     {
         var size = new PeerToPeerAccept(m_Connection.SelfId, peer.ClientConnectionId, list).Pack(m_Connection.m_SendBuffer, peer.Encryptor);
         m_Connection.m_Socket.Send(m_Connection.m_SendBuffer, 0, size, remoteEP);
     }
     else
     {
         var size = new PeerToPeerAccept(m_Connection.SelfId, peer.ClientConnectionId).Pack(m_Connection.m_SendBuffer, peer.Encryptor);
         m_Connection.m_Socket.Send(m_Connection.m_SendBuffer, 0, size, remoteEP);
     }
     RemoveTask(packet.ConnectionId);
 }