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

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



46
47
48
49
50
51
52
# File 'lib/ruflet_protocol/ruflet/protocol.rb', line 46

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



68
69
70
71
72
73
74
75
76
# File 'lib/ruflet_protocol/ruflet/protocol.rb', line 68

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



78
79
80
81
82
83
84
85
# File 'lib/ruflet_protocol/ruflet/protocol.rb', line 78

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



61
62
63
64
65
66
# File 'lib/ruflet_protocol/ruflet/protocol.rb', line 61

def normalize_patch_control_payload(payload)
  {
    "id" => payload["id"] || payload[:id],
    "patch" => Array(payload["patch"] || payload[:patch])
  }
end

.normalize_python_output_payload(payload) ⇒ Object



93
94
95
96
97
98
# File 'lib/ruflet_protocol/ruflet/protocol.rb', line 93

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
# 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"],
    "media" => page["media"] || {}
  }
end

.normalize_session_crashed_payload(payload) ⇒ Object



87
88
89
90
91
# File 'lib/ruflet_protocol/ruflet/protocol.rb', line 87

def normalize_session_crashed_payload(payload)
  {
    "message" => payload["message"] || payload[:message].to_s
  }
end

.normalize_update_control_payload(payload) ⇒ Object



54
55
56
57
58
59
# File 'lib/ruflet_protocol/ruflet/protocol.rb', line 54

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 pack_message(action:, payload:)
  [action_code(action), payload]
end

.register_response(session_id:, page_patch: {}, error: nil) ⇒ Object



100
101
102
103
104
105
106
# File 'lib/ruflet_protocol/ruflet/protocol.rb', line 100

def register_response(session_id:, page_patch: {}, error: nil)
  {
    "session_id" => session_id,
    "page_patch" => page_patch,
    "error" => error
  }
end