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