Bring client up to latest Empires API approach
- Pre-allocate a game ID in the server for flempires to use (QRST, say)
-
- Change flempires from using https://families.cworth.org/api to
- instead use https://lmno.games/empires/QRST
+ [🗸] Pre-allocate a game ID in the server for flempires to use (QRST)
+
+ [ ] Change flempires from using https://families.cworth.org/api to
+ instead use https://lmno.games/empires/QRST
+
+ [ ] Add UI to ask user for a game ID, (obviating the QRST ID)
+
+ [ ] Add UI to generate a new game ID, (allow flempires to work on its own)
+ Example:
+ curl -X POST https://lmno.games/new/empires
+ Returns: "WLJG" (or some other game ID)
+
+ [ ] Implement player registration by POSTing to /register (without cookie)
+ Example:
+ curl -X POST \
+ -H 'Content-Type: application/json' \
+ -d '{"name": "Carl", "character": "Elvis"}' \
+ https://lmno.games/empires/QRST/register
+ Returns: 1 (or some other player ID)
+
+ [ ] Implement registration with /profile and then /register
+
+ Note: This approach requires obtaining a cookie from the
+ /profile request and then providing that cookie on the
+ subsequent /register request. The -c and -b command-line options
+ of curl can be used to demonstrate this:
+
+ Example:
+ curl -c cookie-file \
+ -X PUT \
+ -H 'Content-Type: application/json' \
+ -d '{"nickname": "Cookie"}' \
+ https://lmno.games/profile
+ curl -b cookie-file \
+ -X POST \
+ -H 'Content-Type: application/json' \
+ -d '{"character": "Cookie Monster"}'
+ https://lmno.games/empires/QRST/register
+ Returns: 2 (or some other player ID)
+
+ [ ] Listen to the /events stream for the game
+
+ This will require an asynchronous mechanism that is continually
+ listening for events to come in. Events will be of the form
+ "event: <event_type>" followed by the data of the event "data:
+ <json_data_for_event>" followed by a blank line. There will also
+ be periodic keep-alive non-events sent which are just a line
+ with only a ":".
+
+ This mechanism is called "Server-sent events" so you may find
+ code that supports the parsing of this. Or you may not. It
+ doesn't seem like this mechanism ever became all that popular
+ (before websockets came along and became popular).
+
+ Example:
+
+ curl https://lmno.games/empires/QRST/events
+ Returns:
+
+ event: game-info
+ data: {"id":"QRST","url":"http://lmno.games/QRST"}
+
+ event: player-info
+ data: {"id":5,"active":true,"name":"Cookie","team":""}
+
+ event: player-enter
+ data: {"id":2,"active":true,"name":"Web","team":""}
+
+ event: game-state
+ data: {"team_to_play":{"name":""}}
+
+ event: players
+ data: [{"id":1,"name":"Carl"},{"id":2,"name":"Cookie"}]
+
+ event: game-phase
+ data: {"old_phase":"none","new_phase":"join"}
Scribe
======