public static bool TryUnpack(byte[] buf, int size, Encryptor encryptor, out PeerToPeerList packet) { int offset = 1; var connectionId = BinaryUtil.ReadInt(buf, ref offset); var revision = buf[offset++]; if (!encryptor.TryDecrypt(buf, 6, ref size)) { packet = default; return(false); } var peerSize = buf[offset++]; var peers = new PeerInfo[peerSize]; for (int i = 0; i < peers.Length; i++) { if (!PeerInfo.TryUnpack(buf, ref offset, out var info)) { packet = default; return(false); } peers[i] = info; } packet = new PeerToPeerList(connectionId, revision, peers); return(true); }
public PeerToPeerAccept(int connectionId, int nonce, PeerToPeerList list) { ConnectionId = connectionId; Nonce = nonce; Revision = list.Revision; Size = list.Size; Peers = list.Peers; }
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); }
public void OnPeerToPeerList(byte[] buf, int size) { int offset = 1; var connectionId = BinaryUtil.ReadInt(buf, ref offset); var revision = buf[offset++]; if (revision == m_P2PList.Revision) { return; } if (!m_PeerManager.TryGetValue(connectionId, out PeerEntry peer)) { return; } if (PeerToPeerList.TryUnpack(buf, size, peer.Encryptor, out var packet)) { m_P2PList = packet; UpdateList(packet.Peers, true); } }
public virtual bool TryGetPeerToPeerList(out PeerToPeerList list) { list = default; return(false); }
public HandshakeResult(Encryptor encryptor, PeerToPeerList list) { Encryptor = encryptor; List = list; }
void SendP2PList(PeerEntry peer, PeerToPeerList data) { var offset = data.Pack(m_SendBuffer, peer.Encryptor); m_Socket.Send(m_SendBuffer, 0, offset, peer.EndPoint); }
public override bool TryGetPeerToPeerList(out PeerToPeerList list) { list = m_PeerToPeerList; return(IsHost); }