Skip to content

feat(mp): add support for !mp commands in multiplayer#7

Open
CloneWith wants to merge 28 commits into
GooGuTeam:v2from
CloneWith:feat/mp-commands
Open

feat(mp): add support for !mp commands in multiplayer#7
CloneWith wants to merge 28 commits into
GooGuTeam:v2from
CloneWith:feat/mp-commands

Conversation

@CloneWith

@CloneWith CloneWith commented May 11, 2026

Copy link
Copy Markdown

This PR is part of the feature GooGuTeam/g0v0-server#147.

Tasks

  • Redis subscriber for main-server-side events
  • Normal countdown tick events and message support
  • Data structure for event data envelope

Known bugs

  • Room users have null usernames
  • Referee management (client lacks support)
  • room.Disband() won't work properly
  • When changing mods of a newly added item by EditPlaylistItem(), an exception is thrown saying that the beatmap is modified. After manually editing it client-side, subsequent requests would succeed

CloneWith added 3 commits May 11, 2026 21:06
For automatic chat reminders in multiplayer
TODO: Should we also add one for Head to Head controller?
CloneWith and others added 15 commits June 12, 2026 17:00
Updated
-------
| package | old version(s) | new version | downloads | released on | changelogs |
| :- | :-: | :-: | -: | :-: | :-: |
| AWSSDK.S3 | 4.0.19 | [4.0.24.3](https://www.nuget.org/packages/AWSSDK.S3/4.0.24.3) | >8.9k | 2026-06-10 | [link](https://github.com/aws/aws-sdk-net/releases/tag/4.0.267.0) |
| coverlet.collector | 8.0.0 | [10.0.1](https://www.nuget.org/packages/coverlet.collector/10.0.1) | >3.7M | 2026-05-18 | [link](https://github.com/coverlet-coverage/coverlet/releases/tag/v10.0.1) |
| Dapper | 2.1.72 | [2.1.79](https://www.nuget.org/packages/Dapper/2.1.79) | >1.4M | 2026-05-16 | [link](https://github.com/DapperLib/Dapper/releases/tag/2.1.79) |
| DogStatsD-CSharp-Client | 9.0.0 | [9.2.0](https://www.nuget.org/packages/DogStatsD-CSharp-Client/9.2.0) | >1.1k | 2026-06-10 | [link](https://github.com/DataDog/dogstatsd-csharp-client/releases/tag/9.2.0) |
| Microsoft.AspNetCore.SignalR.Client | 10.0.5 | [10.0.9](https://www.nuget.org/packages/Microsoft.AspNetCore.SignalR.Client/10.0.9) | >24k | 2026-06-09 | [link](https://github.com/dotnet/dotnet/releases/tag/v10.0.301)[^1] |
| Microsoft.AspNetCore.SignalR.Protocols.MessagePack | 10.0.5 | [10.0.9](https://www.nuget.org/packages/Microsoft.AspNetCore.SignalR.Protocols.MessagePack/10.0.9) | >2.4k | 2026-06-09 | [link](https://github.com/dotnet/dotnet/releases/tag/v10.0.301)[^1] |
| Microsoft.AspNetCore.SignalR.Protocols.NewtonsoftJson | 10.0.5 | [10.0.9](https://www.nuget.org/packages/Microsoft.AspNetCore.SignalR.Protocols.NewtonsoftJson/10.0.9) | >3.3k | 2026-06-09 | [link](https://github.com/dotnet/dotnet/releases/tag/v10.0.301)[^1] |
| Microsoft.Extensions.Logging.Console | multiple | [10.0.9](https://www.nuget.org/packages/Microsoft.Extensions.Logging.Console/10.0.9) | >299k | 2026-06-09 | [link](https://github.com/dotnet/dotnet/releases/tag/v10.0.301)[^1] |
| Microsoft.NET.Test.Sdk | 18.3.0 | [18.6.0](https://www.nuget.org/packages/Microsoft.NET.Test.Sdk/18.6.0) | >3M | 2026-05-26 | [link](https://github.com/microsoft/vstest/releases/tag/v18.6.0) |
| Sentry.AspNetCore | 6.2.0 | [6.6.0](https://www.nuget.org/packages/Sentry.AspNetCore/6.6.0) | >111k | 2026-05-28 | [link](https://github.com/getsentry/sentry-dotnet/releases/tag/6.6.0) |
| System.Text.Json | 10.0.5 | [10.0.9](https://www.nuget.org/packages/System.Text.Json/10.0.9) | >103k | 2026-06-09 | [link](https://github.com/dotnet/dotnet/releases/tag/v10.0.301)[^1] |

[^1]: Microsoft doesn't really do specific changelogs for these packages. Counterpoint: if one of these is pwned, it's just all over.

Held back
---------
- Microsoft.AspNetCore.Authentication.JwtBearer: Requires .NET 10.0.
- Microsoft.CodeAnalysis.CSharp.Workspaces: Used for docs, upgrading doesn't work.
- Microsoft.CodeAnalysis.Workspaces.MSBuild: Used for docs, upgrading doesn't work.
- ppy.osu.Game & rulesets: Probably could be bumped, but I'd rather not until the mod multiplier things are fully done client-side.
* Add failing test case

* Move scores out of spectator client state

This has the immediate effect of no longer dropping replay frames on the
floor when a user disconnects.

Some follow-up work still needs to be done however to ensure that the
buffer evicts ditched scores rather than leak memory.

* Add failing test for lack of score expiry

* Add timed expiry for buffered scores

* Use `TryGetForUse()` for better handling

* Add basic ddog monitoring of how score buffer entries get evicted

* Add score buffer to list of entity stores monitored by graceful shutdown

Not *entirely* sure about this, but it is in line with trying as hard as
possible to never drop in-flight replay data.

* Document timeout better and choose probably better initial value

* Refactor guards
Along with some variable renames and proper considerations. Should be better than before.
@CloneWith CloneWith marked this pull request as ready for review June 20, 2026 06:55

@MingxuanGame MingxuanGame left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Besides, please fix the compiling error by upgrading the dependencies.

Comment thread osu.Server.Spectator/Hubs/Multiplayer/MultiplayerRoomRedisSubscriber.cs Outdated
Comment on lines +628 to +629
newItem.RequiredMods = mods;
await room.EditPlaylistItem(byUserId, newItem);

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Checking the current item is expired is needed.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is already checked above at line #608-609.

…/mp-commands

# Conflicts:
#	osu.Server.Spectator.Tests/SpectatorHubTest.cs
#	osu.Server.Spectator/Extensions/ServiceCollectionExtensions.cs
#	osu.Server.Spectator/Hubs/Spectator/SpectatorHub.cs
#	osu.Server.Spectator/osu.Server.Spectator.csproj
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants