Class: Net::Reactor::Connection
- Inherits:
-
Object
- Object
- Net::Reactor::Connection
- Defined in:
- lib/net/reactor.rb
Constant Summary collapse
Instance Attribute Summary collapse
-
#socket ⇒ Object
readonly
Returns the value of attribute socket.
Instance Method Summary collapse
-
#disconnected ⇒ Object
delegate.
- #handleIOEvent(io, event) ⇒ Object
- #handleRead ⇒ Object
- #handleWrite ⇒ Object
-
#initialize(socket, handler, reactor) ⇒ Connection
constructor
A new instance of Connection.
- #write(msg) ⇒ Object
Constructor Details
#initialize(socket, handler, reactor) ⇒ Connection
Returns a new instance of Connection.
85 86 87 88 89 90 91 92 |
# File 'lib/net/reactor.rb', line 85 def initialize(socket, handler, reactor) @handler = handler.new self @socket = socket @reactor = reactor @write_buffer = '' @read_buffer = '' end |
Instance Attribute Details
#socket ⇒ Object (readonly)
Returns the value of attribute socket.
137 138 139 |
# File 'lib/net/reactor.rb', line 137 def socket @socket end |
Instance Method Details
#disconnected ⇒ Object
delegate
133 134 135 |
# File 'lib/net/reactor.rb', line 133 def disconnected @handler.disconnected 'socket closed' end |
#handleIOEvent(io, event) ⇒ Object
94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
# File 'lib/net/reactor.rb', line 94 def handleIOEvent(io, event) case event when :error @handler.disconnected 'socket failed' when :read begin handleRead rescue EOFError @handler.disconnected 'connection closed by remote host' end when :write handleWrite end end |
#handleRead ⇒ Object
120 121 122 123 124 125 126 127 128 129 130 |
# File 'lib/net/reactor.rb', line 120 def handleRead lines = [] @read_buffer << @socket.sysread(MTU) if @read_buffer.index EOL lines = @read_buffer.split EOL else lines = @read_buffer end @read_buffer[0, @read_buffer.length] = '' @handler.readEvent lines end |
#handleWrite ⇒ Object
114 115 116 117 118 |
# File 'lib/net/reactor.rb', line 114 def handleWrite bytes = @socket.syswrite(@write_buffer) @write_buffer[ 0, bytes ] = '' if bytes.nonzero? @reactor.disableEvents(@socket, :write) if @write_buffer.length.zero? end |
#write(msg) ⇒ Object
109 110 111 112 |
# File 'lib/net/reactor.rb', line 109 def write msg @write_buffer << msg @reactor.enableEvents(@socket, :write) end |