Reschedule ack request on completion

This commit is contained in:
Dan Balasescu
2022-11-04 19:02:26 +09:00
parent 66bbe34116
commit 1d2818dc70

View File

@ -72,7 +72,7 @@ namespace osu.Game.Online.Chat
private readonly IBindable<APIState> apiState = new Bindable<APIState>(); private readonly IBindable<APIState> apiState = new Bindable<APIState>();
private bool channelsInitialised; private bool channelsInitialised;
private ScheduledDelegate ackDelegate; private ScheduledDelegate scheduledAck;
public ChannelManager(IAPIProvider api) public ChannelManager(IAPIProvider api)
{ {
@ -112,16 +112,28 @@ namespace osu.Game.Online.Chat
}); });
apiState.BindTo(api.State); apiState.BindTo(api.State);
apiState.BindValueChanged(status => apiState.BindValueChanged(_ => performChatAckRequest(), true);
{ }
ackDelegate?.Cancel();
private void performChatAckRequest()
if (status.NewValue == APIState.Online) {
{ if (apiState.Value != APIState.Online)
Scheduler.Add(ackDelegate = new ScheduledDelegate(() => api.Queue(new ChatAckRequest()), 0, 60000)); return;
// Todo: Handle silences.
scheduledAck?.Cancel();
var req = new ChatAckRequest();
req.Success += _ => scheduleNextRequest();
req.Failure += _ => scheduleNextRequest();
api.Queue(req);
// Todo: Handle silences.
void scheduleNextRequest()
{
scheduledAck?.Cancel();
scheduledAck = Scheduler.AddDelayed(performChatAckRequest, 60000);
} }
}, true);
} }
/// <summary> /// <summary>