1
0
mirror of https://github.com/ppy/osu.git synced 2024-09-24 20:07:25 +08:00
Commit Graph

160 Commits

Author SHA1 Message Date
Dean Herbert
d24d236468 Make OperationCanceledException throwing behaviour consistent 2021-01-22 14:34:58 +09:00
Dean Herbert
9f89b4e6d7 Rewrite connection logic to better handle failure cases
The main goal here is to ensure the connection is built each connection
attempt. Previously, the access token would never be updated, leading to
outdated tokens failing repeatedly (in the connection retry loop) and
never being able to establish a new connection as a result.

Due to threading considerations, this isn't as simple as I would hope it
to be. I'm open to proposals as to a better way of handling this.

Also, keep in mind that this logic will need to be abstracted and
(re)used in `SpectatorClient` as well. I've intentionally not done that
yet until we agree that this is a good direction forward.
2021-01-22 14:25:23 +09:00
Bartłomiej Dach
eb53e32792 Use task completion source for room join flow
On Android, users were unable to join or create multiplayer rooms. The
root cause of that was that the both the wait and set of the
`ManualResetEvent` in `getRoomUsers` occurred on the same thread, which
created a chicken-and-egg situation - the set could not proceed until
the wait had actually completed.

Resolve by substituting the `ManualResetEvent` for a
`TaskCompletionSource` to achieve a promise-style task, which the
previous code was a crude approximation of anyway.

Closes #11385.
2021-01-17 14:40:22 +01:00
Dan Balasescu
67b5ebadf5
Merge branch 'master' into fix-is-connected-thread-safety 2021-01-15 12:56:21 +09:00
Salman Ahmed
560b1e970c
Merge branch 'master' into user-beatmap-downloading-states 2021-01-13 22:31:31 +03:00
Dean Herbert
7298adc9d9 Fix non-threadsafe usage of MultiplayerClient.IsConnected 2021-01-12 19:04:16 +09:00
Bartłomiej Dach
0d5fbb15ac Fix up code comments
Default value restated in xmldoc was snipped because it's made redundant
by the initialiser and possibly bound to be outdated at some point.
2021-01-11 20:31:52 +01:00
Salman Ahmed
90fb67b377 Update code in-line with decided direction 2021-01-11 20:52:24 +03:00
Dean Herbert
deb1ad7bca
Merge branch 'master' into disable-repeat-multi-actions 2021-01-04 23:38:29 +09:00
Salman Ahmed
839f5a7570 Ensure clients don't blow up when given user isn't in room 2021-01-03 18:36:37 +03:00
Salman Ahmed
152e9ecccf Make BeatmapAvailability class in-line with other online data structures 2021-01-03 18:36:05 +03:00
Salman Ahmed
dfa8be9173 Add beatmap availability change state & event methods 2021-01-03 05:48:49 +03:00
Salman Ahmed
09e5e2629a Add user beatmap availability property 2021-01-03 05:48:49 +03:00
Bartłomiej Dach
9ab1091281
Merge branch 'master' into fix-signalr-reconnect 2021-01-02 13:18:02 +01:00
Dean Herbert
72a6ca7755 Allow signalr to retry connecting when connection is closed without an exception 2021-01-02 16:47:00 +09:00
Bartłomiej Dach
f800448c87 Move game start logic to a higher level 2020-12-30 18:15:48 +01:00
Bartłomiej Dach
dd87478690 Add helper IsHost property to Client 2020-12-30 16:29:19 +01:00
Dean Herbert
497d644a19 Move thread safety / locking logic from MultiplayerRoom 2020-12-30 20:24:50 +09:00
Dean Herbert
3920dac8af Merge branch 'master' into fix-error-spam-on-disconnection 2020-12-30 00:55:37 +09:00
Dean Herbert
6bbd0ecfac Remove unused lock object 2020-12-29 17:39:00 +09:00
Bartłomiej Dach
e9b0652359 Move ready-up operation logic again to client
To salvage ready up button tests.
2020-12-29 09:16:02 +01:00
Bartłomiej Dach
903dca875e Make localUser a client property 2020-12-29 07:46:22 +01:00
Dean Herbert
2cb84c5111 Fix error message being shown to user on multiplayer disconnection when not in room 2020-12-29 15:19:52 +09:00
Dean Herbert
f31a0e455a Minor xmldoc rewording 2020-12-29 14:29:40 +09:00
Dean Herbert
e3a41f6118 Rename variable to make more sense
It needs to be explicitly stated that the users in this list are related
to the *joined* room. Especially since it's sharing its variable name
with `SpectatorStreamingClient` where it has the opposite meaning (is a
list of *globally* playing players).
2020-12-29 14:27:35 +09:00
Dean Herbert
6aeb7ece66 Tidy up update state code, naming, xmldoc 2020-12-29 14:25:08 +09:00
Bartłomiej Dach
1d311a6680 Change PlayingUsers population logic to match expectations 2020-12-28 19:27:56 +01:00
Bartłomiej Dach
b059b5d616 Merge branch 'master' into fix-ready-button-crash 2020-12-26 12:41:47 +01:00
Bartłomiej Dach
04d54c40db Allow all StatefulMultiplayerClient schedules to run inline
Fixes test failures due to not allowing to do so, therefore inverting
execution order in some cases - for example, calling

        JoinRoom(room);
        LeaveRoom();

