ChainRequestTracker.cs
1 using System.Numerics; 2 using BlockchainUtils; 3 using CodexContractsPlugin.ChainMonitor; 4 using Nethereum.Hex.HexConvertors.Extensions; 5 using Utils; 6 7 namespace TraceContract 8 { 9 public class ChainRequestTracker : IChainStateChangeHandler 10 { 11 private readonly string requestId; 12 private readonly Output output; 13 14 public ChainRequestTracker(Output output, string requestId) 15 { 16 this.requestId = requestId.ToLowerInvariant(); 17 this.output = output; 18 } 19 20 public bool IsFinished { get; private set; } = false; 21 public DateTime FinishUtc { get; private set; } = DateTime.MinValue; 22 23 public void OnError(string msg) 24 { 25 } 26 27 public void OnNewRequest(RequestEvent requestEvent) 28 { 29 if (IsMyRequest(requestEvent)) output.LogRequestCreated(requestEvent); 30 } 31 32 public void OnProofSubmitted(BlockTimeEntry block, string id) 33 { 34 } 35 36 public void OnRequestCancelled(RequestEvent requestEvent) 37 { 38 if (IsMyRequest(requestEvent)) 39 { 40 IsFinished = true; 41 FinishUtc = requestEvent.Block.Utc; 42 output.LogRequestCancelled(requestEvent); 43 } 44 } 45 46 public void OnRequestFailed(RequestEvent requestEvent) 47 { 48 if (IsMyRequest(requestEvent)) 49 { 50 IsFinished = true; 51 FinishUtc = requestEvent.Block.Utc; 52 output.LogRequestFailed(requestEvent); 53 } 54 } 55 56 public void OnRequestFinished(RequestEvent requestEvent) 57 { 58 if (IsMyRequest(requestEvent)) 59 { 60 IsFinished = true; 61 FinishUtc = requestEvent.Block.Utc; 62 output.LogRequestFinished(requestEvent); 63 } 64 } 65 66 public void OnRequestFulfilled(RequestEvent requestEvent) 67 { 68 if (IsMyRequest(requestEvent)) 69 { 70 output.LogRequestStarted(requestEvent); 71 } 72 } 73 74 public void OnSlotFilled(RequestEvent requestEvent, EthAddress host, BigInteger slotIndex, bool isRepair) 75 { 76 if (IsMyRequest(requestEvent)) 77 { 78 output.LogSlotFilled(requestEvent, host, slotIndex, isRepair); 79 } 80 } 81 82 public void OnSlotFreed(RequestEvent requestEvent, BigInteger slotIndex) 83 { 84 if (IsMyRequest(requestEvent)) 85 { 86 output.LogSlotFreed(requestEvent, slotIndex); 87 } 88 } 89 90 public void OnSlotReservationsFull(RequestEvent requestEvent, BigInteger slotIndex) 91 { 92 if (IsMyRequest(requestEvent)) 93 { 94 output.LogSlotReservationsFull(requestEvent, slotIndex); 95 } 96 } 97 98 private bool IsMyRequest(RequestEvent requestEvent) 99 { 100 return requestId == requestEvent.Request.RequestId.ToHex().ToLowerInvariant(); 101 } 102 } 103 104 }