コード例 #1
0
ファイル: RemoteNode.cs プロジェクト: EppoFq/AntShares
 private async Task OnInvMessageReceivedAsync(InvPayload payload)
 {
     InventoryVector[] vectors = payload.Inventories.Distinct().Where(p => Enum.IsDefined(typeof(InventoryType), p.Type)).ToArray();
     lock (KnownHashes)
     {
         vectors = vectors.Where(p => !KnownHashes.Contains(p.Hash)).ToArray();
     }
     if (vectors.Length == 0) return;
     lock (missions_global)
     {
         if (localNode.GlobalMissionsEnabled)
             vectors = vectors.Where(p => !missions_global.Contains(p.Hash)).ToArray();
         foreach (InventoryVector vector in vectors)
         {
             missions_global.Add(vector.Hash);
             missions.Add(vector.Hash);
         }
     }
     if (vectors.Length == 0) return;
     await SendMessageAsync("getdata", GetDataPayload.Create(vectors));
 }
コード例 #2
0
ファイル: RemoteNode.cs プロジェクト: 4T-Shirt/AntShares
 private void OnInvMessageReceived(InvPayload payload)
 {
     IEnumerable<InventoryVector> vectors = payload.Inventories.Distinct().Where(p => Enum.IsDefined(typeof(InventoryType), p.Type));
     lock (LocalNode.KnownHashes)
     {
         vectors = vectors.Where(p => !LocalNode.KnownHashes.Contains(p.Hash)).ToArray();
     }
     vectors = vectors.Where(p => p.Type != InventoryType.TX || !Blockchain.Default.ContainsTransaction(p.Hash));
     vectors = vectors.Where(p => p.Type != InventoryType.Block || !Blockchain.Default.ContainsBlock(p.Hash));
     InventoryVector[] vectors_list = vectors.ToArray();
     if (vectors_list.Length == 0) return;
     lock (missions_global)
     {
         foreach (InventoryVector vector in vectors_list)
         {
             if (!missions_global.ContainsKey(vector.Hash))
             {
                 missions_global.Add(vector.Hash, new Mission
                 {
                     Hash = vector.Hash,
                     Type = vector.Type,
                     LaunchTimes = 0
                 });
             }
             if (!missions.ContainsKey(vector.Hash))
             {
                 missions.Add(vector.Hash, missions_global[vector.Hash]);
             }
         }
     }
 }
コード例 #3
0
ファイル: RemoteNode.cs プロジェクト: cole2295/AntShares
 private void OnGetDataMessageReceived(InvPayload payload)
 {
     foreach (InventoryVector vector in payload.Inventories.Distinct())
     {
         Inventory inventory;
         if (!localNode.RelayCache.TryGet(vector.Hash, out inventory) && !localNode.ServiceEnabled)
             continue;
         switch (vector.Type)
         {
             case InventoryType.TX:
                 if (inventory == null && Blockchain.Default != null)
                     inventory = Blockchain.Default.GetTransaction(vector.Hash);
                 if (inventory != null)
                     EnqueueMessage("tx", inventory);
                 break;
             case InventoryType.Block:
                 if (inventory == null && Blockchain.Default != null)
                     inventory = Blockchain.Default.GetBlock(vector.Hash);
                 if (inventory != null)
                     EnqueueMessage("block", inventory);
                 break;
         }
     }
 }