mirror of
https://github.com/ppy/osu.git
synced 2025-02-05 02:03:04 +08:00
Handle beatmap lookup requests in TestRoomRequestsHandler
This commit is contained in:
parent
a5183cec77
commit
ccd265ebe7
@ -5,6 +5,7 @@ using osu.Framework.Allocation;
|
|||||||
using osu.Framework.Graphics;
|
using osu.Framework.Graphics;
|
||||||
using osu.Framework.Screens;
|
using osu.Framework.Screens;
|
||||||
using osu.Game.Database;
|
using osu.Game.Database;
|
||||||
|
using osu.Game.Beatmaps;
|
||||||
using osu.Game.Online.API;
|
using osu.Game.Online.API;
|
||||||
using osu.Game.Online.Multiplayer;
|
using osu.Game.Online.Multiplayer;
|
||||||
using osu.Game.Screens;
|
using osu.Game.Screens;
|
||||||
@ -46,6 +47,9 @@ namespace osu.Game.Tests.Visual
|
|||||||
[Cached]
|
[Cached]
|
||||||
private readonly BeatmapLookupCache beatmapLookupCache = new BeatmapLookupCache();
|
private readonly BeatmapLookupCache beatmapLookupCache = new BeatmapLookupCache();
|
||||||
|
|
||||||
|
[Resolved]
|
||||||
|
private BeatmapManager beatmapManager { get; set; }
|
||||||
|
|
||||||
private readonly OsuScreenStack screenStack;
|
private readonly OsuScreenStack screenStack;
|
||||||
private readonly TestMultiplayer multiplayerScreen;
|
private readonly TestMultiplayer multiplayerScreen;
|
||||||
|
|
||||||
@ -69,9 +73,9 @@ namespace osu.Game.Tests.Visual
|
|||||||
}
|
}
|
||||||
|
|
||||||
[BackgroundDependencyLoader]
|
[BackgroundDependencyLoader]
|
||||||
private void load(IAPIProvider api, OsuGameBase game)
|
private void load(IAPIProvider api)
|
||||||
{
|
{
|
||||||
((DummyAPIAccess)api).HandleRequest = request => multiplayerScreen.RequestsHandler.HandleRequest(request, api.LocalUser.Value, game);
|
((DummyAPIAccess)api).HandleRequest = request => multiplayerScreen.RequestsHandler.HandleRequest(request, api.LocalUser.Value, beatmapManager);
|
||||||
}
|
}
|
||||||
|
|
||||||
public override bool OnBackButton() => (screenStack.CurrentScreen as OsuScreen)?.OnBackButton() ?? base.OnBackButton();
|
public override bool OnBackButton() => (screenStack.CurrentScreen as OsuScreen)?.OnBackButton() ?? base.OnBackButton();
|
||||||
|
@ -7,7 +7,7 @@ namespace osu.Game.Online.API.Requests
|
|||||||
{
|
{
|
||||||
public class GetBeatmapsRequest : APIRequest<GetBeatmapsResponse>
|
public class GetBeatmapsRequest : APIRequest<GetBeatmapsResponse>
|
||||||
{
|
{
|
||||||
private readonly int[] beatmapIds;
|
public readonly int[] BeatmapIds;
|
||||||
|
|
||||||
private const int max_ids_per_request = 50;
|
private const int max_ids_per_request = 50;
|
||||||
|
|
||||||
@ -16,9 +16,9 @@ namespace osu.Game.Online.API.Requests
|
|||||||
if (beatmapIds.Length > max_ids_per_request)
|
if (beatmapIds.Length > max_ids_per_request)
|
||||||
throw new ArgumentException($"{nameof(GetBeatmapsRequest)} calls only support up to {max_ids_per_request} IDs at once");
|
throw new ArgumentException($"{nameof(GetBeatmapsRequest)} calls only support up to {max_ids_per_request} IDs at once");
|
||||||
|
|
||||||
this.beatmapIds = beatmapIds;
|
BeatmapIds = beatmapIds;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override string Target => "beatmaps/?ids[]=" + string.Join("&ids[]=", beatmapIds);
|
protected override string Target => "beatmaps/?ids[]=" + string.Join("&ids[]=", BeatmapIds);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -8,6 +8,7 @@ using osu.Framework.Bindables;
|
|||||||
using osu.Framework.Graphics;
|
using osu.Framework.Graphics;
|
||||||
using osu.Framework.Graphics.Containers;
|
using osu.Framework.Graphics.Containers;
|
||||||
using osu.Game.Database;
|
using osu.Game.Database;
|
||||||
|
using osu.Game.Beatmaps;
|
||||||
using osu.Game.Online.API;
|
using osu.Game.Online.API;
|
||||||
using osu.Game.Online.Rooms;
|
using osu.Game.Online.Rooms;
|
||||||
using osu.Game.Screens.OnlinePlay;
|
using osu.Game.Screens.OnlinePlay;
|
||||||
@ -33,9 +34,6 @@ namespace osu.Game.Tests.Visual.OnlinePlay
|
|||||||
|
|
||||||
protected override Container<Drawable> Content => content;
|
protected override Container<Drawable> Content => content;
|
||||||
|
|
||||||
[Resolved]
|
|
||||||
private OsuGameBase game { get; set; }
|
|
||||||
|
|
||||||
private readonly Container content;
|
private readonly Container content;
|
||||||
private readonly Container drawableDependenciesContainer;
|
private readonly Container drawableDependenciesContainer;
|
||||||
private DelegatedDependencyContainer dependencies;
|
private DelegatedDependencyContainer dependencies;
|
||||||
@ -71,7 +69,12 @@ namespace osu.Game.Tests.Visual.OnlinePlay
|
|||||||
AddStep("setup API", () =>
|
AddStep("setup API", () =>
|
||||||
{
|
{
|
||||||
var handler = OnlinePlayDependencies.RequestsHandler;
|
var handler = OnlinePlayDependencies.RequestsHandler;
|
||||||
((DummyAPIAccess)API).HandleRequest = request => handler.HandleRequest(request, API.LocalUser.Value, game);
|
|
||||||
|
// Resolving the BeatmapManager in the test scene will inject the game-wide BeatmapManager, while many test scenes cache their own BeatmapManager instead.
|
||||||
|
// To get around this, the BeatmapManager is looked up from the dependencies provided to the children of the test scene instead.
|
||||||
|
var beatmapManager = dependencies.Get<BeatmapManager>();
|
||||||
|
|
||||||
|
((DummyAPIAccess)API).HandleRequest = request => handler.HandleRequest(request, API.LocalUser.Value, beatmapManager);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4,12 +4,16 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using osu.Game.Beatmaps;
|
||||||
using osu.Game.Online.API;
|
using osu.Game.Online.API;
|
||||||
|
using osu.Game.Online.API.Requests;
|
||||||
using osu.Game.Online.API.Requests.Responses;
|
using osu.Game.Online.API.Requests.Responses;
|
||||||
using osu.Game.Online.Rooms;
|
using osu.Game.Online.Rooms;
|
||||||
|
using osu.Game.Rulesets;
|
||||||
using osu.Game.Rulesets.Scoring;
|
using osu.Game.Rulesets.Scoring;
|
||||||
using osu.Game.Scoring;
|
using osu.Game.Scoring;
|
||||||
using osu.Game.Screens.OnlinePlay.Components;
|
using osu.Game.Screens.OnlinePlay.Components;
|
||||||
|
using osu.Game.Tests.Beatmaps;
|
||||||
|
|
||||||
namespace osu.Game.Tests.Visual.OnlinePlay
|
namespace osu.Game.Tests.Visual.OnlinePlay
|
||||||
{
|
{
|
||||||
@ -33,9 +37,9 @@ namespace osu.Game.Tests.Visual.OnlinePlay
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="request">The API request to handle.</param>
|
/// <param name="request">The API request to handle.</param>
|
||||||
/// <param name="localUser">The local user to store in responses where required.</param>
|
/// <param name="localUser">The local user to store in responses where required.</param>
|
||||||
/// <param name="game">The game base for cases where actual online requests need to be sent.</param>
|
/// <param name="beatmapManager">The beatmap manager to attempt to retrieve beatmaps from, prior to returning dummy beatmaps.</param>
|
||||||
/// <returns>Whether the request was successfully handled.</returns>
|
/// <returns>Whether the request was successfully handled.</returns>
|
||||||
public bool HandleRequest(APIRequest request, APIUser localUser, OsuGameBase game)
|
public bool HandleRequest(APIRequest request, APIUser localUser, BeatmapManager beatmapManager)
|
||||||
{
|
{
|
||||||
switch (request)
|
switch (request)
|
||||||
{
|
{
|
||||||
@ -128,6 +132,26 @@ namespace osu.Game.Tests.Visual.OnlinePlay
|
|||||||
Statistics = new Dictionary<HitResult, int>()
|
Statistics = new Dictionary<HitResult, int>()
|
||||||
});
|
});
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
case GetBeatmapsRequest getBeatmapsRequest:
|
||||||
|
var result = new List<APIBeatmap>();
|
||||||
|
|
||||||
|
foreach (int id in getBeatmapsRequest.BeatmapIds)
|
||||||
|
{
|
||||||
|
var baseBeatmap = beatmapManager.QueryBeatmap(b => b.OnlineID == id);
|
||||||
|
|
||||||
|
if (baseBeatmap == null)
|
||||||
|
{
|
||||||
|
baseBeatmap = new TestBeatmap(new RulesetInfo { OnlineID = 0 }).BeatmapInfo;
|
||||||
|
baseBeatmap.OnlineID = id;
|
||||||
|
baseBeatmap.BeatmapSet!.OnlineID = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
result.Add(OsuTestScene.CreateAPIBeatmap(baseBeatmap));
|
||||||
|
}
|
||||||
|
|
||||||
|
getBeatmapsRequest.TriggerSuccess(new GetBeatmapsResponse { Beatmaps = result });
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
|
Loading…
Reference in New Issue
Block a user