class Farcall::JsonTransport
The transport that uses delimited texts formatted with JSON. Delimiter should be a character sequence that will never appear in data, by default “x00” is used. Also several nnn can be used, most JSON codecs never insert several empty strings
Public Class Methods
new(delimiter: "\x00", **params)
click to toggle source
Create json transport, see Farcall::Transpor#create for parameters
Calls superclass method
Farcall::Transport::new
# File lib/farcall/json_transport.rb, line 94 def initialize delimiter: "\x00", **params super() setup_streams **params @delimiter = delimiter @dlength = -delimiter.length @thread = Thread.start { load_loop } end
Public Instance Methods
close()
click to toggle source
# File lib/farcall/json_transport.rb, line 108 def close if !@closing @closing = true close_connection @thread and @thread.join @thread = nil end end
send_data(hash)
click to toggle source
# File lib/farcall/json_transport.rb, line 104 def send_data hash @output << JSON.unparse(hash) + @delimiter end
Private Instance Methods
load_loop()
click to toggle source
# File lib/farcall/json_transport.rb, line 119 def load_loop buffer = '' while !@input.eof? buffer << @input.read(1) if buffer[@dlength..-1] == @delimiter push_input JSON.parse(buffer[0...@dlength]) buffer = '' end end rescue Errno::EPIPE close rescue if !@closing STDERR.puts "Farcall::JsonTransport read loop failed: #{$!.class.name}: #$!" STDERR.puts $!.backtrace.join("\n") connection_aborted $! else close end end