digraph { Wormhole [shape="oval" color="blue" fontcolor="blue"] Boss [shape="box" label="Boss\n(manager)" color="blue" fontcolor="blue"] Mailbox [shape="box" color="blue" fontcolor="blue"] Connection [label="Rendezvous\nConnector" shape="oval" color="blue" fontcolor="blue"] websocket [color="blue" fontcolor="blue"] Order [shape="box" label="Ordering" color="blue" fontcolor="blue"] Key [shape="box" label="Key" color="blue" fontcolor="blue"] Send [shape="box" label="Send" color="blue" fontcolor="blue"] Receive [shape="box" label="Receive" color="blue" fontcolor="blue"] Code [shape="box" label="Code" color="blue" fontcolor="blue"] Nameplates [shape="box" label="Nameplate\nLister" color="blue" fontcolor="blue" ] Connection -> websocket [color="blue"] #Connection -> Order [color="blue"] Wormhole -> Boss [style="dashed" label="allocate\ninput\nset_code\nsend\nclose\n(once)"] #Wormhole -> Boss [color="blue"] Boss -> Wormhole [style="dashed" label="got_code\ngot_verifier\nreceived\nclosed\n(once)"] #Boss -> Connection [color="blue"] Boss -> Connection [style="dashed" label="start"] Connection -> Boss [style="dashed" label="rx_welcome"] Boss -> Send [style="dashed" label="send"] Boss -> Mailbox [style="dashed" label="set_nameplate\nclose\n(once)" ] #Boss -> Mailbox [color="blue"] Mailbox -> Boss [style="dashed" label="closed\n(once)"] Mailbox -> Order [style="dashed" label="got_message (once)"] Boss -> Key [style="dashed" label="got_code"] Key -> Boss [style="dashed" label="got_verifier\nscared"] Order -> Key [style="dashed" label="got_pake"] Order -> Receive [style="dashed" label="got_message"] #Boss -> Key [color="blue"] Key -> Mailbox [style="dashed" label="add_message (pake)\nadd_message (version)"] Receive -> Send [style="dashed" label="got_verified_key"] Send -> Mailbox [style="dashed" label="add_message (phase)"] Key -> Receive [style="dashed" label="got_key"] Receive -> Boss [style="dashed" label="happy\nscared\ngot_message"] Mailbox -> Connection [style="dashed" label="tx_claim\ntx_open\ntx_add\ntx_release\ntx_close\nstop" ] Connection -> Mailbox [style="dashed" label="connected\nlost\nrx_claimed\nrx_message\nrx_released\nrx_closed\nstopped"] Connection -> Nameplates [style="dashed" label="connected\nlost\nrx_nameplates" ] Nameplates -> Connection [style="dashed" label="tx_list" ] #Boss -> Code [color="blue"] Code -> Connection [style="dashed" label="tx_allocate" ] Connection -> Code [style="dashed" label="rx_allocated"] Nameplates -> Code [style="dashed" label="got_nameplates" ] #Code -> Nameplates [color="blue"] Code -> Nameplates [style="dashed" label="refresh_nameplates" ] Boss -> Code [style="dashed" label="allocate\ninput\nset_code"] Code -> Boss [style="dashed" label="got_code"] }