Neuron®
The Neuron® is the basis for the creation of open and secure federated networks for smart societies.
Loading...
Searching...
No Matches
SniffableLedger.cs
1using System;
3using System.Threading.Tasks;
7
9{
14 {
15 private bool prevHasSniffers = false;
16
21 : base(false)
22 {
23 }
24
28 public override void Add(ISniffer Sniffer)
29 {
30 base.Add(Sniffer);
31 this.CheckEventHandlers();
32 }
33
37 public override void AddRange(IEnumerable<ISniffer> Sniffers)
38 {
39 base.AddRange(Sniffers);
40 this.CheckEventHandlers();
41 }
42
46 public override bool Remove(ISniffer Sniffer)
47 {
48 bool Result = base.Remove(Sniffer);
49 this.CheckEventHandlers();
50 return Result;
51 }
52
53 private void CheckEventHandlers()
54 {
55 bool b = this.HasSniffers;
56
57 if (this.prevHasSniffers != b)
58 {
59 if (b)
60 {
61 Ledger.CollectionCleared += this.Ledger_CollectionCleared;
62 Ledger.EntryAdded += this.Ledger_EntryAdded;
63 Ledger.EntryUpdated += this.Ledger_EntryUpdated;
64 Ledger.EntryDeleted += this.Ledger_EntryDeleted;
65 }
66 else
67 {
68 Ledger.CollectionCleared -= this.Ledger_CollectionCleared;
69 Ledger.EntryAdded -= this.Ledger_EntryAdded;
70 Ledger.EntryUpdated -= this.Ledger_EntryUpdated;
71 Ledger.EntryDeleted -= this.Ledger_EntryDeleted;
72 }
73
74 this.prevHasSniffers = b;
75 }
76 }
77
78 private async void Ledger_EntryAdded(object Sender, ObjectEventArgs e)
79 {
80 if (this.HasSniffers)
81 {
82 try
83 {
84 this.TransmitText(await SniffableDatabase.GetJSON(e.Object));
85 }
86 catch (Exception)
87 {
88 this.TransmitText("Entry of type " + e.Object.GetType().FullName + " added.");
89 }
90 }
91 }
92
93 private async void Ledger_EntryUpdated(object Sender, ObjectEventArgs e)
94 {
95 if (this.HasSniffers)
96 {
97 try
98 {
99 this.ReceiveText(await SniffableDatabase.GetJSON(e.Object));
100 }
101 catch (Exception)
102 {
103 this.ReceiveText("Entry of type " + e.Object.GetType().FullName + " updated.");
104 }
105 }
106 }
107
108 private async void Ledger_EntryDeleted(object Sender, ObjectEventArgs e)
109 {
110 if (this.HasSniffers)
111 {
112 try
113 {
114 this.Error(await SniffableDatabase.GetJSON(e.Object));
115 }
116 catch (Exception)
117 {
118 this.Error("Entry of type " + e.Object.GetType().FullName + " deleted.");
119 }
120 }
121 }
122
123 private Task Ledger_CollectionCleared(object Sender, CollectionEventArgs e)
124 {
125 if (this.HasSniffers)
126 this.Information("Collection has been cleared: " + e.Collection);
127
128 return Task.CompletedTask;
129 }
130 }
131}
Class that can be used to sniff on ledger activity.
override void AddRange(IEnumerable< ISniffer > Sniffers)
ICommunicationLayer.AddRange
SniffableLedger()
Class that can be used to sniff on ledger activity.
override void Add(ISniffer Sniffer)
ICommunicationLayer.Add
override bool Remove(ISniffer Sniffer)
ICommunicationLayer.Remove
Simple base class for classes implementing communication protocols.
void TransmitText(string Text)
Called when text has been transmitted.
void ReceiveText(string Text)
Called when text has been received.
ISniffer[] Sniffers
Registered sniffers.
bool HasSniffers
If there are sniffers registered on the object.
void Error(string Error)
Called to inform the viewer of an error state.
void Information(string Comment)
Called to inform the viewer of something.
Event arguments for collection events.
Event arguments for database object events.
Interface for sniffers. Sniffers can be added to ICommunicationLayer classes to eavesdrop on communic...
Definition: ISniffer.cs:10