Files
ScadaBridge/docs/plans/diagrams/grpc-channel-bridging.drawio
T
Joseph Doherty bdee12f4e9 docs: render architecture & flow diagrams as draw.io charts
Replace ASCII-art diagrams across the README and docs/ with editable
.drawio sources plus exported PNGs, so the diagrams render clearly in
rendered markdown and can be maintained/regenerated instead of being
hand-edited as fragile text art. Non-diagram blocks (code, folder
trees, UI wireframes) were left as text.
2026-05-31 23:32:53 -04:00

42 lines
2.7 KiB
Plaintext

<mxfile host="app.diagrams.net">
<diagram id="channelbridge" name="Channel Bridging">
<mxGraphModel dx="1000" dy="700" grid="1" gridSize="10" guides="1" arrows="1"
fold="1" page="1" pageScale="1" pageWidth="900" pageHeight="640" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<!-- Producer side: Akka Actor Thread(s) -->
<mxCell id="akka" value="Akka Actor Thread(s)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;fontSize=13;fontStyle=1;" vertex="1" parent="1">
<mxGeometry x="80" y="60" width="240" height="60" as="geometry" />
</mxCell>
<!-- Consumer side: gRPC Response Stream -->
<mxCell id="grpc" value="gRPC Response Stream" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=13;fontStyle=1;" vertex="1" parent="1">
<mxGeometry x="560" y="60" width="240" height="60" as="geometry" />
</mxCell>
<!-- Channel box -->
<mxCell id="channel" value="Channel&lt;SiteStreamEvent&gt;&#10;&#10;BoundedChannelOptions(1000)&#10;FullMode = DropOldest" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;fontSize=13;fontStyle=1;verticalAlign=middle;" vertex="1" parent="1">
<mxGeometry x="240" y="280" width="400" height="120" as="geometry" />
</mxCell>
<!-- Producer writes into channel -->
<mxCell id="write" value="channel.Writer.TryWrite(evt)" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;rounded=0;fontSize=12;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.25;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="akka" target="channel">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<!-- Channel read out to gRPC stream -->
<mxCell id="read" value="await responseStream.WriteAsync(evt)" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;rounded=0;fontSize=12;exitX=0.75;exitY=0;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1" source="channel" target="grpc">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<!-- Notes -->
<mxCell id="note" value="• Bounded capacity (1000): prevents unbounded memory growth if the gRPC client is slow&#10;• DropOldest: matches the existing SiteStreamManager overflow strategy&#10;• ReadAllAsync: yields items as they arrive, naturally async" style="text;html=1;align=left;verticalAlign=middle;fontSize=11;fontColor=#666666;spacingLeft=4;" vertex="1" parent="1">
<mxGeometry x="80" y="450" width="720" height="80" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>