Neuron®
The Neuron® is the basis for the creation of open and secure federated networks for smart societies.
Loading...
Searching...
No Matches
PendingChunkRecord.cs
1using System.Threading.Tasks;
3
5{
6 internal class PendingChunkRecord : ChunkRecord
7 {
8 private readonly ChunkedList<ChunkEvent> pending = new ChunkedList<ChunkEvent>();
9
10 internal PendingChunkRecord()
11 : base()
12 {
13 }
14
15 public override Task DisposeAsync()
16 {
17 return Task.CompletedTask;
18 }
19
20 private abstract class ChunkEvent
21 {
22 public abstract Task Replay(ChunkRecord To);
23 }
24
25 private class ChunkReceivedEvent : ChunkEvent
26 {
27 public int Nr;
28 public bool Last;
29 public bool ConstantBuffer;
30 public byte[] Data;
31
32 public override Task Replay(ChunkRecord To)
33 {
34 return To.ChunkReceived(this.Nr, this.Last, this.ConstantBuffer, this.Data);
35 }
36 }
37
38 private class ChunkFailEvent : ChunkEvent
39 {
40 public string Message;
41
42 public override Task Replay(ChunkRecord To)
43 {
44 return To.Fail(this.Message);
45 }
46 }
47
48 internal override Task<bool> ChunkReceived(int Nr, bool Last, bool ConstantBuffer, byte[] Data)
49 {
50 this.pending.Add(new ChunkReceivedEvent()
51 {
52 Nr = Nr,
53 Last = Last,
54 ConstantBuffer = ConstantBuffer,
55 Data = Data
56 });
57
58 return Task.FromResult(true);
59 }
60
61 internal override Task Fail(string Message)
62 {
63 this.pending.Add(new ChunkFailEvent()
64 {
65 Message = Message
66 });
67
68 return Task.CompletedTask;
69 }
70
71 internal async Task Replay(ChunkRecord To)
72 {
73 foreach (ChunkEvent E in this.pending)
74 await E.Replay(To);
75
76 this.pending.Clear();
77 }
78 }
79}
A chunked list is a linked list of chunks of objects of type T .
Definition: ChunkedList.cs:54