Ejemplo n.º 1
0
        public static async Task HandleWebSocketRequestAsync(HttpContext context)
        {
            //
            // Make sure we get a good ID
            //
            if (!context.Request.Query.TryGetValue("id", out var idValues))
            {
                context.Response.StatusCode = StatusCodes.Status400BadRequest;
                return;
            }

            var id = idValues.FirstOrDefault();

            if (id == null || id.Length != 32)
            {
                context.Response.StatusCode = StatusCodes.Status400BadRequest;
                return;
            }

            //
            // Find the pending session
            //
            if (!pendingSessions.TryRemove(id, out var pendingSession))
            {
                context.Response.StatusCode = StatusCodes.Status400BadRequest;
                return;
            }

            //
            // Reject the session if it's old
            //
            if ((DateTime.UtcNow - pendingSession.RequestTimeUtc) > SessionTimeout)
            {
                context.Response.StatusCode = StatusCodes.Status400BadRequest;
                return;
            }

            //
            // OK, Run
            //
            var token     = CancellationToken.None;
            var webSocket = await context.WebSockets.AcceptWebSocketAsync("ooui");

            var session = new Ooui.UI.Session(webSocket, pendingSession.Element, token);
            await session.RunAsync().ConfigureAwait(false);
        }
Ejemplo n.º 2
0
        public static async Task HandleWebSocketRequestAsync(HttpContext context)
        {
            void BadRequest(string message)
            {
                context.Response.StatusCode  = StatusCodes.Status400BadRequest;
                context.Response.ContentType = "text/plain; charset=utf-8";
                using (var sw = new System.IO.StreamWriter(context.Response.Body)) {
                    sw.WriteLine(message);
                }
            }

            //
            // Make sure we get a good ID
            //
            if (!context.Request.Query.TryGetValue("id", out var idValues))
            {
                BadRequest("Missing `id`");
                return;
            }

            var id = idValues.LastOrDefault();

            if (id == null || id.Length != 32)
            {
                BadRequest("Invalid `id`");
                return;
            }

            //
            // Clear old sessions
            //
            var toClear = activeSessions.Where(x => (DateTime.UtcNow - x.Value.LastConnectTimeUtc) > SessionTimeout).ToList();

            foreach (var c in toClear)
            {
                activeSessions.TryRemove(c.Key, out var _);
            }

            //
            // Find the pending session
            //
            if (!activeSessions.TryGetValue(id, out var activeSession))
            {
                BadRequest("Unknown `id`");
                return;
            }
            activeSession.LastConnectTimeUtc = DateTime.UtcNow;

            //
            // Set the element's dimensions
            //
            if (!context.Request.Query.TryGetValue("w", out var wValues) || wValues.Count < 1)
            {
                BadRequest("Missing `w`");
                return;
            }
            if (!context.Request.Query.TryGetValue("h", out var hValues) || hValues.Count < 1)
            {
                BadRequest("Missing `h`");
                return;
            }
            var icult = System.Globalization.CultureInfo.InvariantCulture;

            if (!double.TryParse(wValues.Last(), System.Globalization.NumberStyles.Any, icult, out var w))
            {
                w = 640;
            }
            if (!double.TryParse(hValues.Last(), System.Globalization.NumberStyles.Any, icult, out var h))
            {
                h = 480;
            }

            //
            // OK, Run
            //
            var token     = CancellationToken.None;
            var webSocket = await context.WebSockets.AcceptWebSocketAsync("ooui");

            var session = new Ooui.UI.Session(webSocket, activeSession.Element, w, h, token);
            await session.RunAsync().ConfigureAwait(false);
        }
Ejemplo n.º 3
0
        public static async Task HandleWebSocketRequestAsync(HttpContext context)
        {
            void BadRequest(string message)
            {
                context.Response.StatusCode  = StatusCodes.Status400BadRequest;
                context.Response.ContentType = "text/plain; charset=utf-8";
                using (var sw = new System.IO.StreamWriter(context.Response.Body)) {
                    sw.WriteLine(message);
                }
            }

            //
            // Make sure we get a good ID
            //
            if (!context.Request.Query.TryGetValue("id", out var idValues))
            {
                BadRequest("Missing `id`");
                return;
            }

            var id = idValues.LastOrDefault();

            if (id == null || id.Length != 32)
            {
                BadRequest("Invalid `id`");
                return;
            }

            //
            // Find the pending session
            //
            if (!pendingSessions.TryRemove(id, out var pendingSession))
            {
                BadRequest("Unknown `id`");
                return;
            }

            //
            // Reject the session if it's old
            //
            if ((DateTime.UtcNow - pendingSession.RequestTimeUtc) > SessionTimeout)
            {
                BadRequest("Old `id`");
                return;
            }

            //
            // Set the element's dimensions
            //
            if (!context.Request.Query.TryGetValue("w", out var wValues) || wValues.Count < 1)
            {
                BadRequest("Missing `w`");
                return;
            }
            if (!context.Request.Query.TryGetValue("h", out var hValues) || hValues.Count < 1)
            {
                BadRequest("Missing `h`");
                return;
            }
            if (!double.TryParse(wValues.Last(), out var w))
            {
                w = 640;
            }
            if (!double.TryParse(hValues.Last(), out var h))
            {
                h = 480;
            }

            //
            // OK, Run
            //
            var token     = CancellationToken.None;
            var webSocket = await context.WebSockets.AcceptWebSocketAsync("ooui");

            var session = new Ooui.UI.Session(webSocket, pendingSession.Element, w, h, token);
            await session.RunAsync().ConfigureAwait(false);
        }