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
Dean Herbert
4a04b434a9
Merge branch 'master' into remove-current-item
2020-02-13 21:41:23 +09:00
Dean Herbert
28ca1a5bcc
Merge branch 'master' into participants-bindable
2020-02-13 19:31:50 +09:00
smoogipoo
bce9c8f3f3
Make room participants into a bindable list
2020-02-13 18:59:15 +09:00
smoogipoo
75bef15583
Remove "current" multiplayer room item
2020-02-13 18:48:28 +09:00
smoogipoo
91edadfe9d
Make playlist beatmap and ruleset into bindables
2020-02-13 18:12:47 +09:00
smoogipoo
2bc7458abf
Add mod setting (de)serialization support
2020-01-17 13:27:47 +09:00
Dean Herbert
77b9989e11
Fix some weird private field names
2019-12-11 14:10:35 +09:00
Dean Herbert
f1952c0816
Update font awesome usage
2019-04-02 19:55:24 +09:00
Dean Herbert
de80fc0eac
Update icon usage to match framework changes
2019-03-27 19:29:27 +09:00
Jamie Taylor
ee076bbbe3
Fix chat channel ids not being updated on room creation
2019-03-07 15:35:57 +09:00
smoogipoo
d8c55bc729
Adjust namespaces
2019-02-21 19:05:52 +09:00
smoogipoo
bca347427f
Update with framework bindable changes
2019-02-21 18:56:34 +09:00
Dean Herbert
e57409fe41
Remove unnecessary bindable properties on mod lists
2019-02-12 10:51:39 +09:00
Dean Herbert
88ffc78103
Restructure
2019-02-11 19:11:34 +09:00
smoogipoo
aac371ba6e
Use CMC for all of multiplayer
2019-02-05 19:00:08 +09:00
smoogipoo
d9537017c8
Use CMC in the Multiplayer screen
2019-02-05 16:03:05 +09:00
Dean Herbert
8617aaa2a7
Update licence header (and remove year)
2019-01-24 17:43:03 +09:00
Dean Herbert
f6018294b5
Update framework
2019-01-07 18:50:27 +09:00
smoogipoo
a7db0bbb91
Sort rooms based on their API position
2018-12-28 01:45:19 +09:00
smoogipoo
8e031325dd
CI fixes
2018-12-27 16:28:17 +09:00
smoogipoo
a3b6a3981c
Use .Equals() override instead of manual type checks
2018-12-27 16:19:00 +09:00
smoogipoo
1e71c5c9c4
Add + set ended room status
2018-12-27 13:32:44 +09:00
Dean Herbert
6b7b0af2e4
Temporary fix for participant count being nullable
2018-12-26 22:25:15 +09:00
smoogipoo
e7310a16c7
Fix playlist not updating correcly
2018-12-26 22:14:49 +09:00
Dean Herbert
a1fa914c66
Participants
2018-12-26 21:58:14 +09:00
Dean Herbert
f442e59620
Icon and beatmap title visual pass
2018-12-26 18:01:53 +09:00
Dean Herbert
c6c8c472bb
Split class out
2018-12-26 16:50:50 +09:00
Dean Herbert
9b2575cc20
RoomSettingsOverlay -> MatchSettingOverlay
2018-12-26 16:50:50 +09:00
smoogipoo
6a5f0eca18
Fix various elements flashing
2018-12-25 18:07:50 +09:00
smoogipoo
fa2bc16140
Remove participants, add match chat
2018-12-21 14:01:11 +09:00
smoogipoo
e27b7b0c0d
Cleanup
2018-12-21 13:06:11 +09:00
smoogipoo
a8d88dea3b
Display time remaining in the room
2018-12-19 13:07:56 +09:00
smoogipoo
2c000a9a1d
Disallow starting gameplay if there's not enough time in the room
2018-12-19 10:52:15 +09:00
smoogipoo
7c4fd8ca60
Cleanup room definition
2018-12-17 14:46:43 +09:00
smoogipoo
cc68cf2f95
Implement duration
2018-12-17 14:44:54 +09:00
smoogipoo
2fd2425cc4
Fix playlist deserialisation for creating rooms
2018-12-17 11:05:03 +09:00
smoogipoo
9726eea0d0
Basic score submission implementation
2018-12-14 21:09:17 +09:00
smoogipoo
680a3e2aa4
Update with proper playlist usage
2018-12-13 18:38:03 +09:00
smoogipoo
264bd0e2aa
Fix invalid room values
2018-12-13 16:06:30 +09:00
smoogipoo
bac4f42eac
Fix backgrounds not quite working
2018-12-12 19:34:37 +09:00
smoogipoo
450e4cd223
Hook up API
2018-12-12 19:04:11 +09:00
smoogipoo
6123a11b67
Use RoomID for creation
2018-12-12 16:20:11 +09:00
smoogipoo
439d741dee
Implement basic api structure for rooms
2018-12-12 16:06:56 +09:00
smoogipoo
77193eeea4
Move from lobby into match for creation process
2018-12-10 18:00:57 +09:00
smoogipoo
e7d7e00516
Better disabling of various controls
2018-12-05 17:01:14 +09:00
smoogipoo
ec83790734
Add timeshift game type
2018-12-04 18:58:45 +09:00
smoogipoo
e22cefc27d
Immediately select newly-created rooms
2018-12-04 12:49:22 +09:00
smoogipoo
6a28e8c696
Add settings to lounge
2018-12-03 18:30:26 +09:00
smoogipoo
dcf740e5d3
Merge remote-tracking branch 'origin/master' into multiplayer-room-settings
2018-11-26 16:27:22 +09:00
smoogipoo
f27bd3ef3e
OpenTK -> osuTK
2018-11-20 17:14:59 +09:00
DrabWeb
93b61840c8
Compare GameTypes by type instead of reference.
2018-06-06 04:25:11 -03:00