private Task SendMessage(byte[] message, CancellationToken cancellationToken) { if (_refreshServer is null) { return(Task.CompletedTask); } return(_refreshServer.SendMessage(message, cancellationToken)); }
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); } } }
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); } }