module TAC class TACNET DEFAULT_HOSTNAME = "192.168.49.1".freeze DEFAULT_PORT = 8962 SYNC_INTERVAL = 250 # ms HEARTBEAT_INTERVAL = 1_500 # ms def initialize @connection = nil end def connect(hostname = DEFAULT_HOSTNAME, port = DEFAULT_PORT) return if @connection && @connection.connected? @connection = Connection.new(hostname, port) @connection.connect end def status if connected? :connected elsif @connection && !@connection.client.socket_error? :connecting elsif @connection && @connection.client.socket_error? :connection_error else :not_connected end end def full_status _status = status.to_s.split("_").map(&:capitalize).join(" ") if connected? net_stats = "" net_stats += "Connection Statistics:\n" net_stats += "Packets Sent: #{client.packets_sent}\n" net_stats += "Packets Received: #{client.packets_received}\n\n" net_stats += "Data Sent: #{client.data_sent} bytes\n" net_stats += "Data Received: #{client.data_received} bytes\n" "Status: #{_status}\n\n#{net_stats}" elsif @connection&.client && @connection.client.socket_error? "Status: #{_status}\n\n#{@connection.client.last_socket_error}" else "Status: #{_status}" end end def connected? @connection&.connected? end def close return unless connected? @connection.close @connection = nil end def client @connection.client end def puts(packet) @connection.puts(packet) if connected? end def gets @connection.gets if connected? end def self.milliseconds Process.clock_gettime(Process::CLOCK_MONOTONIC, :millisecond) end end end