2019-01-24 16:43:03 +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.
|
2018-04-13 17:19:50 +08:00
|
|
|
|
|
2020-04-11 16:47:51 +08:00
|
|
|
|
using System;
|
2019-03-22 10:55:35 +08:00
|
|
|
|
using System.Threading;
|
2019-11-29 19:03:14 +08:00
|
|
|
|
using System.Threading.Tasks;
|
2019-02-21 18:04:31 +08:00
|
|
|
|
using osu.Framework.Bindables;
|
2019-03-22 10:55:35 +08:00
|
|
|
|
using osu.Framework.Graphics;
|
2018-04-13 17:19:50 +08:00
|
|
|
|
using osu.Game.Users;
|
|
|
|
|
|
|
|
|
|
namespace osu.Game.Online.API
|
|
|
|
|
{
|
2019-03-22 10:55:35 +08:00
|
|
|
|
public class DummyAPIAccess : Component, IAPIProvider
|
2018-04-13 17:19:50 +08:00
|
|
|
|
{
|
|
|
|
|
public Bindable<User> LocalUser { get; } = new Bindable<User>(new User
|
|
|
|
|
{
|
|
|
|
|
Username = @"Dummy",
|
2019-03-13 11:56:47 +08:00
|
|
|
|
Id = 1001,
|
2018-04-13 17:19:50 +08:00
|
|
|
|
});
|
|
|
|
|
|
2020-12-18 14:25:12 +08:00
|
|
|
|
public BindableList<User> Friends { get; } = new BindableList<User>();
|
2020-12-17 18:30:55 +08:00
|
|
|
|
|
2019-06-12 17:04:57 +08:00
|
|
|
|
public Bindable<UserActivity> Activity { get; } = new Bindable<UserActivity>();
|
|
|
|
|
|
2020-10-22 14:03:43 +08:00
|
|
|
|
public string AccessToken => "token";
|
|
|
|
|
|
2020-10-22 13:19:12 +08:00
|
|
|
|
public bool IsLoggedIn => State.Value == APIState.Online;
|
2018-04-13 17:19:50 +08:00
|
|
|
|
|
2019-03-13 11:56:47 +08:00
|
|
|
|
public string ProvidedUsername => LocalUser.Value.Username;
|
|
|
|
|
|
2020-12-24 17:11:40 +08:00
|
|
|
|
public string APIEndpointUrl => "http://localhost";
|
|
|
|
|
|
|
|
|
|
public string WebsiteRootUrl => "http://localhost";
|
2019-03-13 11:56:47 +08:00
|
|
|
|
|
2020-04-11 16:47:51 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
/// Provide handling logic for an arbitrary API request.
|
|
|
|
|
/// </summary>
|
|
|
|
|
public Action<APIRequest> HandleRequest;
|
|
|
|
|
|
2020-10-22 13:19:12 +08:00
|
|
|
|
private readonly Bindable<APIState> state = new Bindable<APIState>(APIState.Online);
|
2019-03-22 10:55:35 +08:00
|
|
|
|
|
2020-10-22 13:19:12 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
/// The current connectivity state of the API.
|
|
|
|
|
/// </summary>
|
|
|
|
|
public IBindable<APIState> State => state;
|
2019-06-12 17:04:57 +08:00
|
|
|
|
|
|
|
|
|
public DummyAPIAccess()
|
|
|
|
|
{
|
|
|
|
|
LocalUser.BindValueChanged(u =>
|
|
|
|
|
{
|
|
|
|
|
u.OldValue?.Activity.UnbindFrom(Activity);
|
|
|
|
|
u.NewValue.Activity.BindTo(Activity);
|
|
|
|
|
}, true);
|
|
|
|
|
}
|
2018-04-13 17:19:50 +08:00
|
|
|
|
|
|
|
|
|
public virtual void Queue(APIRequest request)
|
|
|
|
|
{
|
2021-03-23 16:31:28 +08:00
|
|
|
|
if (HandleRequest != null)
|
|
|
|
|
HandleRequest.Invoke(request);
|
|
|
|
|
else
|
|
|
|
|
// this will fail due to not receiving an APIAccess, and trigger a failure on the request.
|
|
|
|
|
// this is intended - any request in testing that needs non-failures should use HandleRequest.
|
|
|
|
|
request.Perform(this);
|
2018-04-13 17:19:50 +08:00
|
|
|
|
}
|
|
|
|
|
|
2020-04-13 20:35:35 +08:00
|
|
|
|
public void Perform(APIRequest request) => HandleRequest?.Invoke(request);
|
2019-11-29 19:03:14 +08:00
|
|
|
|
|
2020-04-13 20:35:35 +08:00
|
|
|
|
public Task PerformAsync(APIRequest request)
|
|
|
|
|
{
|
|
|
|
|
HandleRequest?.Invoke(request);
|
|
|
|
|
return Task.CompletedTask;
|
|
|
|
|
}
|
2019-11-29 19:03:14 +08:00
|
|
|
|
|
2019-03-13 11:56:47 +08:00
|
|
|
|
public void Login(string username, string password)
|
|
|
|
|
{
|
|
|
|
|
LocalUser.Value = new User
|
|
|
|
|
{
|
2019-03-22 10:55:35 +08:00
|
|
|
|
Username = username,
|
2019-03-13 18:01:42 +08:00
|
|
|
|
Id = 1001,
|
2019-03-13 11:56:47 +08:00
|
|
|
|
};
|
2019-03-22 10:55:35 +08:00
|
|
|
|
|
2020-10-22 13:19:12 +08:00
|
|
|
|
state.Value = APIState.Online;
|
2019-03-13 11:56:47 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void Logout()
|
|
|
|
|
{
|
|
|
|
|
LocalUser.Value = new GuestUser();
|
2020-10-22 13:19:12 +08:00
|
|
|
|
state.Value = APIState.Offline;
|
2019-03-13 11:56:47 +08:00
|
|
|
|
}
|
|
|
|
|
|
2021-02-15 15:31:00 +08:00
|
|
|
|
public IHubClientConnector GetHubConnector(string clientName, string endpoint) => null;
|
|
|
|
|
|
2019-03-22 10:55:35 +08:00
|
|
|
|
public RegistrationRequest.RegistrationRequestErrors CreateAccount(string email, string username, string password)
|
|
|
|
|
{
|
|
|
|
|
Thread.Sleep(200);
|
|
|
|
|
return null;
|
|
|
|
|
}
|
2020-10-22 13:19:12 +08:00
|
|
|
|
|
|
|
|
|
public void SetState(APIState newState) => state.Value = newState;
|
2020-12-18 14:16:36 +08:00
|
|
|
|
|
|
|
|
|
IBindable<User> IAPIProvider.LocalUser => LocalUser;
|
|
|
|
|
IBindableList<User> IAPIProvider.Friends => Friends;
|
|
|
|
|
IBindable<UserActivity> IAPIProvider.Activity => Activity;
|
2018-04-13 17:19:50 +08:00
|
|
|
|
}
|
|
|
|
|
}
|