/** * Send the request to connected hubs . * */ private void DispatchRequest(G2PacketQ2 pack) { int count = 0; NodePeer hub = null; while (count < Settings.PEER_DISPATCH_QUERY) { hub = G2Network.Instance.getQueryableHub(); hub.DontQueryBefore(Settings.SEARCH_TIME_OUT_MS); hub.SendPacket(pack); G2Log.Write("G2SearchManager : Sent Query " + getTermsByGUID(pack.guid) + " on " + hub.ToString()); count++; } }
// parse the many hubs data there are in a ack packet private G2Packet HandlePacketQA(NodePeer p, G2PacketQA pack) { foreach (G2Packet child in pack.children) { if (child.type == G2PacketType.S) // search hubs data { G2PacketS s = child as G2PacketS; if (s == null) { continue; } if (s.Timestamp != -1) { DateTime lastSeen = BinaryUtils.UnixTimeStampToDateTime(s.Timestamp); cache.AddHub(new NodePeer(s.Node.ipv4, s.Node.port, lastSeen, true)); } else { cache.AddHub(new NodePeer(s.Node.ipv4, s.Node.port, DateTime.Now, true)); } } else if (child.type == G2PacketType.RA) { G2PacketRA ra = child as G2PacketRA; if (ra == null || ra.Seconds == 0) { continue; } p.DontQueryBefore(ra.Seconds * 1000); } else if (child.type == G2PacketType.D) { G2PacketD d = child as G2PacketD; if (d.Node != null) { cache.AddHub(new NodePeer(d.Node, true)); } } } return(null); }
// parse the many hubs data there are in a ack packet private G2Packet HandlePacketQA(NodePeer p, G2PacketQA pack) { foreach (G2Packet child in pack.children) { if(child.type == G2PacketType.S) // search hubs data { G2PacketS s = child as G2PacketS; if(s == null) continue; if(s.Timestamp != -1) { DateTime lastSeen = BinaryUtils.UnixTimeStampToDateTime(s.Timestamp); cache.AddHub(new NodePeer(s.Node.ipv4, s.Node.port,lastSeen,true)); } else cache.AddHub(new NodePeer(s.Node.ipv4, s.Node.port,DateTime.Now, true)); } else if(child.type == G2PacketType.RA) { G2PacketRA ra = child as G2PacketRA; if (ra == null || ra.Seconds == 0) continue; p.DontQueryBefore(ra.Seconds * 1000); } else if (child.type == G2PacketType.D) { G2PacketD d = child as G2PacketD; if (d.Node != null) cache.AddHub(new NodePeer(d.Node, true)); } } return null; }