public static void StopWebServer() { //In order to stop the waiting background thread try { serverCts.Cancel(); } catch (Exception ex) { Console.WriteLine($"{nameof(WebApplicationFactory)}.{nameof(WebApplicationFactory.StopWebServer)} - {nameof(serverCts)}: {ex.Message}"); } try { if (blazorContextBridgeServer != null) { blazorContextBridgeServer.Dispose(); blazorContextBridgeServer = null; } } catch (Exception ex) { Console.WriteLine($"{nameof(WebApplicationFactory)}.{nameof(WebApplicationFactory.StopWebServer)} - {nameof(blazorContextBridgeServer)}: {ex.Message}"); } server?.Dispose(); server = null; _isStarted = false; }
/// <summary> /// Clear Webserver resources and set it as not started /// </summary> private static void ClearWebserverResources() { try { if (blazorContextBridgeServer != null) { blazorContextBridgeServer.Dispose(); } } catch (Exception ex) { } try { server?.Dispose(); } catch (Exception ex) { } blazorContextBridgeServer = null; server = null; _isStarted = false; }
public static void StartWebServer() { Init(); //No-op if called twice if (IsStarted()) { //Already started return; } server = new WebServer(GetBaseURL(), RoutingStrategy.Regex); server.WithLocalSession(); if (AreDebugFeaturesEnabled()) { server.EnableCors(); } server.RegisterModule(new WebApiModule()); server.Module <WebApiModule>().RegisterController <BlazorController>(); //Reference to the BlazorContextBridge Websocket service blazorContextBridgeServer = new BlazorContextBridge(); server.RegisterModule(new WebSocketsModule()); server.Module <WebSocketsModule>().RegisterWebSocketsServer(_contextBridgeRelativeURI, blazorContextBridgeServer); serverCts = new CancellationTokenSource(); Task.Factory.StartNew(async() => { Console.WriteLine("Blazor.Mobile: Starting Server..."); await server.RunAsync(serverCts.Token); }); }
internal static void StartWebServer() { Init(); //No-op if called twice if (IsStarted()) { //Already started ConsoleHelper.WriteError("BlazorMobile: Cannot start Webserver because it has already started"); return; } WebServer server = null; if (AreDebugFeaturesEnabled()) { //All wildcard url server = new WebServer(GetHttpPort(), RoutingStrategy.Regex); } else { //Restrict ip's to localhost server = new WebServer(GetBaseURL(), RoutingStrategy.Regex); } server.WithLocalSession(); if (AreDebugFeaturesEnabled()) { server.EnableCors(); } server.RegisterModule(new WebApiModule()); server.Module <WebApiModule>().RegisterController <BlazorController>(); serverCts = new CancellationTokenSource(); //Reference to the BlazorContextBridge Websocket service blazorContextBridgeServer = new BlazorContextBridge(); blazorContextBridgeServer.CancellationToken = serverCts.Token; server.RegisterModule(new WebSocketsModule()); server.Module <WebSocketsModule>().RegisterWebSocketsServer(_contextBridgeRelativeURI, blazorContextBridgeServer); Task.Factory.StartNew(async() => { ConsoleHelper.WriteLine("BlazorMobile: Starting server..."); try { _isStarted = true; await server.RunAsync(serverCts.Token); } catch (InvalidOperationException e) { _isStarted = false; ConsoleHelper.WriteException(e); //This call may be redundant with the previous case, but we must ensure that the StartWebServer invokation is done after clearing resources ClearWebserverResources(); //If we are from the InvalidOperationException, the crash was not expected...Restarting webserver Device.BeginInvokeOnMainThread(StartWebServer); } catch (OperationCanceledException e) { _isStarted = false; ConsoleHelper.WriteLine("BlazorMobile: Stopping server..."); ClearWebserverResources(); } }); }