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