private void getAddrMsgHandle(P2PState state) { var peers = this.p2pComponent.GetNodes(); var peer = peers.Where(p => p.IP == state.IP && p.Port == state.Port).FirstOrDefault(); if (peer != null && peer.IsConnected) { var data = new GetAddrMsg(); int index = 0; data.Deserialize(state.Command.Payload, ref index); if (data.Count <= 0 || data.Count > 100) { data.Count = 100; } var list = peers.Where(p => p.IP != state.IP || p.Port != state.Port).OrderByDescending(p => p.LastHeartbeat).Take(data.Count).ToList(); var payload = new AddrMsg(); foreach (var item in list) { payload.AddressList.Add(new AddrMsg.AddressInfo() { Ip = item.IP, Port = item.Port, Identity = item.Identity }); } var addrCommand = P2PCommand.CreateCommand(this.Identity.ToString(), CommandNames.P2P.Addr, payload); this.p2pComponent.SendCommand(state.IP, state.Port, addrCommand); } }
private void getAddrMsgHandle(P2PState state) { var peer = this.Peers.Where(p => p.IP == state.IP && p.Port == state.Port).FirstOrDefault(); if (peer != null && peer.IsConnected) { var data = new GetAddrMsg(); int index = 0; data.Deserialize(state.Command.Payload, ref index); if (data.Count <= 0 || data.Count > 100) { data.Count = 100; } var list = this.Peers.Where(p => p.IP != state.IP || p.Port != state.Port).OrderByDescending(p => p.LastHeartbeat).Take(data.Count).ToList(); var payload = new AddrMsg(); foreach (var item in list) { payload.AddressList.Add(new KeyValuePair <string, int>(item.IP, item.Port)); } var addrCommand = P2PCommand.CreateCommand(CommandNames.P2P.Addr, payload); this.Send(addrCommand, state.IP, state.Port); } }
private void addrMsgHandle(P2PState state) { var peer = this.Peers.Where(p => p.IP == state.IP && p.Port == state.Port).FirstOrDefault(); if (peer != null && peer.IsConnected) { var payload = new AddrMsg(); int index = 0; payload.Deserialize(state.Command.Payload, ref index); foreach (var item in payload.AddressList) { if (this.Peers.Where(p => !p.IsTrackerServer && p.IP == item.Key && p.Port == item.Value && p.IsConnected).Count() == 0) { this.ConnectToNewPeer(item.Key, item.Value); } } } }
private void addrMsgHandle(P2PState state) { var peers = this.p2pComponent.GetNodes(); var peer = peers.Where(p => p.IP == state.IP && p.Port == state.Port).FirstOrDefault(); if (peer != null && peer.IsConnected) { var payload = new AddrMsg(); int index = 0; payload.Deserialize(state.Command.Payload, ref index); foreach (var item in payload.AddressList) { if (peers.Where(p => !p.IsTrackerServer && p.IP == item.Ip && p.Port == item.Port && p.IsConnected).Count() == 0) { this.p2pComponent.AddNode(item.Ip, item.Port); } } } }