1
0
mirror of https://github.com/ppy/osu.git synced 2024-11-19 11:32:55 +08:00
osu-lazer/osu.Game/Tests/Visual/Multiplayer/TestMultiplayerRoomManager.cs

123 lines
4.6 KiB
C#
Raw Normal View History

2020-12-19 00:17:24 +08:00
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
// See the LICENCE file in the repository root for full licence text.
using System;
using System.Collections.Generic;
2020-12-19 00:22:52 +08:00
using System.Linq;
2020-12-19 00:17:24 +08:00
using osu.Framework.Allocation;
using osu.Framework.Bindables;
2020-12-19 00:17:24 +08:00
using osu.Game.Online.API;
using osu.Game.Online.API.Requests;
2020-12-25 12:38:11 +08:00
using osu.Game.Online.Rooms;
2020-12-19 00:17:24 +08:00
using osu.Game.Rulesets.Scoring;
using osu.Game.Scoring;
using osu.Game.Screens.OnlinePlay.Lounge.Components;
using osu.Game.Screens.OnlinePlay.Multiplayer;
2020-12-19 00:17:24 +08:00
2020-12-25 12:38:11 +08:00
namespace osu.Game.Tests.Visual.Multiplayer
2020-12-19 00:17:24 +08:00
{
2020-12-25 12:38:11 +08:00
public class TestMultiplayerRoomManager : MultiplayerRoomManager
2020-12-19 00:17:24 +08:00
{
[Resolved]
private IAPIProvider api { get; set; }
[Resolved]
private OsuGameBase game { get; set; }
[Cached]
public readonly Bindable<FilterCriteria> Filter = new Bindable<FilterCriteria>(new FilterCriteria());
2021-03-03 18:40:19 +08:00
public new readonly List<Room> Rooms = new List<Room>();
2020-12-19 00:17:24 +08:00
protected override void LoadComplete()
{
base.LoadComplete();
int currentScoreId = 0;
int currentRoomId = 0;
int currentPlaylistItemId = 0;
2020-12-19 00:17:24 +08:00
((DummyAPIAccess)api).HandleRequest = req =>
{
switch (req)
{
case CreateRoomRequest createRoomRequest:
var createdRoom = new APICreatedRoom();
createdRoom.CopyFrom(createRoomRequest.Room);
createdRoom.RoomID.Value ??= currentRoomId++;
2020-12-19 00:17:24 +08:00
for (int i = 0; i < createdRoom.Playlist.Count; i++)
createdRoom.Playlist[i].ID = currentPlaylistItemId++;
2021-03-03 18:40:19 +08:00
Rooms.Add(createdRoom);
2020-12-19 00:17:24 +08:00
createRoomRequest.TriggerSuccess(createdRoom);
return true;
2020-12-19 00:17:24 +08:00
case JoinRoomRequest joinRoomRequest:
joinRoomRequest.TriggerSuccess();
return true;
2020-12-19 00:17:24 +08:00
case PartRoomRequest partRoomRequest:
partRoomRequest.TriggerSuccess();
return true;
2020-12-19 00:17:24 +08:00
case GetRoomsRequest getRoomsRequest:
2020-12-19 00:22:52 +08:00
var roomsWithoutParticipants = new List<Room>();
2021-03-03 18:40:19 +08:00
foreach (var r in Rooms)
2020-12-19 00:22:52 +08:00
{
var newRoom = new Room();
newRoom.CopyFrom(r);
newRoom.RecentParticipants.Clear();
roomsWithoutParticipants.Add(newRoom);
}
getRoomsRequest.TriggerSuccess(roomsWithoutParticipants);
return true;
2020-12-19 00:22:52 +08:00
case GetRoomRequest getRoomRequest:
2021-03-03 18:40:19 +08:00
getRoomRequest.TriggerSuccess(Rooms.Single(r => r.RoomID.Value == getRoomRequest.RoomId));
return true;
2020-12-19 00:17:24 +08:00
case GetBeatmapSetRequest getBeatmapSetRequest:
var onlineReq = new GetBeatmapSetRequest(getBeatmapSetRequest.ID, getBeatmapSetRequest.Type);
onlineReq.Success += res => getBeatmapSetRequest.TriggerSuccess(res);
onlineReq.Failure += e => getBeatmapSetRequest.TriggerFailure(e);
// Get the online API from the game's dependencies.
game.Dependencies.Get<IAPIProvider>().Queue(onlineReq);
return true;
2020-12-19 00:17:24 +08:00
case CreateRoomScoreRequest createRoomScoreRequest:
createRoomScoreRequest.TriggerSuccess(new APIScoreToken { ID = 1 });
return true;
2020-12-19 00:17:24 +08:00
case SubmitRoomScoreRequest submitRoomScoreRequest:
submitRoomScoreRequest.TriggerSuccess(new MultiplayerScore
{
ID = currentScoreId++,
Accuracy = 1,
EndedAt = DateTimeOffset.Now,
Passed = true,
Rank = ScoreRank.S,
MaxCombo = 1000,
TotalScore = 1000000,
User = api.LocalUser.Value,
Statistics = new Dictionary<HitResult, int>()
});
return true;
2020-12-19 00:17:24 +08:00
}
return false;
2020-12-19 00:17:24 +08:00
};
}
public new void ClearRooms() => base.ClearRooms();
2020-12-19 00:17:24 +08:00
public new void Schedule(Action action) => base.Schedule(action);
}
}