Class: Net::Reactor::Connection
- Inherits:
-
Object
- Object
- Net::Reactor::Connection
- Defined in:
- lib/net/reactor.rb
Constant Summary collapse
- MTU =
4096- CR =
"\015"- LF =
"\012"- EOL =
CR + LF
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
79 80 81 82 83 84 85 86 |
# File 'lib/net/reactor.rb', line 79 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.
131 132 133 |
# File 'lib/net/reactor.rb', line 131 def socket @socket end |
Instance Method Details
#disconnected ⇒ Object
delegate
127 128 129 |
# File 'lib/net/reactor.rb', line 127 def disconnected @handler.disconnected 'socket closed' end |
#handleIOEvent(io, event) ⇒ Object
88 89 90 91 92 93 94 95 96 97 98 99 100 101 |
# File 'lib/net/reactor.rb', line 88 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
114 115 116 117 118 119 120 121 122 123 124 |
# File 'lib/net/reactor.rb', line 114 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
108 109 110 111 112 |
# File 'lib/net/reactor.rb', line 108 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
103 104 105 106 |
# File 'lib/net/reactor.rb', line 103 def write msg @write_buffer << msg @reactor.enableEvents(@socket, :write) end |