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; } }
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; } }
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}'"); } }
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; }
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); }
/// <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; }