@startuml skinparam shadowing false title Tasks and data flow rectangle "relay loop (main task)" as loop { card "public socket\nrecv_from" as recv card "sessions:\nHashMap" as map } rectangle "session task (one per client)" as st { card "mpsc Receiver\n(queue: 64)" as rx card "upstream socket\n(connected to ET)" as up } rectangle "heartbeat task" as hb { card "interval 5 min" as tick card "probe socket" as probe } recv --> map : lookup client map --> rx : try_send(packet)\n(full: drop) rx --> up : send up --> recv : recv, then public.send_to(client) tick --> probe : getinfo tick --> recv : heartbeat via public socket @enduml