Module: Hydra::MessagingIO

Included in:
Pipe, SSH, Stdio
Defined in:
lib/hydra/messaging_io.rb

Overview

Module that implemets methods that auto-serialize and deserialize messaging objects.

Defined Under Namespace

Classes: UnprocessableMessage

Instance Method Summary collapse

Instance Method Details

#closeObject

Closes the IO object.


36
37
38
39
# File 'lib/hydra/messaging_io.rb', line 36

def close
  @reader.close if @reader
  @writer.close if @writer
end

#getsObject

Read a Message from the input IO object. Automatically build a message from the response and return it.

IO.gets
  => Hydra::Message # or subclass

10
11
12
13
14
15
16
17
18
19
20
21
22
# File 'lib/hydra/messaging_io.rb', line 10

def gets
  while true
    begin
      raise IOError unless @reader
      message = @reader.gets
      return nil unless message
      return Message.build(eval(message.chomp))
    rescue SyntaxError, NameError
      # uncomment to help catch remote errors by seeing all traffic
      #$stderr.write "Not a message: [#{message.inspect}]\n"
    end
  end
end

#write(message) ⇒ Object

Write a Message to the output IO object. It will automatically serialize a Message object.

IO.write Hydra::Message.new

27
28
29
30
31
32
33
# File 'lib/hydra/messaging_io.rb', line 27

def write(message)
  raise IOError unless @writer
  raise UnprocessableMessage unless message.is_a?(Hydra::Message)
  @writer.write(message.serialize+"\n")
rescue Errno::EPIPE
  raise IOError
end