Class: GReactor::ListenerIO

Inherits:
BasicIO
  • Object
show all
Defined in:
lib/greactor/io_wrappers.rb

Overview

a basic Listening IO

Direct Known Subclasses

SSLListenerIO

Instance Attribute Summary

Attributes inherited from BasicIO

#cache, #io, #locker, #params, #timeout

Instance Method Summary collapse

Methods inherited from BasicIO

#[], #[]=, #close, #closed?, #read, #ssl?, #timeout?, #write

Constructor Details

#initialize(io, params = {}) ⇒ ListenerIO

Returns a new instance of ListenerIO.


112
113
114
115
# File 'lib/greactor/io_wrappers.rb', line 112

def initialize io, params = {}
	@io, @params, @locker, @cache = io, params, Mutex.new(), {}
	GReactor.info "Started Listening on port #{params[:port]}."
end

Instance Method Details

#callObject


123
124
125
126
127
128
129
130
131
132
133
134
135
# File 'lib/greactor/io_wrappers.rb', line 123

def call
	s = nil
	begin
		@locker.synchronize { loop { s = @io.accept_nonblock(); GReactor.add_io s, @params.dup ; s = nil;} }
		# @locker.synchronize { loop { GReactor.add_io @io.accept_nonblock(), @params.dup } }
	rescue Errno::EWOULDBLOCK => e

	rescue => e
		GReactor.warn "#{e.message} - There are #{GReactor.count_ios} registered open IO objects."
	ensure
		(s.close if s && !s.closed? ) rescue true
	end
end

#clear?Boolean

ignores timeouts.

Returns:

  • (Boolean)

117
118
119
# File 'lib/greactor/io_wrappers.rb', line 117

def clear?
	@io.closed? || (@io.stat.mode < 0140666 ) rescue true
end

#on_disconnectObject


120
121
122
# File 'lib/greactor/io_wrappers.rb', line 120

def on_disconnect
	GReactor.info "Stoped Listening to port #{params[:port]}."
end