smoogipoo
bb44fcfe31
Prevent some data races
2021-01-25 21:01:39 +09:00
smoogipoo
964976f604
Use a task chain and fix potential misordering of events
2021-01-25 21:01:39 +09:00
Dean Herbert
0f09a7feb9
Avoid semaphore potentially getting held forever
2021-01-25 17:17:04 +09:00
Dean Herbert
994fb2667d
Call DisposeAsync instead of StopAsync
2021-01-25 17:11:04 +09:00
Dean Herbert
c05ae3497a
Make connect/disconnect private
2021-01-25 17:02:24 +09:00
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
Dan Balasescu
76e1f6e57b
Fix locking on incorrect object
...
Co-authored-by: Bartłomiej Dach <dach.bartlomiej@gmail.com>
2021-01-21 12:45:44 +09:00
smoogipoo
6b139d4cf3
Reset task post-execution
2021-01-20 20:27:58 +09:00
smoogipoo
e005a1cc9f
Remove unnecessary condition blocking the part
2021-01-20 20:16:34 +09:00
smoogipoo
5261c01849
Tie JoinRoom() and PartRoom() together
2021-01-20 19:43:42 +09:00
Salman Ahmed
88abee705b
Add missing event mapping for user beatmap availability change
2021-01-18 10:49:02 +03: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
smoogipoo
f599427080
Implement TimeshiftFilterControl
2020-12-07 22:04:35 +09:00
Dean Herbert
3550e5b30f
Add length display to room screen as well
2020-12-03 16:42:06 +09:00
Dean Herbert
6d22f0e196
Use existing copy method and update xmldoc
2020-10-19 17:15:13 +09:00
Dean Herbert
61a43770bd
Merge branch 'master' into duplicate-multi-room
2020-10-19 16:58:45 +09:00
smoogipoo
9e3b809cab
Rename to user_score to match API
2020-09-01 15:42:47 +09:00
smoogipoo
77698ec31e
Add support for showing own top score in timeshift
2020-08-31 19:54:57 +09:00
smoogipoo
d1ceb81797
Rename request
2020-08-31 19:54:41 +09:00
voidedWarranties
9e4b9188e1
Cache LoungeSubScreen, separate method, rename option
2020-08-15 13:06:16 -07:00
voidedWarranties
3a97ee4712
Context menu for duplicating multi rooms
2020-08-09 16:16:01 -07:00
Dan Balasescu
d63f040477
Merge branch 'master' into multi-position
2020-07-31 23:10:25 +09:00
Dean Herbert
909b38a019
Merge branch 'master' into multi-pagination
2020-07-31 22:41:24 +09:00
smoogipoo
b361761d86
Add position display in contracted score panels
2020-07-31 22:02:25 +09:00
smoogipoo
f1e721e396
Rewrite test scene and add more tests
2020-07-31 21:39:50 +09:00
smoogipoo
2b77f99f56
Initialise some response parameters
2020-07-31 20:55:44 +09:00
smoogipoo
eadef53e68
Add more annotations
2020-07-31 17:43:40 +09:00
smoogipoo
88e179d8aa
Split out index-only response
2020-07-31 17:40:58 +09:00
Dean Herbert
9e6d562872
Send in initial score request instead
2020-07-29 13:18:40 +09:00
smoogipoo
ccc377ae6a
Remove unused enum
2020-07-28 21:45:12 +09:00
smoogipoo
db91d1de50
Use response params in next page request
2020-07-28 21:45:12 +09:00
smoogipoo
b7790de66f
Fix incorrect sort param
2020-07-22 20:24:48 +09:00
smoogipoo
568fb51ce2
Remove RoomPlaylistScores intermediate class
2020-07-22 20:24:42 +09:00
smoogipoo
f8401a76a2
Use show/index requests in results screen
2020-07-22 19:40:00 +09:00
smoogipoo
334fb7d475
Add additional params to index request
2020-07-22 18:54:41 +09:00
smoogipoo
c75955e381
Add responses to MultiplayerScore
2020-07-22 18:52:25 +09:00
smoogipoo
634efe31f8
Inherit ResponseWithCursor
2020-07-22 18:51:54 +09:00
smoogipoo
ec33a6ea87
Add additional responses
2020-07-22 18:47:40 +09:00
smoogipoo
d9633fee64
Rename request
2020-07-22 18:47:09 +09:00
smoogipoo
e423630b7c
Rename RoomScore -> MultiplayerScore
2020-07-22 18:37:00 +09:00
smoogipoo
0957c5f74c
Re-namespace multiplayer requests/responses
2020-07-22 18:34:04 +09:00
Dean Herbert
64e8dce1ad
Highlight spotlight rooms with a different colour
2020-07-10 19:38:33 +09:00
smoogipoo
1bcd673a55
Fix crash when switching rooms quickly
2020-07-10 12:09:34 +09:00
smoogipoo
1ccdfd7364
Pull playlist beatmap checksum from api
2020-06-02 14:03:13 +09:00
Dean Herbert
276f6da483
Merge branch 'master' into better-room-participants
2020-02-28 16:42:31 +09:00
smoogipoo
085968dd7f
Rename recent participants
2020-02-27 20:00:53 +09:00
smoogipoo
97c07281d8
Make ParticipantsList use the new participants property
2020-02-27 19:24:13 +09:00
smoogipoo
3f5c4633bc
Remove workarounds for CreateRoomRequest shortcomings
2020-02-27 16:41:00 +09:00
smoogipoo
c8b81bcf3c
Use equality comparison rather than hash set
2020-02-16 16:23:46 +09:00
smoogipoo
17e3470441
Replace hashcode override with local equality comparer
2020-02-16 00:23:52 +09:00
Dean Herbert
d0122b935e
Transfer metadata to ensure present on creating a new match
2020-02-15 19:40:59 +09:00
Dean Herbert
e181a95c85
Remove unused using
2020-02-13 22:28:37 +09:00