class Tros::IPC::SocketTransport

Attributes

protocol[RW]
remote_name[R]

A simple socket-based Transport implementation.

sock[R]

A simple socket-based Transport implementation.

Public Class Methods

new(sock) click to toggle source
    # File lib/tros/ipc.rb
379 def initialize(sock)
380   @sock = sock
381   @protocol = nil
382 end

Public Instance Methods

close() click to toggle source
    # File lib/tros/ipc.rb
456 def close
457   sock.close
458 end
is_connected?() click to toggle source
    # File lib/tros/ipc.rb
384 def is_connected?()
385   !!@protocol
386 end
read_buffer_length() click to toggle source
    # File lib/tros/ipc.rb
448 def read_buffer_length
449   read = sock.read(BUFFER_HEADER_LENGTH)
450   if read == '' || read == nil
451     raise ConnectionClosedException.new("Socket read 0 bytes.")
452   end
453   read.unpack('N')[0]
454 end
read_framed_message() click to toggle source
    # File lib/tros/ipc.rb
393 def read_framed_message
394   message = []
395   loop do
396     buffer = StringIO.new
397     buffer_length = read_buffer_length
398     if buffer_length == 0
399       return message.join
400     end
401     while buffer.tell < buffer_length
402       chunk = sock.read(buffer_length - buffer.tell)
403       if chunk == ''
404         raise ConnectionClosedException.new("Socket read 0 bytes.")
405       end
406       buffer.write(chunk)
407     end
408     message << buffer.string
409   end
410 end
transceive(request) click to toggle source
    # File lib/tros/ipc.rb
388 def transceive(request)
389   write_framed_message(request)
390   read_framed_message
391 end
write_buffer(chunk) click to toggle source
    # File lib/tros/ipc.rb
428 def write_buffer(chunk)
429   buffer_length = chunk.size
430   write_buffer_length(buffer_length)
431   total_bytes_sent = 0
432   while total_bytes_sent < buffer_length
433     bytes_sent = self.sock.write(chunk[total_bytes_sent..-1])
434     if bytes_sent == 0
435       raise ConnectionClosedException.new("Socket sent 0 bytes.")
436     end
437     total_bytes_sent += bytes_sent
438   end
439 end
write_buffer_length(n) click to toggle source
    # File lib/tros/ipc.rb
441 def write_buffer_length(n)
442   bytes_sent = sock.write([n].pack('N'))
443   if bytes_sent == 0
444     raise ConnectionClosedException.new("socket sent 0 bytes")
445   end
446 end
write_framed_message(message) click to toggle source
    # File lib/tros/ipc.rb
412 def write_framed_message(message)
413   message_length = message.size
414   total_bytes_sent = 0
415   while message_length - total_bytes_sent > 0
416     if message_length - total_bytes_sent > BUFFER_SIZE
417       buffer_length = BUFFER_SIZE
418     else
419       buffer_length = message_length - total_bytes_sent
420     end
421     write_buffer(message[total_bytes_sent,buffer_length])
422     total_bytes_sent += buffer_length
423   end
424   # A message is always terminated by a zero-length buffer.
425   write_buffer_length(0)
426 end