class Playwright::WebSocketTransport
ref: github.com/microsoft/playwright-python/blob/master/playwright/_impl/_transport.py
Public Class Methods
new(ws_endpoint:)
click to toggle source
@param ws_endpoint [String] EndpointURL of WebSocket
# File lib/playwright/web_socket_transport.rb, line 9 def initialize(ws_endpoint:) @ws_endpoint = ws_endpoint @debug = ENV['DEBUG'].to_s == 'true' || ENV['DEBUG'].to_s == '1' end
Public Instance Methods
async_run()
click to toggle source
Start `playwright-cli run-driver`
@note This method blocks until playwright-cli exited. Consider using Thread or Future.
# File lib/playwright/web_socket_transport.rb, line 58 def async_run ws = WebSocketClient.new( url: @ws_endpoint, max_payload_size: 256 * 1024 * 1024, # 256MB ) promise = Concurrent::Promises.resolvable_future ws.on_open do promise.fulfill(ws) end ws.on_error do |error_message| promise.reject(WebSocketClient::TransportError.new(error_message)) end # Some messages can be sent just after start, before setting @ws.on_message # So set this handler before ws.start. ws.on_message do |data| handle_on_message(data) end ws.start @ws = promise.value! @ws.on_error do |error| puts "[WebSocketTransport] error: #{error}" @on_driver_crashed&.call end rescue Errno::ECONNREFUSED => err raise WebSocketClient::TransportError.new(err) end
on_driver_crashed(&block)
click to toggle source
# File lib/playwright/web_socket_transport.rb, line 18 def on_driver_crashed(&block) @on_driver_crashed = block end
on_message_received(&block)
click to toggle source
# File lib/playwright/web_socket_transport.rb, line 14 def on_message_received(&block) @on_message = block end
send_message(message)
click to toggle source
@param message [Hash]
# File lib/playwright/web_socket_transport.rb, line 25 def send_message(message) debug_send_message(message) if @debug msg = JSON.dump(message) @ws.send_text(msg) rescue Errno::EPIPE, IOError raise AlreadyDisconnectedError.new('send_message failed') end
stop()
click to toggle source
Terminate playwright-cli driver.
# File lib/playwright/web_socket_transport.rb, line 35 def stop return unless @ws future = Concurrent::Promises.resolvable_future @ws.on_close do future.fulfill(nil) end begin @ws.close rescue EOFError => err # ignore EOLError. The connection is already closed. future.fulfill(err) end # Wait for closed actually. future.value! end
Private Instance Methods
debug_recv_message(message)
click to toggle source
# File lib/playwright/web_socket_transport.rb, line 100 def debug_recv_message(message) puts "\x1b[33mRECV>\x1b[0m#{message}" end
debug_send_message(message)
click to toggle source
# File lib/playwright/web_socket_transport.rb, line 96 def debug_send_message(message) puts "\x1b[33mSEND>\x1b[0m#{message}" end
handle_on_message(data)
click to toggle source
# File lib/playwright/web_socket_transport.rb, line 89 def handle_on_message(data) obj = JSON.parse(data) debug_recv_message(obj) if @debug @on_message&.call(obj) end