@@ -145,7 +145,7 @@ public void RemoveUser(APIUser user)
145145 {
146146 Debug . Assert ( ServerRoom != null ) ;
147147
148- ServerRoom . Users . Remove ( ServerRoom . Users . FirstOrDefault ( u => u . UserID == user . Id ) ) ;
148+ ServerRoom . Users . Remove ( ServerRoom . Users . First ( u => u . UserID == user . Id ) ) ;
149149 ( ( IMultiplayerClient ) this ) . UserLeft ( clone ( new MultiplayerRoomUser ( user . Id ) ) ) ;
150150
151151 if ( ServerRoom . Users . Any ( ) )
@@ -165,7 +165,7 @@ public void ChangeUserState(int userId, MultiplayerUserState newState)
165165 {
166166 Debug . Assert ( ServerRoom != null ) ;
167167
168- var user = ServerRoom . Users . FirstOrDefault ( u => u . UserID == userId ) ;
168+ var user = ServerRoom . Users . First ( u => u . UserID == userId ) ;
169169 user . State = clone ( newState ) ;
170170
171171 ( ( IMultiplayerClient ) this ) . UserStateChanged ( clone ( userId ) , clone ( user . State ) ) ;
@@ -224,7 +224,7 @@ public void ChangeUserBeatmapAvailability(int userId, BeatmapAvailability newBea
224224 {
225225 Debug . Assert ( ServerRoom != null ) ;
226226
227- var user = ServerRoom . Users . FirstOrDefault ( u => u . UserID == userId ) ;
227+ var user = ServerRoom . Users . First ( u => u . UserID == userId ) ;
228228 user . BeatmapAvailability = newBeatmapAvailability ;
229229
230230 ( ( IMultiplayerClient ) this ) . UserBeatmapAvailabilityChanged ( clone ( userId ) , clone ( user . BeatmapAvailability ) ) ;
@@ -238,7 +238,7 @@ protected override async Task<MultiplayerRoom> JoinRoomInternal(long roomId, str
238238 roomId = clone ( roomId ) ;
239239 password = clone ( password ) ;
240240
241- ServerAPIRoom = ServerSideRooms . FirstOrDefault ( r => r . RoomID == roomId ) ;
241+ ServerAPIRoom = ServerSideRooms . First ( r => r . RoomID == roomId ) ;
242242
243243 if ( password != ServerAPIRoom . Password )
244244 throw new InvalidOperationException ( "Invalid password." ) ;
@@ -301,7 +301,7 @@ public override Task TransferHost(int userId)
301301
302302 Debug . Assert ( ServerRoom != null ) ;
303303
304- ServerRoom . Host = ServerRoom . Users . FirstOrDefault ( u => u . UserID == userId ) ;
304+ ServerRoom . Host = ServerRoom . Users . First ( u => u . UserID == userId ) ;
305305
306306 return ( ( IMultiplayerClient ) this ) . HostChanged ( clone ( userId ) ) ;
307307 }
@@ -312,7 +312,7 @@ public override Task KickUser(int userId)
312312
313313 Debug . Assert ( ServerRoom != null ) ;
314314
315- var user = ServerRoom . Users . FirstOrDefault ( u => u . UserID == userId ) ;
315+ var user = ServerRoom . Users . First ( u => u . UserID == userId ) ;
316316 ServerRoom . Users . Remove ( user ) ;
317317
318318 return ( ( IMultiplayerClient ) this ) . UserKicked ( clone ( user ) ) ;
@@ -377,7 +377,7 @@ public void ChangeUserStyle(int userId, int? beatmapId, int? rulesetId)
377377 {
378378 Debug . Assert ( ServerRoom != null ) ;
379379
380- var user = ServerRoom . Users . FirstOrDefault ( u => u . UserID == userId ) ;
380+ var user = ServerRoom . Users . First ( u => u . UserID == userId ) ;
381381 user . BeatmapId = beatmapId ;
382382 user . RulesetId = rulesetId ;
383383
@@ -391,7 +391,7 @@ public void ChangeUserMods(int userId, IEnumerable<APIMod> newMods)
391391 {
392392 Debug . Assert ( ServerRoom != null ) ;
393393
394- var user = ServerRoom . Users . FirstOrDefault ( u => u . UserID == userId ) ;
394+ var user = ServerRoom . Users . First ( u => u . UserID == userId ) ;
395395 user . Mods = newMods . ToArray ( ) ;
396396
397397 ( ( IMultiplayerClient ) this ) . UserModsChanged ( clone ( userId ) , clone ( user . Mods ) ) ;
@@ -810,41 +810,30 @@ private async Task updatePlaylistOrder(MultiplayerRoom room)
810810
811811 // Also ensure that the API room's playlist is correct.
812812 foreach ( var item in ServerAPIRoom . Playlist )
813- item . PlaylistOrder = ServerRoom . Playlist . FirstOrDefault ( i => i . ID == item . ID ) ?? new MultiplayerPlaylistItem { ID = item . ID } . PlaylistOrder ;
813+ item . PlaylistOrder = ( ServerRoom . Playlist . FirstOrDefault ( i => i . ID == item . ID ) ?? new MultiplayerPlaylistItem { ID = item . ID } ) . PlaylistOrder ;
814814 }
815815
816816 private T clone < T > ( T incoming )
817817 {
818818 byte [ ] serialized = MessagePackSerializer . Serialize ( typeof ( T ) , incoming , SignalRUnionWorkaroundResolver . OPTIONS ) ;
819819 var result = MessagePackSerializer . Deserialize < T > ( serialized , SignalRUnionWorkaroundResolver . OPTIONS ) ;
820- if ( incoming is MultiplayerRoomUser { User : { } } sourceUser && result is MultiplayerRoomUser targetUser ) targetUser . User = sourceUser . User ;
821820
822- if ( incoming is MultiplayerRoom sourceRoom && result is MultiplayerRoom targetRoom )
821+ if ( incoming is MultiplayerRoomUser sourceUser && result is MultiplayerRoomUser targetUser )
822+ {
823+ targetUser . User = sourceUser . User ;
824+ }
825+ else if ( incoming is MultiplayerRoom sourceRoom && result is MultiplayerRoom targetRoom )
823826 {
824827 for ( int i = 0 ; i < sourceRoom . Users . Count ; i ++ )
825828 {
826- if ( sourceRoom . Users [ i ] . User != null )
829+ if ( i < targetRoom . Users . Count )
827830 targetRoom . Users [ i ] . User = sourceRoom . Users [ i ] . User ;
828831 }
829832
830- if ( sourceRoom . Host ? . User != null )
833+ if ( targetRoom . Host != null && sourceRoom . Host != null )
831834 targetRoom . Host . User = sourceRoom . Host . User ;
832835 }
833836
834- if ( incoming is MultiplayerRoomUser { User : { } } sourceUser && result is MultiplayerRoomUser targetUser ) targetUser . User = sourceUser . User ;
835-
836- if ( incoming is MultiplayerRoom sourceRoom && result is MultiplayerRoom targetRoom )
837- {
838- foreach ( var user in targetRoom . Users )
839- user . User = sourceRoom . Users . FirstOrDefault ( u => u . UserID == user . UserID ) ? . User ;
840-
841- targetRoom . Host ? . User = sourceRoom . Host ? . User ;
842- }
843- else if ( incoming is MultiplayerRoomUser sourceSingleUser && result is MultiplayerRoomUser targetSingleUser )
844- {
845- targetSingleUser . User = sourceSingleUser . User ;
846- }
847-
848837 return result ;
849838 }
850839
0 commit comments