public async Task <IActionResult> ServiceWorkerAsync() { Response.ContentType = "application/javascript; charset=utf-8"; Response.Headers[HeaderNames.CacheControl] = $"max-age={_options.ServiceWorkerCacheControlMaxAge}"; string fileName = _options.Strategy + ".js"; Assembly assembly = typeof(PwaController).Assembly; Stream resourceStream = assembly.GetManifestResourceStream($"WebEssentials.AspNetCore.Pwa.ServiceWorker.Files.{fileName}"); Func <string, string> Rejoin(string splitter, Func <string, string> iterate) => (string text) => string.Join(splitter, text.Split(new[] { splitter }, StringSplitOptions.RemoveEmptyEntries).Select(iterate)); using (var reader = new StreamReader(resourceStream)) { string js = await reader.ReadToEndAsync(); string modified = js .Replace("{version}", _options.CacheId + "::" + _options.Strategy) .Replace("{routes}", Rejoin(",", r => "'" + r.Trim() + "'")(_options.RoutesToPreCache)) .Replace("{patternToIgnore}", Rejoin(_options.PatternToIgnoreDelimiter, r => r.Trim())(_options.PatternToIgnore)) .Replace("{offlineRoute}", _options.BaseRoute + _options.OfflineRoute) .Replace("{installImmediately}", _options.InstallImmediately.ToString().ToLower()); return(Content(modified)); } }
static async void HandleClientInput(ClientWebSocket clientWebSocket, Queue <byte[]> bufferQueue) { await Task.Factory.StartNew(() => { Random random = new Random(); Registration registration = new Registration(clientWebSocket); registration.Invoke(); Movement movement = new Movement(clientWebSocket); Rejoin rejoin = new Rejoin(clientWebSocket); while (true) { Console.ReadLine(); float angle = (float)random.NextDouble() * (3f + 3f) - 3f; movement.Invoke(angle); } }); }