From 716a8a206758e2993c7b7c1840860a17fc47e15a Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com> Date: Tue, 22 Dec 2020 20:33:34 +0000 Subject: [PATCH] diagrams for client --- design/agent.gv | 83 ++++++++++++++++++++++++++++++++++++++++++++++++ design/client.gv | 41 ++++++++++++++++++++++++ 2 files changed, 124 insertions(+) create mode 100644 design/agent.gv create mode 100644 design/client.gv diff --git a/design/agent.gv b/design/agent.gv new file mode 100644 index 000000000..8be541df2 --- /dev/null +++ b/design/agent.gv @@ -0,0 +1,83 @@ +digraph SMPAgent { + graph [fontname=arial] + node [fontname=arial fontsize=11 shape=box] + edge [fontname=arial fontsize=10 arrowhead=open arrowtail=open] + + subgraph clusterPersistence { + label="persistence" + connectionsStore [shape=cylinder label="duplex\nconnection\nrecords"] + } + + subgraph clusterAgent { + label="agent threads" + main [shape=hexagon color=orange label="main\nthread"] + aSock [label="user agent TCP socket" color=darkgreen] + subgraph clusterThreads { + label="" + node [shape=hexagon color=orange] + runUser [label="runUser\nthread"] + runServer [label="runServer\nthread"] + msgSubscriber [label="message\nsubscriber\nthread"] + } + main -> {runUser runServer} [style=dashed label=race color=orange fontcolor=orange] + aSock -> runUser [color=darkgreen] + + acInq [shape=rarrow label="agent\nserver\ncommands\nTBQueue"] + acInq -> runServer [color=darkgreen] + + amInq [shape=larrow label="agent\nserver\nmessages\nTBQueue"] + amInq -> msgSubscriber [color=blue] + + msgSubscriber -> connectionsStore [dir=both] + runUser -> connectionsStore [dir=both] + } + + subgraph clusterUser { + label="1 group per user connection" + uSock [label="user connection TCP socket" color=darkgreen] + + subgraph clusterUserThreads { + graph [fontsize=11] + label="user threads" + node [shape=hexagon, color=orange] + uRcv [label="receive"] + uAgent [label="user"] + uSnd [label="send"] + } + + runUser -> uSock [style=dashed label="connect" color=darkgreen fontcolor=darkgreen] + runUser -> {uAgent uRcv uSnd} [style=dashed label=race color=orange fontcolor=orange] + + uInq [shape=rarrow label="receive\nTBQueue"] + uOutq [shape=larrow label="send\nTBQueue"] + uSock -> uRcv -> uInq -> uAgent [color=darkgreen] + uAgent -> uOutq -> uSnd -> uSock [color=darkgreen] + + msgSubscriber -> uOutq [color=blue] + uAgent -> acInq [color=darkgreen] + } + + subgraph clusterServer { + label="1 group per SMP server connection" + sSock [label="SMP server connection TCP socket" color=blue] + + subgraph clusterServerThreads { + graph [fontsize=11] + label="server threads" + node [shape=hexagon, color=orange] + sRcv [label="receive"] + sAgent [label="server"] + sSnd [label="send"] + } + + runServer -> {sAgent sRcv sSnd} [style=dashed label=race color=orange fontcolor=orange] + + sInq [shape=rarrow label="receive\nTBQueue"] + sOutq [shape=rarrow label="send\nTBQueue"] + sSock -> sRcv -> sInq -> sAgent [color=blue] + runServer -> sOutq [color=darkgreen] + sOutq -> sSnd -> sSock [color=blue] + + sAgent -> amInq [color=blue] + } +} diff --git a/design/client.gv b/design/client.gv new file mode 100644 index 000000000..62f86fe5c --- /dev/null +++ b/design/client.gv @@ -0,0 +1,41 @@ +digraph SMPClient { + graph [fontname=arial] + node [fontname=arial fontsize=11 shape=box] + edge [fontname=arial fontsize=10 arrowhead=open arrowtail=open] + + label="module SMPClient" + + subgraph clusterServerConnection { + label="data ServerConnection" + sSock [label="SMP server connection TCP socket" color=blue] + + subgraph clusterServerThreads { + graph [fontsize=11] + label="server threads" + node [shape=hexagon, color=orange] + sRcv [label="receive"] + sAgent [label="server\nagent"] + sSnd [label="send"] + } + + subgraph clusterServerQueues { + graph [fontsize=11] + label="server queues" + sInq [shape=rarrow label="receive\nTBQueue"] + sOutq [shape=rarrow label="send\nTBQueue"] + sMsgq [shape=rarrow label="message\nTBChan?"] + sResq [shape=rarrow label="response\nTBQueue"] + } + } + + subgraph clusterModuleFunctions { + label="module functions" + getServerConnection + getMessageQueue [label="getMessageQueue"] + execCommand [label="sendCommand ::\nServerConnection ->\nQId ->\nCommand ->\nEither Error Command"] + } + + + sSock -> sRcv -> sInq -> sAgent -> {sMsgq sResq sOutq} [color=blue] + sOutq -> sSnd -> sSock [color=blue] +} \ No newline at end of file