feat: relay several servers, registered through the control API

This commit is contained in:
rmanach
2026-10-01 13:32:45 +02:00
parent af2dc3af53
commit 6b2b137c1d
18 changed files with 1496 additions and 376 deletions
+12 -4
View File
@@ -2,14 +2,18 @@
skinparam shadowing false
title Tasks and data flow
rectangle "relay loop (main task)" as loop {
rectangle "relay loop (one per server)" as loop {
card "public socket\nrecv_from" as recv
card "filter\n(commands, query rate)" as filter
}
rectangle "shared state (Mutex)" as shared {
rectangle "server state (Mutex, one per server)" as shared {
card "sessions:\nHashMap<client, Session>" as map
card "bans\n(bans.json)" as bans
card "bans\n(bans-<port>.json)" as bans
}
rectangle "registry (Mutex)" as registry {
card "servers by public port,\ntheir key's hash\n(servers.json)" as servers
}
rectangle "session task (one per client)" as st {
@@ -17,12 +21,13 @@ rectangle "session task (one per client)" as st {
card "upstream socket\n(connected to ET)" as up
}
rectangle "heartbeat task" as hb {
rectangle "heartbeat task (one per server)" as hb {
card "interval 5 min" as tick
card "probe socket" as probe
}
rectangle "control API task (axum)" as ctl {
card "PUT/GET/DELETE /server" as pairing
card "GET /sessions\nGET/PUT/DELETE /bans" as routes
}
@@ -36,4 +41,7 @@ tick --> probe : getinfo
tick --> recv : heartbeat via public socket
routes --> map : list ports,\ndrop a banned IP's sessions
routes --> bans : set / lift
routes --> servers : key -> server
pairing --> servers : register / leave
servers --> loop : start / stop\n(with its heartbeat)
@enduml