@startuml skinparam shadowing false title Registering a server (pairing) participant "Admin tool\n(etadm)" as admin participant "ET server\n:27960" as et participant "etrelay control API\n:8090" as control participant "Masters" as master note over admin : picks a key once\n(kept on its side) admin -> et : rcon: sets etrelay_proof admin -> control : PUT /server {port: 27960, upstream_port: 27960, key}\nBearer: the relay's token control -> control : port offered and free?\n(409: held by another server) control -> et : getstatus et --> control : statusResponse\n...\\etrelay_proof\\... control -> control : fingerprint == sha256(key)?\n(403: not shown) control -> control : bind :27960, keep sha256(key)\nin servers.json control --> admin : 200 {port, upstream, since, alive} admin -> et : rcon: set etrelay_proof "" control -> master : heartbeat EnemyTerritory-1\nfrom :27960 == Later == admin -> control : GET /sessions, /bans...\nBearer: the key (names the server) control --> admin : this server's only note over admin, control : 401 (the relay lost its state):\nthe admin tool registers again admin -> control : DELETE /server control -> master : heartbeat ETFlatline-1 note over control : port freed, bans dropped @enduml