class DCase::Local

Constants

MAX_PACKET_SIZE

Attributes

crypto[RW]
socket[RW]

Public Class Methods

new(addr, port, crypto, config) click to toggle source
# File lib/dcase/local.rb, line 9
def initialize(addr, port, crypto, config)
  @socket = UDPSocket.new
  @socket.to_io.setsockopt(:SOCKET, :REUSEADDR, 1)
  @socket.bind(addr, port)
  @crypto = crypto
  @config = config

  async.run
end

Public Instance Methods

handle_data(data, port, addr) click to toggle source
# File lib/dcase/local.rb, line 26
def handle_data(data, port, addr)
  connector = UDPSocket.new
  connector.send crypto.encrypt(data), 0, @config.server, @config.port

  async.request(connector, port, addr)
end
request(connector, port, addr) click to toggle source
# File lib/dcase/local.rb, line 33
def request(connector, port, addr)
  data, (_, _port, _addr) = connector.recvfrom(16384)
  @socket.send crypto.decrypt(data), 0, addr, port
  connector.close unless connector.closed?
end
run() click to toggle source
# File lib/dcase/local.rb, line 19
def run
  loop do
    data, (_, port, addr) = @socket.recvfrom(MAX_PACKET_SIZE)
    handle_data(data, port, addr)
  end
end