class Qpid::Proton::Container::ListenTask

Attributes

listener[R]

Public Class Methods

new(io, handler, container) click to toggle source
# File lib/core/container.rb, line 277
def initialize(io, handler, container)
  @io, @handler = io, handler
  @listener = Listener.new(io, container)
  env = ENV['PN_TRACE_EVT']
  if env && ["true", "1", "yes", "on"].include?(env.downcase)
    @log_prefix = "[0x#{object_id.to_s(16)}](PN_LISTENER_"
  else
    @log_prefix = nil
  end
  dispatch(:on_open);
end

Public Instance Methods

can_read?() click to toggle source
# File lib/core/container.rb, line 313
def can_read?() !finished?; end
can_write?() click to toggle source
# File lib/core/container.rb, line 314
def can_write?() false; end
close(e=nil) click to toggle source

Close listener and force immediate close of socket

# File lib/core/container.rb, line 326
def close(e=nil)
  @listener.close(e)
  @io.close rescue nil
end
closed?() click to toggle source
# File lib/core/container.rb, line 292
def closed?() @io.closed?; end
closing?() click to toggle source
# File lib/core/container.rb, line 290
def closing?() @listener.instance_variable_get(:@closing); end
condition() click to toggle source
# File lib/core/container.rb, line 291
def condition() @listener.instance_variable_get(:@condition); end
dispatch(method, *args) click to toggle source
# File lib/core/container.rb, line 317
def dispatch(method, *args)
  # TODO aconway 2017-11-27: better logging
  STDERR.puts "#{@log_prefix}#{([method[3..-1].upcase]+args).join ', '})" if @log_prefix
  @handler.__send__(method, self, *args) if @handler && @handler.respond_to?(method)
end
finished?() click to toggle source
# File lib/core/container.rb, line 315
def finished?() closed?; end
next_tick() click to toggle source
# File lib/core/container.rb, line 323
def next_tick() nil; end
process() click to toggle source
# File lib/core/container.rb, line 294
def process
  return if closed?
  unless closing?
    begin
      return @io.accept, dispatch(:on_accept)
    rescue IO::WaitReadable, Errno::EINTR
    rescue StandardError => e
      @listener.close(e)
    end
  end
ensure
  if closing?
    @io.close rescue nil
    @listener.instance_variable_set(:@closed, true)
    dispatch(:on_error, condition) if condition
    dispatch(:on_close)
  end
end