Class: Browserctl::CommandDispatcher

Inherits:
Object
  • Object
show all
Defined in:
lib/browserctl/server/command_dispatcher.rb

Constant Summary collapse

COMMAND_MAP =
{
  "open_page" => :cmd_open_page,
  "close_page" => :cmd_close_page,
  "list_pages" => :cmd_list_pages,
  "goto" => :cmd_goto,
  "snapshot" => :cmd_snapshot,
  "evaluate" => :cmd_evaluate,
  "fill" => :cmd_fill,
  "click" => :cmd_click,
  "screenshot" => :cmd_screenshot,
  "wait_for" => :cmd_wait_for,
  "watch" => :cmd_watch,
  "url" => :cmd_url,
  "ping" => :cmd_ping,
  "shutdown" => :cmd_shutdown,
  "pause" => :cmd_pause,
  "resume" => :cmd_resume,
  "inspect" => :cmd_inspect,
  "cookies" => :cmd_cookies,
  "set_cookie" => :cmd_set_cookie,
  "clear_cookies" => :cmd_clear_cookies
}.freeze
SCREENSHOT_DIR =
File.expand_path("~/.browserctl/screenshots").freeze
SCREENSHOT_EXTS =
%w[.png .jpg .jpeg].freeze
CLOUDFLARE_SIGNALS =
[
  "cf-challenge-running",
  "cf_chl_opt",
  "__cf_chl_f_tk",
  "Just a moment..."
].freeze

Instance Method Summary collapse

Constructor Details

#initialize(pages, browser, snapshot_builder = SnapshotBuilder.new, global_mutex: Mutex.new) ⇒ CommandDispatcher

Returns a new instance of CommandDispatcher.



40
41
42
43
44
45
# File 'lib/browserctl/server/command_dispatcher.rb', line 40

def initialize(pages, browser, snapshot_builder = SnapshotBuilder.new, global_mutex: Mutex.new)
  @pages            = pages
  @browser          = browser
  @snapshot_builder = snapshot_builder
  @global_mutex     = global_mutex
end

Instance Method Details

#dispatch(req) ⇒ Object



47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/browserctl/server/command_dispatcher.rb', line 47

def dispatch(req)
  handler = COMMAND_MAP[req[:cmd]]
  if handler
    Browserctl.logger.debug("#{req[:cmd]} #{req[:name]}")
    return send(handler, req)
  end

  if (plugin = Browserctl::PLUGIN_COMMANDS[req[:cmd]])
    Browserctl.logger.debug("plugin:#{req[:cmd]} #{req[:name]}")
    session = req[:name] ? @global_mutex.synchronize { @pages[req[:name]] } : nil
    return plugin.call(session, req)
  end

  { error: "unknown command: #{req[:cmd]}" }
end