private void UpdatePeers() { int id; string[] listsPeer; string[] peers; string msg = ""; string ris = ""; CPeer receivedPeer; foreach (CPeer p in Peers) { try { id = p.SendRequest(new CMessage(EMessageType.Request, ERequestType.UpdPeers)); msg = p.ReceiveData(id, 5000).Data; ris += msg + "/"; } catch { if (Program.DEBUG) { CIO.DebugOut("Nessuna risposta da " + p.IP + " durante la richiesta dei peer." + "Disconnessione da " + p.IP); } p.Disconnect(); } } ris = ris.TrimEnd('/'); if (ris != "") { string publicIp = CServer.GetPublicIPAddress(); string localIp = CServer.GetLocalIPAddress(); listsPeer = ris.Split('/'); foreach (string l in listsPeer) { peers = l.Split(';'); foreach (string rp in peers) { receivedPeer = CPeer.Deserialize(rp); if (!(receivedPeer.IP == publicIp || receivedPeer.IP == localIp)) { Insert(receivedPeer); } } } } }
private static bool ValidateData(CMessage Msg) { if (Msg.RqsType != ERequestType.NULL) { return(false); } switch (Msg.DataType) { case EDataType.PeersList: try { string[] peers = Msg.Data.Split(';'); foreach (string rp in peers) { CPeer.Deserialize(rp); } return(true); } catch { return(false); } case EDataType.Block: try { CBlock.Deserialize(Msg.Data); return(true); } catch { return(false); } case EDataType.ULong: try { Convert.ToUInt64(Msg.Data); return(true); } catch { return(false); } case EDataType.ULongList: try { JsonConvert.DeserializeObject <ulong[]>(Msg.Data); return(true); } catch { return(false); } case EDataType.Header: try { JsonConvert.DeserializeObject <CHeader>(Msg.Data); return(true); } catch { return(false); } case EDataType.BlockList: try { JsonConvert.DeserializeObject <CBlock[]>(Msg.Data); return(true); } catch { return(false); } case EDataType.HeaderList: try { JsonConvert.DeserializeObject <CHeader[]>(Msg.Data); return(true); } catch { return(false); } default: return(false); } }