コード例 #1
0
        async void SocketReceiveWorker(SimpleWebSocket socket)
        {
            try
            {
                while (true)
                {
                    var msg = await socket.ReceiveMessage().ConfigureAwait(false);

                    if (msg == null)
                    {
                        return;
                    }
                    if (msg.IsText)
                    {
                        var s     = Encoding.UTF8.GetString(msg.Data);
                        var parts = s.Split(':');
                        if (parts[0] == "frame-received")
                        {
                            _onMessage?.Invoke(this, new FrameReceivedMessage {
                                SequenceId = long.Parse(parts[1])
                            });
                        }
                    }
                }
            }
            catch (Exception e)
            {
                Console.Error.WriteLine(e.ToString());
            }
        }
コード例 #2
0
        async void SocketWorker()
        {
            try
            {
                SimpleWebSocket socket = null;
                while (true)
                {
                    if (_disposed)
                    {
                        socket?.Dispose();
                        return;
                    }

                    FrameMessage sendNow = null;
                    lock (_lock)
                    {
                        if (_pendingSocket != null)
                        {
                            socket?.Dispose();
                            socket                = _pendingSocket;
                            _pendingSocket        = null;
                            _lastSentFrameMessage = null;
                        }

                        if (_lastFrameMessage != _lastSentFrameMessage)
                        {
                            _lastSentFrameMessage = sendNow = _lastFrameMessage;
                        }
                    }

                    if (sendNow != null && socket != null)
                    {
                        await socket.SendMessage(
                            $"frame:{sendNow.SequenceId}:{sendNow.Width}:{sendNow.Height}:{sendNow.Stride}:{sendNow.DpiX}:{sendNow.DpiY}");

                        await socket.SendMessage(false, sendNow.Data);
                    }

                    _wakeup.WaitOne(TimeSpan.FromSeconds(1));
                }
            }
            catch (Exception e)
            {
                Console.Error.WriteLine(e.ToString());
            }
        }
コード例 #3
0
        async void AcceptWorker()
        {
            while (true)
            {
                using (var req = await _simpleServer.AcceptAsync())
                {
                    if (!req.IsWebsocketRequest)
                    {
                        var key = req.Path == "/" ? "index.html" : req.Path.TrimStart('/').Replace('/', '.');
                        if (_resources.TryGetValue(key, out var data))
                        {
                            var    ext  = Path.GetExtension(key).Substring(1);
                            string mime = null;
                            if (ext == null || !Mime.TryGetValue(ext, out mime))
                            {
                                mime = "application/octet-stream";
                            }
                            await req.RespondAsync(200, data, mime);
                        }
                        else
                        {
                            await req.RespondAsync(404, NotFound, "text/plain");
                        }
                    }
                    else
                    {
                        var socket = await req.AcceptWebSocket();

                        SocketReceiveWorker(socket);
                        lock (_lock)
                        {
                            _pendingSocket?.Dispose();
                            _pendingSocket = socket;
                        }
                    }
                }
            }
        }
コード例 #4
0
        async void SocketReceiveWorker(SimpleWebSocket socket)
        {
            try
            {
                while (true)
                {
                    var msg = await socket.ReceiveMessage().ConfigureAwait(false);

                    if (msg != null && msg.IsText)
                    {
                        var message = ParseMessage(msg.AsString());
                        if (message != null)
                        {
                            _onMessage?.Invoke(this, message);
                        }
                    }
                }
            }
            catch (Exception e)
            {
                Console.Error.WriteLine(e.ToString());
            }
        }