summaryrefslogtreecommitdiffstats
path: root/doc/tomulticast.pseudo
diff options
context:
space:
mode:
Diffstat (limited to 'doc/tomulticast.pseudo')
-rw-r--r--doc/tomulticast.pseudo35
1 files changed, 35 insertions, 0 deletions
diff --git a/doc/tomulticast.pseudo b/doc/tomulticast.pseudo
new file mode 100644
index 0000000..332ba32
--- /dev/null
+++ b/doc/tomulticast.pseudo
@@ -0,0 +1,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()
+ }
+ }
+}