Class: Lanet::Sender

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

Overview

Sender class for UDP message transmission

Defined Under Namespace

Classes: SendError

Instance Method Summary collapse

Constructor Details

#initialize(port) ⇒ Sender

Returns a new instance of Sender.



10
11
12
13
14
15
# File 'lib/lanet/sender.rb', line 10

def initialize(port)
  @port = port
  @socket = nil
  @closed = false
  initialize_socket
end

Instance Method Details

#broadcast(message) ⇒ Object



29
30
31
# File 'lib/lanet/sender.rb', line 29

def broadcast(message)
  send_to("255.255.255.255", message)
end

#closeObject



33
34
35
36
37
38
# File 'lib/lanet/sender.rb', line 33

def close
  return if @closed

  @socket&.close
  @closed = true
end

#closed?Boolean

Returns:

  • (Boolean)


40
41
42
# File 'lib/lanet/sender.rb', line 40

def closed?
  @closed
end

#send_to(target_ip, message) ⇒ Object



17
18
19
20
21
22
23
24
25
26
27
# File 'lib/lanet/sender.rb', line 17

def send_to(target_ip, message)
  raise SendError, "Sender is closed" if @closed
  raise ArgumentError, "Invalid IP address" if target_ip.nil? || target_ip.empty?
  raise ArgumentError, "Message cannot be nil" if message.nil?

  @socket.send(message, 0, target_ip, @port)
rescue Errno::ENETUNREACH, Errno::EHOSTUNREACH => e
  raise SendError, "Network unreachable: #{e.message}"
rescue StandardError => e
  raise SendError, "Failed to send message: #{e.message}"
end