Refactor TACNET Client a bit

This commit is contained in:
2023-01-30 16:16:02 -06:00
parent 94cd822b0c
commit 308575dc63
2 changed files with 43 additions and 44 deletions

View File

@@ -1,6 +1,6 @@
module TAC module TAC
class TACNET class TACNET
DEFAULT_HOSTNAME = "192.168.49.1" DEFAULT_HOSTNAME = "192.168.49.1".freeze
DEFAULT_PORT = 8962 DEFAULT_PORT = 8962
SYNC_INTERVAL = 250 # ms SYNC_INTERVAL = 250 # ms
@@ -30,7 +30,7 @@ module TAC
end end
def full_status def full_status
_status = status.to_s.split("_").map { |c| c.capitalize }.join(" ") _status = status.to_s.split("_").map(&:capitalize).join(" ")
if connected? if connected?
net_stats = "" net_stats = ""
@@ -42,7 +42,7 @@ module TAC
"<b>Status:</b> #{_status}\n\n#{net_stats}" "<b>Status:</b> #{_status}\n\n#{net_stats}"
elsif @connection&.client && @connection.client.socket_error? elsif @connection&.client && @connection.client.socket_error?
"<b>Status:</b> #{_status}\n\n#{@connection.client.last_socket_error.to_s}" "<b>Status:</b> #{_status}\n\n#{@connection.client.last_socket_error}"
else else
"<b>Status:</b> #{_status}" "<b>Status:</b> #{_status}"
end end
@@ -53,11 +53,11 @@ module TAC
end end
def close def close
if connected? return unless connected?
@connection.close @connection.close
@connection = nil @connection = nil
end end
end
def client def client
@connection.client @connection.client

View File

@@ -8,7 +8,9 @@ module TAC
attr_reader :uuid, :read_queue, :write_queue, :socket, attr_reader :uuid, :read_queue, :write_queue, :socket,
:packets_sent, :packets_received, :packets_sent, :packets_received,
:data_sent, :data_received :data_sent, :data_received
attr_accessor :sync_interval, :last_socket_error, :socket_error attr_accessor :sync_interval, :last_socket_error, :socket_error
def initialize def initialize
@uuid = SecureRandom.uuid @uuid = SecureRandom.uuid
@read_queue = [] @read_queue = []
@@ -20,8 +22,11 @@ module TAC
@socket_error = false @socket_error = false
@bound = false @bound = false
@packets_sent, @packets_received = 0, 0 @packets_sent = 0
@data_sent, @data_received = 0, 0 @packets_received = 0
@data_sent = 0
@data_received = 0
end end
def uuid=(id) def uuid=(id)
@@ -39,18 +44,16 @@ module TAC
Thread.new do Thread.new do
while connected? while connected?
# Read from socket # Read from socket
while message_in = read while (message_in = read)
if message_in.empty? break if message_in.empty?
break
else log.i(TAG, "Read: #{message_in}")
log.i(TAG, "Read: " + message_in)
@read_queue << message_in @read_queue << message_in
@packets_received += 1 @packets_received += 1
@data_received += message_in.length @data_received += message_in.length
end end
end
sleep @sync_interval / 1000.0 sleep @sync_interval / 1000.0
end end
@@ -59,12 +62,12 @@ module TAC
Thread.new do Thread.new do
while connected? while connected?
# Write to socket # Write to socket
while message_out = @write_queue.shift while (message_out = @write_queue.shift)
write(message_out) write(message_out)
@packets_sent += 1 @packets_sent += 1
@data_sent += message_out.to_s.length @data_sent += message_out.to_s.length
log.i(TAG, "Write: " + message_out.to_s) log.i(TAG, "Write: #{message_out}")
end end
sleep @sync_interval / 1000.0 sleep @sync_interval / 1000.0
@@ -82,7 +85,7 @@ module TAC
while message while message
puts(message) puts(message)
log.i(TAG, "Writing to Queue: " + message) log.i(TAG, "Writing to Queue: #{message}")
message = gets message = gets
end end
@@ -101,12 +104,11 @@ module TAC
end end
def closed? def closed?
@socket.closed? if @socket @socket&.closed?
end end
def write(message) def write(message)
begin @socket.puts("#{message}#{PACKET_TAIL}") if connected?
@socket.puts("#{message}#{PACKET_TAIL}")
rescue => error rescue => error
@last_socket_error = error @last_socket_error = error
@socket_error = true @socket_error = true
@@ -115,20 +117,16 @@ module TAC
close close
end end
end
def read def read
begin @socket&.gets&.strip if connected?
@socket.gets&.strip
rescue => error rescue => error
@last_socket_error = error @last_socket_error = error
@socket_error = true @socket_error = true
log.e(TAG, error.message) log.e(TAG, error.message)
"" close
end
end end
def puts(message) def puts(message)
@@ -140,11 +138,11 @@ module TAC
end end
def encode(message) def encode(message)
return message message
end end
def decode(blob) def decode(blob)
return blob blob
end end
def flush def flush
@@ -153,7 +151,8 @@ module TAC
def close(reason = nil) def close(reason = nil)
write(reason) if reason write(reason) if reason
@socket.close if @socket
@socket&.close
end end
end end
end end