class ZChannel::UNIXSocket
Constants
- SEP
Public Class Methods
new(serializer)
click to toggle source
@param [#dump,#load] serializer
Any object that implements "dump" and "load" methods.
@return [ZChannel::UNIXSocket]
# File lib/zchannel/unix_socket.rb, line 11 def initialize(serializer) @serializer = serializer @last_msg = nil @reader, @writer = ::UNIXSocket.pair :STREAM end
Public Instance Methods
close()
click to toggle source
@raise [IOError]
Raises IOError when a channel is already closed.
@return [Boolean]
Returns true when a channel is closed successfully.
# File lib/zchannel/unix_socket.rb, line 32 def close if closed? raise IOError, 'closed channel' else @reader.close @writer.close true end end
closed?()
click to toggle source
@return [Boolean]
Returns true when a channel is closed.
# File lib/zchannel/unix_socket.rb, line 21 def closed? @reader.closed? and @writer.closed? end
last_msg()
click to toggle source
@return [Object]
Reads from a channel until there are no messages left, and then returns the last read message.
# File lib/zchannel/unix_socket.rb, line 131 def last_msg @last_msg = recv while readable? @last_msg end
readable?()
click to toggle source
@return [Boolean]
Returns true when a channel has messages waiting to be read.
# File lib/zchannel/unix_socket.rb, line 140 def readable? if closed? false else readable, _ = IO.select [@reader], nil, nil, 0 !! readable end end
recv()
click to toggle source
Perform a blocking read.
@raise
(see ZChannel::UNIXSocket#recv!)
@return [Object]
# File lib/zchannel/unix_socket.rb, line 93 def recv recv!(nil) end
Also aliased as: read
recv!(timeout = 0.1)
click to toggle source
Perform a read with a timeout.
@param [Float, Fixnum] timeout
The number of seconds to wait before raising an exception.
@raise [IOError]
Raises an IOError when a channel is closed.
@raise [ZChannel::TimeoutError]
Raises ZChannel::TimeoutError when a read doesn't finish within the specified timeout.
@return [Object]
# File lib/zchannel/unix_socket.rb, line 112 def recv!(timeout = 0.1) if @reader.closed? raise IOError, 'closed channel' end readable, _ = IO.select [@reader], nil, nil, timeout if readable msg = readable[0].readline(SEP).chomp SEP @last_msg = @serializer.load msg else raise ZChannel::TimeoutError, "timeout, waited #{timeout} seconds" end end
Also aliased as: read!
send(object)
click to toggle source
Perform a blocking write.
@raise [IOError]
(see #send!)
@param [Object] object
An object to write to a channel.
# File lib/zchannel/unix_socket.rb, line 51 def send(object) send!(object, nil) end
Also aliased as: write
send!(object, timeout = 0.1)
click to toggle source
Perform a write with a timeout.
@param [Object] object
An object to write to a channel.
@param [Float, Fixnum] timeout
The number of seconds to wait before raising an exception.
@raise [IOError]
Raises an IOError when a channel is closed.
@raise [ZChannel::TimeoutError]
Raises a ZChannel::TimeoutError when a write doesn't finish within the specified timeout.
# File lib/zchannel/unix_socket.rb, line 71 def send!(object, timeout = 0.1) if @writer.closed? raise IOError, 'closed channel' end _, writable, _ = IO.select nil, [@writer], nil, timeout if writable msg = @serializer.dump(object) writable[0].syswrite "#{msg}#{SEP}" else raise ZChannel::TimeoutError, "timeout, waited #{timeout} seconds" end end
Also aliased as: write!