Class: UV::DatagramConnection

Inherits:
Connection show all
Defined in:
lib/uv-rays/connection.rb

Instance Attribute Summary

Attributes inherited from Connection

#using_tls

Instance Method Summary collapse

Methods inherited from Connection

#close_connection, #on_read, #pause, #paused?, #post_init, #resume

Constructor Details

#initialize(server = nil, port = nil) ⇒ DatagramConnection

Returns a new instance of DatagramConnection.



162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
# File 'lib/uv-rays/connection.rb', line 162

def initialize(server = nil, port = nil)
    super()

    @reactor = reactor
    @transport = @reactor.udp
    @transport.progress { |*args| on_read(*args) }

    if not server.nil?
        server = '127.0.0.1' if server == 'localhost'
        raise ArgumentError, "Invalid server address #{server}" unless IPAddress.valid?(server)
        @transport.bind(server, port)
    end

    @transport.start_read
end

Instance Method Details

#send_datagram(data, recipient_address, recipient_port) ⇒ Object



178
179
180
181
182
183
184
185
186
187
188
# File 'lib/uv-rays/connection.rb', line 178

def send_datagram(data, recipient_address, recipient_port)
    if IPAddress.valid? recipient_address
        @transport.send recipient_address, recipient_port, data
    else
        # Async DNS resolution
        # Note:: send here will chain the promise
        @reactor.lookup(recipient_address).then do |result|
            @transport.send result[0][0], recipient_port, data
        end
    end
end