mirror of
https://github.com/osukey/osukey.git
synced 2025-08-07 00:23:59 +09:00
Reschedule ack request on completion
This commit is contained in:
@ -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>
|
||||||
|
Reference in New Issue
Block a user