예제 #1
0
        private void _SendBinary(byte[] binaryData, bool isText, int offset, int length)
        {
            switch (Status)
            {
            case WebSocketStatus.Closed: throw new InvalidOperationException("Cannot send data to a closed WebSocket");

            case WebSocketStatus.Open:
                Send(binaryData, isText, offset, length);
                BytesSent += (ulong)length;
                if (TerminalConnection?.Resource.Name != Console.TypeName)
                {
                    Console.Log(new WebSocketEvent(MessageType.WebSocketOutput, this, Encoding.UTF8.GetString(binaryData), binaryData.Length));
                }
                break;
            }
        }
예제 #2
0
        private void _SendText(string textData)
        {
            switch (Status)
            {
            case WebSocketStatus.Closed: throw new InvalidOperationException("Cannot send data to a closed WebSocket");

            case WebSocketStatus.Open:
                Send(textData);
                BytesSent += (ulong)Encoding.UTF8.GetByteCount(textData);
                if (TerminalConnection?.Resource.Name != Console.TypeName)
                {
                    Console.Log(new WebSocketEvent(MessageType.WebSocketOutput, this, textData, Encoding.UTF8.GetByteCount(textData)));
                }
                break;
            }
        }
예제 #3
0
        internal void Open()
        {
            switch (Status)
            {
            case WebSocketStatus.Waiting:
                SendUpgrade();
                Status = WebSocketStatus.Open;
                Opened = DateTime.Now;
                if (TerminalConnection?.Resource.Name != Console.TypeName)
                {
                    Console.Log(new WebSocketEvent(MessageType.WebSocketOpen, this));
                }
                break;

            default: throw new InvalidOperationException($"Unable to open WebSocket with status '{Status}'");
            }
        }
예제 #4
0
 internal void HandleBinaryInput(byte[] binaryData)
 {
     if (TerminalConnection == null)
     {
         return;
     }
     if (!TerminalConnection.Terminal.SupportsBinaryInput)
     {
         SendResult(new UnsupportedWebSocketInput($"Terminal '{TerminalConnection.Resource.Name}' does not support binary input"));
         return;
     }
     if (TerminalConnection.Resource?.Name != Console.TypeName)
     {
         Console.Log(new WebSocketEvent(MessageType.WebSocketInput, this, Encoding.UTF8.GetString(binaryData), binaryData.Length));
     }
     TerminalConnection.Terminal.HandleBinaryInput(binaryData);
     BytesSent += (ulong)binaryData.Length;
 }
예제 #5
0
 internal void HandleTextInput(string textData)
 {
     if (TerminalConnection == null)
     {
         return;
     }
     if (!TerminalConnection.Terminal.SupportsTextInput)
     {
         SendResult(new UnsupportedWebSocketInput($"Terminal '{TerminalConnection.Resource.Name}' does not support text input"));
         return;
     }
     if (TerminalConnection.Resource?.Name != Console.TypeName)
     {
         Console.Log(new WebSocketEvent(MessageType.WebSocketInput, this, textData, Encoding.UTF8.GetByteCount(textData)));
     }
     TerminalConnection.Terminal.HandleTextInput(textData);
     BytesReceived += (ulong)Encoding.UTF8.GetByteCount(textData);
 }
예제 #6
0
        /// <inheritdoc />
        /// <summary>
        /// Disposes the WebSocket. Same as Disconnect()
        /// </summary>
        public void Dispose()
        {
            if (disposed)
            {
                return;
            }
            Status = WebSocketStatus.PendingClose;
            StreamManifest?.Dispose();
            StreamManifest = null;
            var terminalName = TerminalConnection?.Resource?.Name;

            ReleaseTerminal();
            if (IsConnected)
            {
                DisconnectWebSocket(DisconnectMessage);
            }
            Status = WebSocketStatus.Closed;
            Closed = DateTime.Now;
            if (terminalName != Console.TypeName)
            {
                Console.Log(new WebSocketEvent(MessageType.WebSocketClose, this));
            }
            disposed = true;
        }