Class: IChannel
- Inherits:
-
Object
- Object
- IChannel
- Defined in:
- lib/ichannel.rb,
lib/ichannel/version.rb
Constant Summary collapse
- VERSION =
"5.1.0"
Instance Method Summary collapse
-
#close ⇒ Boolean
Close the channel.
-
#closed? ⇒ Boolean
Returns true when the channel is closed.
-
#initialize(serializer) ⇒ IChannel
constructor
A new instance of IChannel.
-
#readable? ⇒ Boolean
Returns true when the channel is readable.
-
#recv ⇒ Object
(also: #get)
Receive an object from the channel.
-
#recv!(timeout = 0.1) ⇒ Object
(also: #get!)
Receive an object from the channel.
-
#write(object) ⇒ Object
(also: #put)
Add an object to the channel.
-
#write!(object, timeout = 0.1) ⇒ Object
(also: #put!)
Add an object to the channel.
Constructor Details
#initialize(serializer) ⇒ IChannel
Returns a new instance of IChannel.
11 12 13 14 |
# File 'lib/ichannel.rb', line 11 def initialize(serializer) @reader, @writer = UNIXSocket.pair Socket::SOCK_DGRAM @serializer = serializer end |
Instance Method Details
#close ⇒ Boolean
Close the channel.
31 32 33 34 35 36 37 |
# File 'lib/ichannel.rb', line 31 def close unless closed? @reader.close @writer.close true end end |
#closed? ⇒ Boolean
Returns true when the channel is closed.
20 21 22 |
# File 'lib/ichannel.rb', line 20 def closed? @reader.closed? && @writer.closed? end |
#readable? ⇒ Boolean
Returns true when the channel is readable.
136 137 138 139 140 141 142 143 |
# File 'lib/ichannel.rb', line 136 def readable? if @reader.closed? false else readable, _ = IO.select [@reader], nil, nil, 0 !! readable end end |
#recv ⇒ Object Also known as: get
Receive an object from the channel.
94 95 96 |
# File 'lib/ichannel.rb', line 94 def recv recv!(nil) end |
#recv!(timeout = 0.1) ⇒ Object Also known as: get!
Receive an object from the channel.
Unlike #recv, which waits indefinitely until the channel becomes readable, this method will raise an IOError when timeout seconds elapse and the channel remains unreadable.
118 119 120 121 122 123 124 125 126 127 128 129 |
# File 'lib/ichannel.rb', line 118 def recv!(timeout = 0.1) if @reader.closed? raise IOError, 'The channel cannot be read from (closed).' end readable, _ = IO.select [@reader], nil, nil, timeout if readable msg = readable[0].readline(SEP).chomp SEP @serializer.load msg else raise IOError, 'The channel cannot be read from.' end end |
#write(object) ⇒ Object Also known as: put
Add an object to the channel.
48 49 50 |
# File 'lib/ichannel.rb', line 48 def write(object) write!(object, nil) end |
#write!(object, timeout = 0.1) ⇒ Object Also known as: put!
Add an object to the channel.
Unlike #write, which waits indefinitely until the channel becomes writable, this method will raise an IOError when timeout seconds elapse and the channel remains unwritable.
71 72 73 74 75 76 77 78 79 80 81 82 |
# File 'lib/ichannel.rb', line 71 def write!(object, timeout = 0.1) if @writer.closed? raise IOError, 'The channel cannot be written to (closed).' end _, writable, _ = IO.select nil, [@writer], nil, timeout if writable msg = @serializer.dump(object) writable[0].syswrite "#{msg}#{SEP}" else raise IOError, 'The channel cannot be written to.' end end |