on the update thread would invert execution order due to the first being
unscheduled but the second being scheduled.
2020-12-26 12:04:10 +01:00
Bartłomiej Dach
dae27fefe4 Run user list copy inline if possible
`getRoomUsers()` was not safe to call from the update thread, as
evidenced by the test failures. This was due to the fact that the added
reset event could never actually be set from within the method, as the
wait was blocking the scheduled set from ever proceeding.

Resolve by allowing the scheduled copy & set to run inline if on the
update thread already.
2020-12-26 12:03:03 +01:00
Dean Herbert
f9900720d5 Rename OnRoomChanged to OnRoomUpdated to avoid confusion 2020-12-26 10:49:02 +09:00
Dean Herbert
5ce5b6cec0 Fix non-safe thread access to room users on room join 2020-12-26 10:25:16 +09:00
Dean Herbert
e0198c36ae Fix user population happening in single file 2020-12-26 09:48:13 +09:00
Dean Herbert
5d4b73baa5 RealtimeMultiplayer -> Multiplayer 2020-12-25 14:10:59 +09:00
Dean Herbert
a1384942b1 Timeshift -> Playlists at a code level 2020-12-25 13:11:21 +09:00
smoogipoo
c07b2d89e6 Merge branch 'master' into realtime-multiplayer-2 2020-12-21 18:44:03 +09:00
Dean Herbert
44af32dc47
Merge pull request #11234 from smoogipoo/fix-category-serialisation
Fix room category being serialised as int
2020-12-21 18:03:10 +09:00
Dean Herbert
5ec64c0348
Merge pull request #11232 from smoogipoo/participant-count-serialisation
Make participant count non-nullable
2020-12-21 17:34:01 +09:00
smoogipoo
04af072da7 Merge branch 'fix-category-serialisation' into realtime-multiplayer-2 2020-12-21 16:57:22 +09:00
smoogipoo
e23d81bfc6 Use enum property 2020-12-21 16:56:45 +09:00
smoogipoo
a021aaf546 Fix room category being serialised as ints 2020-12-21 16:42:21 +09:00
smoogipoo
5d73359bd7 Make participant count non-nullable 2020-12-21 16:35:19 +09:00
smoogipoo
64a32723f3 One more case 2020-12-21 16:23:42 +09:00
smoogipoo
14ea49a14d Merge branch 'nullable-endsat' into realtime-multiplayer-2 2020-12-21 16:22:16 +09:00
smoogipoo
a59124dd93 Make room duration/endsat nullable 2020-12-21 16:18:39 +09:00
smoogipoo
536df074a9 Don't attempt to re-map existing beatmap/ruleset (for testing) 2020-12-21 00:02:49 +09:00
smoogipoo
2fc5561b7e Add handling for GetRoomRequest() 2020-12-19 01:22:52 +09:00
smoogipoo
c6555c53cc Add a testable realtime room manager 2020-12-19 01:17:24 +09:00
Dean Herbert
ef57ae6f40
Merge pull request #11127 from peppy/realtime-multiplayer
Add client-side models and interfaces required for multiplayer
2020-12-16 13:22:01 +09:00
Dean Herbert
c1c0b9a9db Add realtime to room categories 2020-12-11 14:10:45 +09:00