Expose `Reconnect` logic in `HubClientConnector`

This commit is contained in:
Dean Herbert 2022-05-26 18:02:50 +09:00
parent c524b665ad
commit 63dd9bd493
2 changed files with 26 additions and 13 deletions

View File

@ -64,20 +64,28 @@ public HubClientConnector(string clientName, string endpoint, IAPIProvider api,
this.preferMessagePack = preferMessagePack;
apiState.BindTo(api.State);
apiState.BindValueChanged(state =>
{
switch (state.NewValue)
{
case APIState.Failing:
case APIState.Offline:
Task.Run(() => disconnect(true));
break;
apiState.BindValueChanged(state => connectIfPossible(), true);
}
case APIState.Online:
Task.Run(connect);
break;
}
}, true);
public void Reconnect()
{
Logger.Log($"{clientName} reconnecting...", LoggingTarget.Network);
Task.Run(connectIfPossible);
}
private void connectIfPossible()
{
switch (apiState.Value)
{
case APIState.Failing:
case APIState.Offline:
Task.Run(() => disconnect(true));
break;
case APIState.Online:
Task.Run(connect);
break;
}
}
private async Task connect()

View File

@ -30,5 +30,10 @@ public interface IHubClientConnector : IDisposable
/// Invoked whenever a new hub connection is built, to configure it before it's started.
/// </summary>
public Action<HubConnection>? ConfigureConnection { get; set; }
/// <summary>
/// Reconnect if already connected.
/// </summary>
void Reconnect();
}
}