Class: Rexec::TerminalService

Inherits:
Object
  • Object
show all
Defined in:
lib/rexec/terminal.rb

Overview

Service for terminal WebSocket connections.

Instance Method Summary collapse

Constructor Details

#initialize(client) ⇒ TerminalService

Returns a new instance of TerminalService.



91
92
93
# File 'lib/rexec/terminal.rb', line 91

def initialize(client)
  @client = client
end

Instance Method Details

#connect(container_id, cols: 80, rows: 24) ⇒ Terminal

Connect to a container's terminal.

Examples:

terminal = client.terminal.connect(container.id)
terminal.on_data { |data| print data }
terminal.write("ls -la\n")

Parameters:

  • container_id (String)

    Container ID

  • cols (Integer) (defaults to: 80)

    Terminal width (default: 80)

  • rows (Integer) (defaults to: 24)

    Terminal height (default: 24)

Returns:



106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
# File 'lib/rexec/terminal.rb', line 106

def connect(container_id, cols: 80, rows: 24)
  begin
    require "websocket-client-simple"
  rescue LoadError
    raise LoadError, "websocket-client-simple is required for terminal connections (gem install websocket-client-simple)"
  end
  ws_url = @client.ws_url("/ws/terminal/#{container_id}")

  ws = WebSocket::Client::Simple.connect(ws_url, headers: {
    "Authorization" => "Bearer #{@client.token}"
  })

  terminal = Terminal.new(ws)

  # Wait for connection
  sleep 0.1 until ws.open?

  # Set initial size
  terminal.resize(cols, rows)

  terminal
end