Class: Takagi::Observer::Sender

Inherits:
Object
  • Object
show all
Defined in:
lib/takagi/observer/sender.rb

Overview

Dispatches outbound notifications to subscribed observers. Supports multiple transports (UDP, TCP, etc.) via transport registry.

Instance Method Summary collapse

Constructor Details

#initialize(transport: :udp) ⇒ Sender

Returns a new instance of Sender.



8
9
10
11
12
13
14
15
16
17
18
# File 'lib/takagi/observer/sender.rb', line 8

def initialize(transport: :udp)
  @transport = transport
  # NEW: Use transport registry to get appropriate sender
  transport_class = Takagi::Network::Registry.get(@transport)
  transport_impl = transport_class.new
  @sender = transport_impl.create_sender
rescue Takagi::Network::Registry::TransportNotFoundError
  # Fallback to UDP if transport not found
  Takagi.logger.warn "Transport #{@transport} not found, using UDP"
  @sender = Takagi::Network::UdpSender.instance
end

Instance Method Details

#send_packet(subscriber, value) ⇒ Object



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/takagi/observer/sender.rb', line 20

def send_packet(subscriber, value)
  # Get transport from subscriber metadata, or use instance default
  transport = subscriber[:transport] || @transport

  message = Takagi::Message::Outbound.new(
    code: '2.05',
    payload: value.to_s,
    token: subscriber[:token],
    message_id: rand(0..0xFFFF),
    type: 1, # NON
    transport: transport
  )

  @sender.transmit(message, subscriber[:address], subscriber[:port])
rescue StandardError => e
  Takagi.logger.error "Observer Notify Error: #{e.message}"
end