diff --git a/app_lifecycle.wsd b/app_lifecycle.wsd new file mode 100644 index 0000000..9f54d23 --- /dev/null +++ b/app_lifecycle.wsd @@ -0,0 +1,10 @@ +@startuml Application lifecycle + +control "Event sources (Gateway, rest)" as event_src +boundary "Event distributor" as middleware +entity "Event sinks (Discord object)" as event_sink + +event_src -> middleware : Incoming event +middleware -> event_sink : Event forwarded to the right sink + +@enduml \ No newline at end of file diff --git a/authentication_loop.wsd b/authentication_loop.wsd new file mode 100644 index 0000000..5ea5960 --- /dev/null +++ b/authentication_loop.wsd @@ -0,0 +1,40 @@ +@startuml Authentication loop + +[*] --> Unauthenticated : Application start +Unauthenticated : Reset state, nothing is cached +Unauthenticated --> AuthBegin : Start() is called + +state Disconnected { + AuthBegin : Start aquiring WS URL + AuthBegin --> Websocket_Neutral : Got WS URL + Websocket_Neutral : Websocket is waiting for connection + Resume_Fail : Clear all cached session data + Resume_Fail : Disconnect websocket + Resume_Fail --> AuthBegin + Reconnect : Disconnect websocket + Reconnect --> AuthBegin +} +Websocket_Connected --> Reconnect : Reconnect event recieved +Websocket_Connected --> Reconnect : Websocket closes with a reconnectable close code (or no close code at all) +Websocket_Connected --> Reconnect : Invalid session with d set to true +Websocket_Connected --> Reconnect : Heartbeat timeout +state Websocket_Connected { + Websocket_Resume --> Resume_Fail : Invalid session recieved + Websocket_Neutral --> Websocket_Ready : Hello packet recieved + Websocket_Ready : Start heartbeating + Websocket_Ready : Decide to either start new session or resume a previous one + Websocket_Ready --> Websocket_Identify : No session to resume + Websocket_Identify : Start new session + Websocket_Ready --> Websocket_Resume : Previous session is available + Websocket_Resume : Try resuming old session + Websocket_Resume : This should be transparent, as this is fairly common + Websocket_Identify --> Websocket_Running : Ready event recieved + Websocket_Resume --> Websocket_Running : Resumed event recieved + Websocket_Running : Save session details for resume + Websocket_Running : Recieve events and forward them +} +Websocket_Identify -> Websocket_Disabled : Invalid session recieved +Websocket_Connected -> Websocket_Disabled : Rate limit +Websocket_Disabled : Wrong credentials or something is really broken + +@enduml \ No newline at end of file