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); }
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); }