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;
2using System.Collections.Generic;
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 try
81 {
82 await this.TransmitText(await SniffableDatabase.GetJSON(e.Object));
83 }
84 catch (Exception)
85 {
86 await this.TransmitText("Entry of type " + e.Object.GetType().FullName + " added.");
87 }
88 }
89
90 private async void Ledger_EntryUpdated(object Sender, ObjectEventArgs e)
91 {
92 try
93 {
94 await this.ReceiveText(await SniffableDatabase.GetJSON(e.Object));
95 }
96 catch (Exception)
97 {
98 await this.ReceiveText("Entry of type " + e.Object.GetType().FullName + " updated.");
99 }
100 }
101
102 private async void Ledger_EntryDeleted(object Sender, ObjectEventArgs e)
103 {
104 try
105 {
106 await this.Error(await SniffableDatabase.GetJSON(e.Object));
107 }
108 catch (Exception)
109 {
110 await this.Error("Entry of type " + e.Object.GetType().FullName + " deleted.");
111 }
112 }
113
114 private Task Ledger_CollectionCleared(object Sender, CollectionEventArgs e)
115 {
116 return this.Information("Collection has been cleared: " + e.Collection);
117 }
118 }
119}
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.
Task Error(string Error)
Called to inform the viewer of an error state.
ISniffer[] Sniffers
Registered sniffers.
Task Information(string Comment)
Called to inform the viewer of something.
Task TransmitText(string Text)
Called when text has been transmitted.
bool HasSniffers
If there are sniffers registered on the object.
Task ReceiveText(string Text)
Called when text has been received.
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:11