1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
crate::ix!();
/**
| Interface for message handling
|
*/
pub trait NetEventsInterface:
InitializeNode
+ Send
+ Sync
+ FinalizeNode
+ ProcessMessages
+ SendMessages { }
pub trait ProcessMessages {
/**
| Process protocol messages received
| from a given node
|
| -----------
| @param[in] pnode
|
| The node which we have received messages
| from.
| ----------
| @param[in] interrupt
|
| Interrupt condition for processing
| threads
|
| -----------
| @return
|
| True if there is more work to be done
|
*/
fn process_messages(
self: Arc<Self>,
pnode: &mut AmoWriteGuard<Box<dyn NodeInterface>>,
interrupt: &AtomicBool) -> bool;
}
pub trait InitializeNode {
/**
| Initialize a peer (setup state, queue
| any initial messages)
|
*/
fn initialize_node(&mut self,
node: &mut AmoWriteGuard<Box<dyn NodeInterface>>);
}
pub trait FinalizeNode {
/**
| Handle removal of a peer (clear state)
|
*/
fn finalize_node(&mut self, node: &mut AmoWriteGuard<Box<dyn NodeInterface>>);
}
pub trait SendMessages {
/**
| Send queued protocol messages to a given
| node.
|
| -----------
| @param[in] pnode
|
| The node which we are sending messages
| to.
|
| -----------
| @return
|
| True if there is more work to be done
|
*/
#[EXCLUSIVE_LOCKS_REQUIRED(pnode->cs_sendProcessing)]
fn send_messages(
self: Arc<Self>,
pnode: Amo<Box<dyn NodeInterface>>) -> bool;
}