Class: IOMultiplex::IOReactor
- Inherits:
-
Object
- Object
- IOMultiplex::IOReactor
- Defined in:
- lib/iomultiplex/ioreactor.rb,
lib/iomultiplex/ioreactor/openssl.rb,
lib/iomultiplex/ioreactor/buffered.rb
Overview
IOReactor - reactor style wrapper around IO objects
Direct Known Subclasses
Defined Under Namespace
Classes: Buffered, OpenSSL, OpenSSLUpgrading
Constant Summary
Constants included from Mixins::IOReactor::Write
Mixins::IOReactor::Write::WRITE_BUFFER_MAX, Mixins::IOReactor::Write::WRITE_SIZE
Constants included from Mixins::IOReactor::Read
Mixins::IOReactor::Read::READ_BUFFER_MAX, Mixins::IOReactor::Read::READ_SIZE
Instance Attribute Summary collapse
-
#id ⇒ Object
readonly
Returns the value of attribute id.
-
#io ⇒ Object
readonly
Returns the value of attribute io.
-
#mode ⇒ Object
readonly
Returns the value of attribute mode.
-
#peer ⇒ Object
readonly
Returns the value of attribute peer.
Attributes included from Mixins::Logger
Instance Method Summary collapse
- #addr ⇒ Object
- #attach(multiplexer) ⇒ Object
- #close ⇒ Object
- #detach ⇒ Object
- #force_close ⇒ Object
-
#initialize(io, mode = 'rw', id = nil) ⇒ IOReactor
constructor
A new instance of IOReactor.
- #peeraddr ⇒ Object
Methods included from Mixins::IOReactor::Write
#handle_write, #write, #write_full?
Methods included from Mixins::IOReactor::Read
#discard, #handle_data, #handle_read, #pause, #read, #read_full?, #resume
Constructor Details
#initialize(io, mode = 'rw', id = nil) ⇒ IOReactor
Returns a new instance of IOReactor.
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
# File 'lib/iomultiplex/ioreactor.rb', line 33 def initialize(io, mode = 'rw', id = nil) @io = io @multiplexer = nil @attached = false @close_scheduled = false @eof_scheduled = false @exception = nil @r = mode.index('r').nil? ? false : true @w = mode.index('w').nil? ? false : true if @r @read_buffer = StringBuffer.new @pause = false end if @w @write_buffer = StringBuffer.new @write_immediately = true end @id = id || calculate_id nil end |
Instance Attribute Details
#id ⇒ Object (readonly)
Returns the value of attribute id.
28 29 30 |
# File 'lib/iomultiplex/ioreactor.rb', line 28 def id @id end |
#io ⇒ Object (readonly)
Returns the value of attribute io.
29 30 31 |
# File 'lib/iomultiplex/ioreactor.rb', line 29 def io @io end |
#mode ⇒ Object (readonly)
Returns the value of attribute mode.
30 31 32 |
# File 'lib/iomultiplex/ioreactor.rb', line 30 def mode @mode end |
#peer ⇒ Object (readonly)
Returns the value of attribute peer.
31 32 33 |
# File 'lib/iomultiplex/ioreactor.rb', line 31 def peer @peer end |
Instance Method Details
#addr ⇒ Object
57 58 59 |
# File 'lib/iomultiplex/ioreactor.rb', line 57 def addr @io.addr end |
#attach(multiplexer) ⇒ Object
65 66 67 68 69 70 71 72 73 74 75 76 |
# File 'lib/iomultiplex/ioreactor.rb', line 65 def attach(multiplexer) raise ArgumentError, 'Socket is already attached' if @attached @multiplexer = multiplexer initialize_logger multiplexer.logger, multiplexer.logger_context.dup add_logger_context 'client', @id @multiplexer.wait_read self if @r @attached = true nil end |
#close ⇒ Object
84 85 86 87 88 89 90 91 92 |
# File 'lib/iomultiplex/ioreactor.rb', line 84 def close @read_buffer.reset if !@w @close_scheduled = true else force_close end nil end |
#detach ⇒ Object
78 79 80 81 82 |
# File 'lib/iomultiplex/ioreactor.rb', line 78 def detach raise ArgumentError, 'Socket is not yet attached' unless @attached @attached = false nil end |
#force_close ⇒ Object
94 95 96 97 98 |
# File 'lib/iomultiplex/ioreactor.rb', line 94 def force_close @multiplexer.remove self @io.close unless @io.closed? nil end |
#peeraddr ⇒ Object
61 62 63 |
# File 'lib/iomultiplex/ioreactor.rb', line 61 def peeraddr @io.peeraddr end |