コード例 #1
0
        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;
        }
コード例 #2
0
        /// <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;
        }
コード例 #3
0
        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);
            });
        }
コード例 #4
0
        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();
                }
            });
        }