void HandleLeafResponse(NetworkPacket packet) { // Check that the packet is valid. if (networkPacketSwitch.VerifyPendingPacket(packet)) { LeafAccountDataResponse ladr = new LeafAccountDataResponse(); ladr.Deserialize(packet.Data); if (ladr.Leaves.Count == ladr.LeafCount) { //DebugPrint("YAYY, RECEIVED " + ladr.LeafCount + " LEAVES: " + packet.Data.Length + " Bytes, Adding/Updating to ledger", DisplayType.Warning); foreach (AccountInfo ai in ladr.Leaves) { LedgerTree.AddUpdate(ai); } } else { DebugPrint("Bad Deserialize : HandleLeafResponse().", DisplayType.Warning); } } else { DebugPrint("Packet VER FAILED : HandleLeafResponse().", DisplayType.Warning); } }
void HandleLeafRequestAll(NetworkPacket packet) { AllLeafDataRequest aldr = new AllLeafDataRequest(); aldr.Deserialize(packet.Data); // DebugPrint("LEAF REQUEST All : " + aldr.TotalRequestedLeaves + " NODES : " + packet.Data.Length + " Bytes", DisplayType.ImportantInfo); if (aldr.TotalRequestedLeaves <= Common.LSYNC_MAX_LEAVES_TO_FETCH) { ListTreeNode node; if (LedgerTree.TraverseToNode(aldr.AddressNibbles, out node) == TraverseResult.Success) { List<LeafDataType> leaves = new List<LeafDataType>(); LedgerTree.GetAllLeavesUnderNode(Common.LSYNC_MAX_LEAVES_TO_FETCH, node, ref leaves); LeafAccountDataResponse ladr = new LeafAccountDataResponse(); foreach (LeafDataType ldt in leaves) { AccountInfo ai = (AccountInfo)ldt; ladr.Add(ai); } NetworkPacket response = new NetworkPacket(nodeConfig.PublicKey, PacketType.TPT_LSYNC_LEAF_RESPONSE, ladr.Serialize(), packet.Token); networkPacketSwitch.AddToQueue(packet.PublicKeySource, response); //DebugPrint("SENT LEAF RESPONSE : " + ladr.LeafCount + " Leaves ... " + response.Data.Length + " Bytes", DisplayType.CodeAssertionFailed); } } }