blob: 332ba32cbdcc1a7a3cdc160dcd049fa13eecbd1e (
plain) (
blame)
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
|
type message struct {
seq int
payload
}
class sequencer {
var seq = 0
// Receive a request from the FE.
// Attach sequence number and multicast to RMs.
on rUnicastReceive(payload) {
rMulticastSend(message{seq, payload})
seq++
}
}
class receiver {
var seq = 0
var holdback Queue[message]
// Receive from sequencer.
on rMulticastReceive(m message) {
append(holdback, m)
trydeliver()
}
trydeliver() {
if t.e. m in holdback s.t. m.seq == seq+1 {
remove(m, holdback)
deliver(m)
seq++
trydeliver()
}
}
}
|