Class: Igniter::Store::Protocol::WireEnvelope
- Inherits:
-
Object
- Object
- Igniter::Store::Protocol::WireEnvelope
- Defined in:
- lib/igniter/store/protocol/wire_envelope.rb
Overview
OP3 — Wire Envelope: process boundary routing for StoreServer.
Every request is wrapped in:
{ protocol: :igniter_store, schema_version: 1,
request_id: "req_...", op: :write_fact,
packet: { kind: :fact, store: :tasks, key: "t1", value: {} } }
Every response is:
{ protocol: :igniter_store, schema_version: 1,
request_id: "req_...",
status: :ok | :error,
result: { ... } | error: "message" }
This layer sits above the CRC32-framed WireProtocol transport and below application-level handlers. It is pure Ruby — no I/O, no sockets. The StoreServer feeds deserialized hashes in and ships serialized responses out.
Constant Summary collapse
- PROTOCOL =
:igniter_store- SCHEMA_VERSION =
1- OPERATIONS =
%i[ register_descriptor write append write_fact read query resolve causation_chain lineage fact_ref metadata_snapshot descriptor_snapshot observability_snapshot sync_hub_profile replay storage_stats segment_manifest compaction_activity ].freeze
Instance Method Summary collapse
-
#dispatch(envelope) ⇒ Object
Dispatch a single envelope hash.
-
#initialize(interpreter) ⇒ WireEnvelope
constructor
A new instance of WireEnvelope.
Constructor Details
#initialize(interpreter) ⇒ WireEnvelope
Returns a new instance of WireEnvelope.
49 50 51 |
# File 'lib/igniter/store/protocol/wire_envelope.rb', line 49 def initialize(interpreter) @interpreter = interpreter end |
Instance Method Details
#dispatch(envelope) ⇒ Object
Dispatch a single envelope hash. Returns a response envelope hash (never raises).
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
# File 'lib/igniter/store/protocol/wire_envelope.rb', line 55 def dispatch(envelope) envelope = envelope.transform_keys(&:to_sym) req_id = envelope[:request_id] proto = envelope[:protocol]&.to_sym unless proto == PROTOCOL return error_response(req_id, "Unknown protocol: #{proto.inspect}") end op = envelope[:op]&.to_sym unless op && OPERATIONS.include?(op) return error_response(req_id, "Unknown or missing op: #{op.inspect}") end packet = (envelope[:packet] || {}) packet = packet.transform_keys(&:to_sym) if packet.is_a?(Hash) result = route(op, packet) ok_response(req_id, result) rescue => e error_response(req_id, "Internal error: #{e.}") end |