@startuml skinparam shadowing false title Player: one session per client address actor "Player\n203.0.113.7:27960" as player participant "etrelay\nfront :27960" as relay participant "session task\n(socket :51234)" as session participant "ET server" as et player -> relay : getchallenge / connect / game packets relay -> relay : filter (command, query rate)\nban check relay -> session : first packet: open session session -> et : forward (source = :51234) note right of et : sees the player as\n:51234 et --> session : reply session --> player : reply sent from front:27960 ...packets both ways, deadline pushed back on each packet... ...2 min without any packet... session -> session : close (socket dropped) note over relay : next packet from 203.0.113.7:27960\nopens a new session (new port) @enduml