示例#1
0
        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);
            }
        }
示例#2
0
        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);
                }
            }
        }