Implement planned protocol changes
Protocol changes
- Drop Print in favour of PrintJSON. At least multiclient.net can't handle arbitrary
typeyet, so version check is required. - Drop support for missing
items_handlingin Connect - Replace DataPackage per-game
versionby a hash - Replace RoomInfo
datapackage_versionsby hashes - Drop
datapackage_versionfrom RoomInfo andversionfrom DataPackage - Drop
playersfrom RoomInfo - Change
gamesin RoomInfo to be a Set, including "Archipelago" - Drop
exclusionsfrom GetDataPackage - Drop support for IgnoreGame tag
Implementation
There is no hard reason to PR or merge stages in order. Stages 1+2 could be implemented at the same time as 4+5 by testing against multiple branches.
Stage 1: Verify client lib support of revamped games in RoomInfo and missing players
- [x] apclientpp
- [x] apcpp
- [x] java
- [x] js
- [x] net https://github.com/ArchipelagoMW/Archipelago.MultiClient.Net/pull/54
- [x] py #888
Stage 2: Update clients that require update from stage 1
insert more items here when we know
- [x] Timespinner
- [ ] RL
- [ ] RoR2
- [x] Subnautica
- [ ] HK
- [x] Raft
- [x] CommonClient - 0.3.5
Stage 3: Implement new features, in the server
- [x] Use PrintJSON for Chat and Countdown - fall back to Print for old clients (Connect
version: 0.3.5)
#812 - [ ] Require
items_handlingin Connect for new clients (Connectversion: TBD) - [ ] Datapackage per-game checksum - in addition to version integer #684
- [ ]
gamesrevamp in RoomInfo (depends on stage1 and 2 being completed) #757
Stage 4: Implement new features in client libs, send new version
- [ ] apclientpp
- [ ] apcpp:
- [ ] java
- [ ] js
- [ ] net
- [ ] py
Stage 5: Update clients to new libs
insert all games here
Stage 6: Drop backwards-compat in server
- [ ] Drop fallback to Print
- [ ] Drop version check from items_handling requirement #757
- [ ] Drop DataPackage per-game version (replaced by hash)
- [ ] Drop RoomInfo datapackage_versions (replaced by hashes)
- [ ] Drop RoomInfo datapackage_version and DataPackage version (removed) #757
- [ ] Drop GetDataPackage exclusions (replaced by games)
- [ ] Drop support for IgnoreGame tag
- [ ] Update minimum required client version in server
Stage 7: Drop backwards-compat in client
At the discretion of client lib devs, but should not happen before TBD.
Random Notes
Stage 1/2 can be tested against a server running #757
A fair few py world changes are done in https://github.com/ArchipelagoMW/Archipelago/pull/757
changes for countdown by PrintJSON are in #812
- Fixed/split the datapackage version stuff above (it's still confusing...) with both version and versions.
- Added dropping
exclusionsfrom GetDataPackage. I already forgot that is still in :D
So regarding the .net client updates, the v4 was just released a couple of hours ago Timespinner and Subnautica already use it I'll gently poke the maintainers of the other .net games to see if they got time to update thiers
can confirm Java library is compatible with stage 1. current Minecraft mod connects to games run with #757 without issue.
can confirm ArchipIDLE works just fine, both on removal of games aswel as receiving printJson instead of print
Raft is also updated so can be checked off
RL was also updated and can be marked off
RoR2 has been updated, so marked it off. May also want to add removing forced_auto_forfeit to this as all clients after the next RoR2 client update should no longer be dependent on it.
As an update for step 6 "Drop fallback to Print" was already merged
Checksum based datapackage where added in https://github.com/ArchipelagoMW/Archipelago.MultiClient.Net v5.0.0