Beispiel #1
0
        public async Task Invoke(HttpContext context, IBernmobilService bernmobilService)
        {
            if (!context.WebSockets.IsWebSocketRequest)
            {
                return;
            }

            var socket = await context.WebSockets.AcceptWebSocketAsync();

            Thread sender = new Thread(() => StartSending(socket, bernmobilService));

            sender.Start();

            var runInvoke = true;

            while (runInvoke)
            {
                try
                {
                    var buffer   = new byte[4096];
                    var received = await socket.ReceiveAsync(new ArraySegment <byte>(buffer), CancellationToken.None);

                    if (received.MessageType == WebSocketMessageType.Close)
                    {
                        runInvoke = false;
                        sender.Interrupt();
                        return;
                    }
                }
                catch (Exception ex)
                {
                }
            }

            //TODO - investigate the Kestrel exception thrown when this is the last middleware
            //await _next.Invoke(context);
        }
Beispiel #2
0
        private async Task StartSending(WebSocket socket, IBernmobilService bernmobilService)
        {
            bool keepRunning = true;

            while (keepRunning)
            {
                var vehiclesGeoJson = await bernmobilService.GetVehicles();

                var geoJsonString = JsonConvert.SerializeObject(vehiclesGeoJson);
                try
                {
                    Thread.Sleep(500);

                    await socket.SendAsync(new ArraySegment <byte>(Encoding.UTF8.GetBytes(geoJsonString)), WebSocketMessageType.Text, true,
                                           default(CancellationToken));
                }
                catch (Exception ex)
                {
                    keepRunning = false;
                    Thread.CurrentThread.Join();
                    break;
                }
            }
        }