/ Tools / TestNetRewarder / RequestBuilder.cs
RequestBuilder.cs
 1  using CodexContractsPlugin.ChainMonitor;
 2  using DiscordRewards;
 3  using Utils;
 4  
 5  namespace TestNetRewarder
 6  {
 7      public class RequestBuilder
 8      {
 9          public EventsAndErrors Build(ChainState chainState, ChainEventMessage[] lines, string[] errors)
10          {
11              var activeChainAddresses = CollectActiveAddresses(chainState);
12  
13              return new EventsAndErrors
14              {
15                  EventsOverview = lines,
16                  Errors = errors,
17                  ActiveChainAddresses = activeChainAddresses
18              };
19          }
20  
21          private ActiveChainAddresses CollectActiveAddresses(ChainState chainState)
22          {
23              var hosts = new List<string>();
24              var clients = new List<string>();
25  
26              foreach (var request in chainState.Requests)
27              {
28                  CollectAddresses(request, hosts, clients);
29              }
30  
31              return new ActiveChainAddresses
32              {
33                  Hosts = hosts.ToArray(),
34                  Clients = clients.ToArray()
35              };
36          }
37  
38          private void CollectAddresses(IChainStateRequest request, List<string> hosts, List<string> clients)
39          {
40              if (request.State != CodexContractsPlugin.RequestState.Started) return;
41  
42              AddIfNew(clients, request.Client);
43              foreach (var host in request.Hosts.GetHosts())
44              {
45                  AddIfNew(hosts, host);
46              }
47          }
48  
49          private void AddIfNew(List<string> list, EthAddress address)
50          {
51              var addr = address.Address;
52              if (!list.Contains(addr)) list.Add(addr);
53          }
54      }
55  }