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