shiro
shiro copied to clipboard
Implement support for the osu! tournament client in multiplayer
osu! has a built-in tournament client which is used for broadcasting osu! tournaments. It allows viewing of every player in a multiplayer room at once.
To allow for tournaments to be broadcasted on Shiro-based servers, support for this client is required.
Specification
Detecting a tournament client is easy. On user login, the client build string will end with tourney
when the osu! client is a tournament client, e.g b20160403.6tourney
. The client build version parser will not throw a exception for the non-numeric string in the version string, I have already accounted for this case.
A tournament client will always login in with all clients using the same username and password combo. It'll also send a special chat join / leave packet indicating the joining of the #multiplayer
channel, without joining the actual multiplayer room.
The tournament client should not be displayed in the global user presence list, however it should be displayed in the spectator list for the clients.
Requirements
- Multiplayer to be fully implemented (#16)
- Permission system to be fully in place (#10)
- Implementation of osu! tourney commands
Conflicts
There are some design decision that may conflict with the further implementation of this feature. It may require some massive code base changes:
- User sessions are singletons. Once a new client logs in with the same username and password combo, the old client's token will be invalidated and disconnected.
- A user can only spectate a single host. One user can not spectate multiple clients simultaneously.
Depends on #10 and #16, blocked until resolved.
As #108 is already modifying spectating for it to be more thread-safe, I'd say we take this opportunity to allow it for spectating multiple users at once, a requirement when using the osu!tourney client.