Module: ASIR::Transport::PayloadIO
- Included in:
- ConnectionOriented, File
- Defined in:
- lib/asir/transport/payload_io.rb
Overview
!SLIDE Payload IO for Transport
Framing
-
Header line containing the number of bytes in the payload.
-
The payload bytes.
-
Blank line.
-
Footer.
Defined Under Namespace
Classes: UnexpectedResponse
Constant Summary collapse
- HEADER =
"# asir_payload_size: "
- FOOTER =
"\n# asir_payload_end"
Instance Method Summary collapse
- #_read(stream, state) ⇒ Object
- #_read_line_and_expect!(stream, regexp) ⇒ Object
- #_write(payload, stream, state) ⇒ Object
-
#close ⇒ Object
!SLIDE pause.
Instance Method Details
#_read(stream, state) ⇒ Object
26 27 28 29 30 31 32 |
# File 'lib/asir/transport/payload_io.rb', line 26 def _read stream, state size = /\d+$/.match(stream.readline.chomp)[0].to_i # HEADER (size) payload = stream.read(size) stream.readline # FOOTER stream.readline payload end |
#_read_line_and_expect!(stream, regexp) ⇒ Object
34 35 36 37 38 39 40 41 |
# File 'lib/asir/transport/payload_io.rb', line 34 def _read_line_and_expect! stream, regexp line = stream.readline unless match = regexp.match(line) _log { "_read_line_and_expect! #{stream} #{regexp.inspect} !~ #{line.inspect}" } raise UnexpectedResponse, "expected #{regexp.inspect}, received #{line.inspect}" end match end |
#_write(payload, stream, state) ⇒ Object
17 18 19 20 21 22 23 24 |
# File 'lib/asir/transport/payload_io.rb', line 17 def _write payload, stream, state stream.write HEADER stream.puts payload.size stream.write payload stream.puts FOOTER stream.flush stream end |
#close ⇒ Object
!SLIDE pause
44 45 46 47 48 49 50 51 |
# File 'lib/asir/transport/payload_io.rb', line 44 def close if @stream _before_close! stream if respond_to?(:_before_close!) @stream.close end ensure @stream = nil unless Channel === @stream end |