Class: IOMultiplex::IOReactor

Inherits:
Object
  • Object
show all
Includes:
Mixins::IOReactor::Read, Mixins::IOReactor::Write, Mixins::Logger
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

Buffered, TCPListener

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

Attributes included from Mixins::Logger

#logger, #logger_context

Instance Method Summary collapse

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

#idObject (readonly)

Returns the value of attribute id.



28
29
30
# File 'lib/iomultiplex/ioreactor.rb', line 28

def id
  @id
end

#ioObject (readonly)

Returns the value of attribute io.



29
30
31
# File 'lib/iomultiplex/ioreactor.rb', line 29

def io
  @io
end

#modeObject (readonly)

Returns the value of attribute mode.



30
31
32
# File 'lib/iomultiplex/ioreactor.rb', line 30

def mode
  @mode
end

#peerObject (readonly)

Returns the value of attribute peer.



31
32
33
# File 'lib/iomultiplex/ioreactor.rb', line 31

def peer
  @peer
end

Instance Method Details

#addrObject



57
58
59
# File 'lib/iomultiplex/ioreactor.rb', line 57

def addr
  @io.addr
end

#attach(multiplexer) ⇒ Object

Raises:

  • (ArgumentError)


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

#closeObject



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

#detachObject

Raises:

  • (ArgumentError)


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_closeObject



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

#peeraddrObject



61
62
63
# File 'lib/iomultiplex/ioreactor.rb', line 61

def peeraddr
  @io.peeraddr
end