Module: Ruflet::Protocol
- Defined in:
- lib/ruflet_protocol/ruflet/protocol.rb
Constant Summary collapse
- ACTIONS =
{ register_client: 1, patch_control: 2, control_event: 3, update_control: 4, invoke_control_method: 5, session_crashed: 6, python_output: 7, # Legacy JSON protocol aliases kept for compatibility. register_web_client: "registerWebClient", page_event_from_web: "pageEventFromWeb", update_control_props: "updateControlProps" }.freeze
Class Method Summary collapse
- .action_code(action) ⇒ Object
- .normalize_control_event_payload(payload) ⇒ Object
- .normalize_invoke_method_payload(payload) ⇒ Object
- .normalize_invoke_method_result_payload(payload) ⇒ Object
- .normalize_patch_control_payload(payload) ⇒ Object
- .normalize_python_output_payload(payload) ⇒ Object
- .normalize_register_payload(payload) ⇒ Object
- .normalize_session_crashed_payload(payload) ⇒ Object
- .normalize_update_control_payload(payload) ⇒ Object
- .pack_message(action:, payload:) ⇒ Object
- .register_response(session_id:, page_patch: nil, error: nil) ⇒ Object
Class Method Details
.action_code(action) ⇒ Object
26 27 28 29 30 |
# File 'lib/ruflet_protocol/ruflet/protocol.rb', line 26 def action_code(action) return action if action.is_a?(Integer) || action.is_a?(String) ACTIONS.fetch(action) end |
.normalize_control_event_payload(payload) ⇒ Object
52 53 54 55 56 57 58 |
# File 'lib/ruflet_protocol/ruflet/protocol.rb', line 52 def normalize_control_event_payload(payload) { "target" => payload["target"] || payload["eventTarget"], "name" => payload["name"] || payload["eventName"], "data" => payload["data"] || payload["eventData"] } end |
.normalize_invoke_method_payload(payload) ⇒ Object
74 75 76 77 78 79 80 81 82 |
# File 'lib/ruflet_protocol/ruflet/protocol.rb', line 74 def normalize_invoke_method_payload(payload) { "control_id" => payload["control_id"] || payload[:control_id], "call_id" => payload["call_id"] || payload[:call_id], "name" => payload["name"] || payload[:name], "args" => payload.key?("args") ? payload["args"] : payload[:args], "timeout" => payload.key?("timeout") || payload.key?(:timeout) ? (payload["timeout"] || payload[:timeout]) : 10 } end |
.normalize_invoke_method_result_payload(payload) ⇒ Object
84 85 86 87 88 89 90 91 |
# File 'lib/ruflet_protocol/ruflet/protocol.rb', line 84 def normalize_invoke_method_result_payload(payload) { "control_id" => payload["control_id"] || payload[:control_id], "call_id" => payload["call_id"] || payload[:call_id], "result" => payload.key?("result") ? payload["result"] : payload[:result], "error" => payload.key?("error") ? payload["error"] : payload[:error] } end |
.normalize_patch_control_payload(payload) ⇒ Object
67 68 69 70 71 72 |
# File 'lib/ruflet_protocol/ruflet/protocol.rb', line 67 def normalize_patch_control_payload(payload) { "id" => payload["id"] || payload[:id], "patch" => Array(payload["patch"] || payload[:patch]) } end |
.normalize_python_output_payload(payload) ⇒ Object
99 100 101 102 103 104 |
# File 'lib/ruflet_protocol/ruflet/protocol.rb', line 99 def normalize_python_output_payload(payload) { "text" => payload["text"] || payload[:text].to_s, "is_stderr" => payload.key?("is_stderr") || payload.key?(:is_stderr) ? !!(payload["is_stderr"] || payload[:is_stderr]) : false } end |
.normalize_register_payload(payload) ⇒ Object
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/ruflet_protocol/ruflet/protocol.rb', line 32 def normalize_register_payload(payload) page = payload["page"] || {} { "session_id" => payload["session_id"], "page_name" => payload["page_name"] || "", "route" => page["route"] || "/", "width" => page["width"], "height" => page["height"], "platform" => page["platform"], "platform_brightness" => page["platform_brightness"], # The Flutter client reports the host OS in "platform" even inside a # browser, so "web" is the only reliable way to tell a web client from a # native one. (pwa/wasm passed through for completeness.) "web" => page["web"], "pwa" => page["pwa"], "wasm" => page["wasm"], "media" => page["media"] || {} } end |
.normalize_session_crashed_payload(payload) ⇒ Object
93 94 95 96 97 |
# File 'lib/ruflet_protocol/ruflet/protocol.rb', line 93 def normalize_session_crashed_payload(payload) { "message" => payload["message"] || payload[:message].to_s } end |
.normalize_update_control_payload(payload) ⇒ Object
60 61 62 63 64 65 |
# File 'lib/ruflet_protocol/ruflet/protocol.rb', line 60 def normalize_update_control_payload(payload) { "id" => payload["id"] || payload["target"] || payload["eventTarget"], "props" => payload["props"].is_a?(Hash) ? payload["props"] : {} } end |
.pack_message(action:, payload:) ⇒ Object
22 23 24 |
# File 'lib/ruflet_protocol/ruflet/protocol.rb', line 22 def (action:, payload:) [action_code(action), payload] end |
.register_response(session_id:, page_patch: nil, error: nil) ⇒ Object
106 107 108 109 110 111 112 113 |
# File 'lib/ruflet_protocol/ruflet/protocol.rb', line 106 def register_response(session_id:, page_patch: nil, error: nil) page_patch ||= {} { "session_id" => session_id, "page_patch" => page_patch, "error" => error } end |