// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. // See the LICENCE file in the repository root for full licence text. using osu.Framework.Allocation; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Game.Online.API; namespace osu.Game.Overlays { /// /// Drawable which used to represent online content in . /// /// Response type public abstract class OverlayView : Container, IOnlineComponent where T : class { [Resolved] protected IAPIProvider API { get; private set; } protected override Container Content => content; private readonly FillFlowContainer content; protected OverlayView() { RelativeSizeAxes = Axes.X; AutoSizeAxes = Axes.Y; AddInternal(content = new FillFlowContainer { RelativeSizeAxes = Axes.X, AutoSizeAxes = Axes.Y, }); } protected override void LoadComplete() { base.LoadComplete(); API.Register(this); } private APIRequest request; protected abstract APIRequest CreateRequest(); protected abstract void OnSuccess(T response); public virtual void APIStateChanged(IAPIProvider api, APIState state) { switch (state) { case APIState.Online: request = CreateRequest(); request.Success += response => Schedule(() => OnSuccess(response)); api.Queue(request); break; } } protected override void Dispose(bool isDisposing) { request?.Cancel(); API?.Unregister(this); base.Dispose(isDisposing); } } }