class Telemetry::TCP::Client
Public Class Methods
new(host,port,client_port=nil)
click to toggle source
# File lib/telemetry/tcp/client.rb, line 7 def initialize(host,port,client_port=nil) @host = host @port = port @socket = nil @mutex = Mutex.new end
Public Instance Methods
close()
click to toggle source
# File lib/telemetry/tcp/client.rb, line 48 def close @socket.close unless closed? end
closed?()
click to toggle source
# File lib/telemetry/tcp/client.rb, line 40 def closed? if !@socket || @socket.closed? true else false end end
connect()
click to toggle source
# File lib/telemetry/tcp/client.rb, line 52 def connect while !@socket || @socket.closed? begin reset rescue Errno::ECONNREFUSED,Errno::ECONNRESET,Errno::ECONNABORTED Telemetry.warn "#{self}: connection refused to #{@host}:#{@port}. Trying again in 1 second" sleep 1 rescue Errno::EHOSTUNREACH Vizkit.warn "#{self}: no route to #{@host}:#{@port}. Trying again in 1 second" sleep 1 end end end
gets()
click to toggle source
blocking call waits until a full frame was received
# File lib/telemetry/tcp/client.rb, line 15 def gets() connect @mutex.synchronize do f = @frame.next return f.to_s if f while !@socket.closed? data = begin @socket.recv(640000) rescue Errno::ECONNRESET => e Telemetry.warn "close socket because of: #{e}" close return end if !data || data.empty? Telemetry.warn "close socket: empty data package" close return end @frame << data f = @frame.next return f.to_s if f end end end
reset()
click to toggle source
# File lib/telemetry/tcp/client.rb, line 66 def reset close @mutex.synchronize do @socket = TCPSocket.open(@host,@port) @frame = WebSocket::Frame::Incoming::Server.new() end end