1
0
mirror of https://github.com/ppy/osu.git synced 2024-12-16 15:02:55 +08:00
Commit Graph

377 Commits

Author SHA1 Message Date
Bartłomiej Dach
4d4d97661e Fix connection loop always getting a cancelled token 2021-01-26 21:26:50 +01:00
smoogipoo
248989b3eb wip 2021-01-27 01:20:50 +09:00
smoogipoo
085115cba5 Make threading even more thread safe 2021-01-26 22:49:01 +09:00
Dean Herbert
b573c96c07 Move disconnect logic inside connection loop to ensure previous connection is disposed 2021-01-26 18:59:42 +09:00
Dean Herbert
15885c17af Remove unused usings 2021-01-26 18:07:43 +09:00
Dean Herbert
20cfa991bf Switch clients to MessagePack mode 2021-01-26 17:41:21 +09:00
Dean Herbert
e4fc604163 Setup all multiplayer model classes for MessagePack support 2021-01-26 16:26:03 +09:00
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
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
DrabWeb
59762c0393 Change Room.Participants to an IEnumerable. 2018-06-01 06:15:23 -03:00
DrabWeb
3915cb7f2f Add Match Participants, change Room.Users to IEnumerable. 2018-05-29 02:42:52 -03:00
DrabWeb
f7a4a4eeef Add Lounge FilterControl. 2018-05-22 00:24:39 -03:00
Dean Herbert
32a74f95a5 Normalize all the line endings 2018-04-13 18:26:38 +09:00
Dean Herbert
37d393bca0 Update licence headers 2018-01-05 20:21:19 +09:00
Dean Herbert
4f6263ef86 Make many internal classes and methods public
This is important when using dynamic compiling to rapidly iterate. Until we actually split projects out into pieces (like the abstract ruleset project we have talked about) there is no advantage to using internal in the osu! game code.
2017-11-21 12:06:16 +09:00
Dean Herbert
0d9ea97828 Allow Rulesets to create a non-FontAwesome icon
This also
- Renames TextAwesome to SpriteIcon.
- Removes the default size of "20" from SpriteIcon (now defaults to the underlying texture size).
2017-08-03 14:36:21 +09:00
Dean Herbert
fce580d717 Reshuffle namespaces 2017-07-26 13:22:46 +09:00
DrabWeb
fe875957a7 Share ruleset and type displaying, fix tag team icon. 2017-06-24 05:43:52 -03:00
Dean Herbert
81de1bd5a7 Merge branch 'master' into multiplayer-room-inspector 2017-06-23 21:55:18 +09:00
DrabWeb
a483422b44 CI fixes 2017-05-30 22:23:00 -03:00
DrabWeb
9e01074852 Add GameType and DrawableGameType 2017-05-30 21:41:20 -03:00
DrabWeb
3aa1f35127 Basic layout 2017-05-30 05:12:11 -03:00
DrabWeb
9798117d53 Move RoomStatus to a class instead of enum 2017-05-22 21:13:57 -03:00
DrabWeb
25b457e994 Proper Bindable usage 2017-05-22 13:05:18 -03:00
DrabWeb
65df2d2b70 MultiplayerRoomStatus -> RoomStatus 2017-05-22 12:46:41 -03:00
DrabWeb
2c16d9c3a7 CurrentBeatmap -> Beatmap 2017-05-22 12:45:40 -03:00
DrabWeb
03f6cded84 MultiplayerRoom -> Room 2017-05-22 12:44:58 -03:00
DrabWeb
e5ee7096f8 Initial cleanup 2017-05-22 00:07:15 -03:00