Exemplo n.º 1
0
        public async ValueTask ProcessAsync(DotNetWatchContext context, CancellationToken cancellationToken)
        {
            tempContext = context;

            if (_suppressLaunchBrowser)
            {
                return;
            }

            if (context.Iteration == 0)
            {
                _reporter = context.Reporter;

                if (CanLaunchBrowser(context, out var launchPath))
                {
                    context.Reporter.Verbose("dotnet-watch is configured to launch a browser on ASP.NET Core application startup.");
                    _canLaunchBrowser  = true;
                    _launchPath        = launchPath;
                    _cancellationToken = cancellationToken;

                    // We've redirected the output, but want to ensure that it continues to appear in the user's console.
                    context.ProcessSpec.OnOutput += (_, eventArgs) => Console.WriteLine(eventArgs.Data);
                    context.ProcessSpec.OnOutput += OnOutput;

                    if (!_suppressBrowserRefresh)
                    {
                        _refreshServer = new BrowserRefreshServer(context.Reporter);
                        var serverUrl = await _refreshServer.StartAsync(cancellationToken);

                        context.Reporter.Verbose($"Refresh server running at {serverUrl}.");
                        context.ProcessSpec.EnvironmentVariables["ASPNETCORE_AUTO_RELOAD_WS_ENDPOINT"] = serverUrl;

                        var pathToMiddleware = Path.Combine(AppContext.BaseDirectory, "middleware", "Microsoft.AspNetCore.Watch.BrowserRefresh.dll");
                        context.ProcessSpec.EnvironmentVariables["DOTNET_STARTUP_HOOKS"] = pathToMiddleware;
                        context.ProcessSpec.EnvironmentVariables["ASPNETCORE_HOSTINGSTARTUPASSEMBLIES"] = "Microsoft.AspNetCore.Watch.BrowserRefresh";
                    }
                }
            }

            if (_canLaunchBrowser)
            {
                if (context.Iteration > 0)
                {
                    // We've detected a change. Notify the browser.
                    await SendMessage(WaitMessage, cancellationToken);
                }
            }
        }
Exemplo n.º 2
0
        internal static async ValueTask TryHandleFileAction(BrowserRefreshServer browserRefreshServer, FileItem fileItem, CancellationToken cancellationToken)
        {
            var filePath    = fileItem.StaticWebAssetPath;
            var bytesToRent = UpdateCssMessageLength + Encoding.UTF8.GetMaxByteCount(filePath.Length);
            var bytes       = ArrayPool <byte> .Shared.Rent(bytesToRent);

            try
            {
                UpdateCssMessage.CopyTo(bytes.AsSpan());
                var length = UpdateCssMessageLength;
                length += Encoding.UTF8.GetBytes(filePath, bytes.AsSpan(length));

                await browserRefreshServer.SendMessage(bytes.AsMemory(0, length), cancellationToken);
            }
            finally
            {
                ArrayPool <byte> .Shared.Return(bytes);
            }
        }
        public async ValueTask ProcessAsync(DotNetWatchContext context, CancellationToken cancellationToken)
        {
            if (_suppressLaunchBrowser)
            {
                return;
            }

            if (context.Iteration == 0)
            {
                _reporter = context.Reporter;

                if (CanLaunchBrowser(context, out var launchPath))
                {
                    context.Reporter.Verbose("dotnet-watch is configured to launch a browser on ASP.NET Core application startup.");
                    _launchPath        = launchPath;
                    _cancellationToken = cancellationToken;

                    // We've redirected the output, but want to ensure that it continues to appear in the user's console.
                    context.ProcessSpec.OnOutput += (_, eventArgs) => Console.WriteLine(eventArgs.Data);
                    context.ProcessSpec.OnOutput += OnOutput;

                    if (!_suppressBrowserRefresh)
                    {
                        _refreshServer = new BrowserRefreshServer(context.Reporter);
                        context.BrowserRefreshServer = _refreshServer;
                        var serverUrls = string.Join(',', await _refreshServer.StartAsync(cancellationToken));
                        context.Reporter.Verbose($"Refresh server running at {serverUrls}.");
                        context.ProcessSpec.EnvironmentVariables["ASPNETCORE_AUTO_RELOAD_WS_ENDPOINT"] = serverUrls;

                        var pathToMiddleware = Path.Combine(AppContext.BaseDirectory, "middleware", "Microsoft.AspNetCore.Watch.BrowserRefresh.dll");
                        context.ProcessSpec.EnvironmentVariables.DotNetStartupHooks.Add(pathToMiddleware);
                        context.ProcessSpec.EnvironmentVariables.AspNetCoreHostingStartupAssemblies.Add("Microsoft.AspNetCore.Watch.BrowserRefresh");
                    }
                }
            }
            else if (!_suppressBrowserRefresh)
            {
                // We've detected a change. Notify the browser.
                await(_refreshServer?.SendWaitMessageAsync(cancellationToken) ?? default);
            }
        }
Exemplo n.º 4
0
        public async ValueTask ProcessAsync(DotNetWatchContext context, CancellationToken cancellationToken)
        {
            if (_suppressLaunchBrowser)
            {
                return;
            }

            if (context.Iteration == 0)
            {
                _reporter = context.Reporter;

                if (CanLaunchBrowser(context, out var launchPath))
                {
                    context.Reporter.Verbose("dotnet-watch is configured to launch a browser on ASP.NET Core application startup.");
                    _canLaunchBrowser  = true;
                    _launchPath        = launchPath;
                    _cancellationToken = cancellationToken;

                    _refreshServer = new BrowserRefreshServer(context.Reporter);
                    var serverUrl = await _refreshServer.StartAsync(cancellationToken);

                    context.Reporter.Verbose($"Refresh server running at {serverUrl}.");
                    context.ProcessSpec.EnvironmentVariables["DOTNET_WATCH_REFRESH_URL"] = serverUrl;

                    context.ProcessSpec.OnOutput += OnOutput;
                }
            }

            if (_canLaunchBrowser)
            {
                if (context.Iteration > 0)
                {
                    // We've detected a change. Notify the browser.
                    await _refreshServer.SendMessage(WaitMessage, cancellationToken);
                }
            }
        }