# Architecture
Server architecture:
+-----------+
| |
| Redis |
+----+ +-----+
| | | |
| | | |
| +-----------+ |
| |
| |
+---------+----------+-----------+---------+
| | |
| frontend-server | game-server |
| | |
| - API | - Rooms |
| - Serve Files | - Game Events |
| | |
| | |
+--------------------+---------------------+
User-Server-Interaction flowchart:
USERS SERVER
+----------------+ /api/login +------------------------------+
| +-----------------------------------> |
| USER A: <-----------------------------------+ USER A registration |
| { | token <UUID> | |
| userName, | | |
| id: loginToken | /api/newroom | |
| } +-----------------------------------> USER A authentication + |
| <-----------------------------------+ new Room |
| | token <UUID> | |
| | | |
| | ws://location/?t=<UUID>&r=<UUID> | |
| +-----------------------------------> USER A authentication + |
| <-----------------------------------+ add to room if open |
| | ws connection or close | |
+----------------+ | |
| |
+----------------+ /api/login | |
| +-----------------------------------> |
| USER B: <-----------------------------------+ USER B registration |
| { | token <UUID> | |
| userName, | | |
| id: loginToken | /api/openrooms | |
| } +-----------------------------------> Open rooms |
| <-----------------------------------+ Here: room of USER A |
| | openrooms <ARRAY> | |
| | | |
| | ws://location/?t=<UUID>&r=<UUID> | |
| +-----------------------------------> USER B authentication |
| <-----------------------------------+ Join room of USER A |
| | ws connection or close | |
+----------------+ +------------------------------+