-
-
Notifications
You must be signed in to change notification settings - Fork 2.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Improve multiplayer room status handling #30838
base: master
Are you sure you want to change the base?
Conversation
3638aa3
to
1b8db7c
Compare
@@ -29,18 +29,27 @@ protected override void LoadComplete() | |||
base.LoadComplete(); | |||
|
|||
room.PropertyChanged += onRoomPropertyChanged; | |||
|
|||
Scheduler.AddDelayed(updateRoomStatus, 5000, true); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Just to confirm intent - are these schedules supposed to handle the passage of time in relation to EndDate
in order to correctly transition to ended state?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Correct. I thought of doing something similar to DrawableDate
with a dynamic reschedule time but I don't think this needs to be accurate. Maybe in the future this will be messaged from the multiplayer server anyway...
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think this is a bit weird.
Depending on the load time of individual components, the 5 second poll may occur at different times, causing some elements to update at different times, even on the same room display.
I don't have an immediate better solution in mind though.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
In general I expect these schedules to be triggered on the same frame for the same DrawableRoom
. For different DrawableRooms
- sure they can trigger at different times, but they're created at different times anyway so I don't see that as an issue.
As I said the future solution here is realtime updates from the multiplayer server.
@@ -29,18 +29,27 @@ protected override void LoadComplete() | |||
base.LoadComplete(); | |||
|
|||
room.PropertyChanged += onRoomPropertyChanged; | |||
|
|||
Scheduler.AddDelayed(updateRoomStatus, 5000, true); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think this is a bit weird.
Depending on the load time of individual components, the 5 second poll may occur at different times, causing some elements to update at different times, even on the same room display.
I don't have an immediate better solution in mind though.
osu.Game/Graphics/OsuColour.cs
Outdated
/// </summary> | ||
public Color4 ForRoomStatus(Room room) | ||
{ | ||
if (DateTimeOffset.Now >= room.EndDate) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Having this logic in OsuColour
also weirds me out a bit. Maybe it's fine, but it's not really where I'd expect to find a date check.
Maybe it'll feel better if moved to a property on Room
?
if (room.HasEnded)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It's a bit of a weird one because it needs to be queried periodically. But okay I'll do this for now as a pure code quality improvement.
Prereqs:
Room
model #30830Aside from refactoring the weirdness that is the existing
RoomStatus
abstract class and deserialisation process, it also makes thePlaying
state work in the lounge which is a missing feature from osu!stable.2024-11-22.20-58-07.mp4