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 }