class Tros::IPC::FramedReader

Attributes

reader[R]

Public Class Methods

new(reader) click to toggle source
    # File lib/tros/ipc.rb
501 def initialize(reader)
502   @reader = reader
503 end

Public Instance Methods

read_framed_message() click to toggle source
    # File lib/tros/ipc.rb
505 def read_framed_message
506   message = []
507   loop do
508     buffer = ""
509     buffer_size = read_buffer_size
510 
511     return message.join if buffer_size == 0
512 
513     while buffer.size < buffer_size
514       chunk = reader.read(buffer_size - buffer.size)
515       chunk_error?(chunk)
516       buffer << chunk
517     end
518     message << buffer
519   end
520 end

Private Instance Methods

chunk_error?(chunk) click to toggle source
    # File lib/tros/ipc.rb
529 def chunk_error?(chunk)
530   raise ConnectionClosedError.new("Reader read 0 bytes") if chunk == ''
531 end
read_buffer_size() click to toggle source
    # File lib/tros/ipc.rb
523 def read_buffer_size
524   header = reader.read(BUFFER_HEADER_LENGTH)
525   chunk_error?(header)
526   header.unpack('N')[0]
527 end