naps2/NAPS2.Escl.Server/WebServerExtensions.cs
Ben Olden-Cooligan 29b3c57207 Escl: Fix port handling and server restarts
Ports are now static per SharedDevice where possible, falling back to random ports if an error occurs.
2023-12-02 22:57:30 -08:00

30 lines
782 B
C#

using EmbedIO;
namespace NAPS2.Escl.Server;
internal static class WebServerExtensions
{
public static async Task StartAsync(this WebServer server, CancellationToken cancelToken = default)
{
var startedTcs = new TaskCompletionSource<bool>();
server.StateChanged += (_, args) =>
{
if (args.NewState == WebServerState.Listening)
{
startedTcs.TrySetResult(true);
}
};
_ = server.RunAsync(cancelToken).ContinueWith(t =>
{
if (t.IsFaulted)
{
startedTcs.TrySetException(t.Exception!);
}
else
{
startedTcs.TrySetCanceled();
}
});
await startedTcs.Task;
}
}