mirror of
https://github.com/TimeCrafters/timecrafters_configuration_tool_desktop.git
synced 2025-12-15 21:32:35 +00:00
92 lines
2.1 KiB
Ruby
92 lines
2.1 KiB
Ruby
module TAC
|
|
class TACNET
|
|
class Connection
|
|
TAG = "TACNET|Connection"
|
|
attr_reader :client
|
|
def initialize(hostname = DEFAULT_HOSTNAME, port = DEFAULT_PORT)
|
|
@hostname = hostname
|
|
@port = port
|
|
|
|
@client = nil
|
|
|
|
@last_sync_time = TACNET.milliseconds
|
|
@sync_interval = SYNC_INTERVAL
|
|
|
|
@last_heartbeat_sent = TACNET.milliseconds
|
|
@heartbeat_interval = HEARTBEAT_INTERVAL
|
|
|
|
@connection_handler = proc do
|
|
handle_connection
|
|
end
|
|
|
|
@packet_handler = PacketHandler.new(host_is_a_connection: true)
|
|
end
|
|
|
|
def connect
|
|
return if @client
|
|
|
|
@client = Client.new
|
|
|
|
Thread.new do
|
|
begin
|
|
@client.socket = Socket.tcp(@hostname, @port, connect_timeout: 5)
|
|
log.i(TAG, "Connected to: #{@hostname}:#{@port}")
|
|
|
|
while @client && @client.connected?
|
|
if TACNET.milliseconds > @last_sync_time + @sync_interval
|
|
@last_sync_time = TACNET.milliseconds
|
|
|
|
@client.sync(@connection_handler)
|
|
end
|
|
end
|
|
|
|
rescue => error
|
|
log.e(TAG, error)
|
|
|
|
if @client
|
|
@client.close
|
|
@client.last_socket_error = error
|
|
@client.socket_error = true
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
def handle_connection
|
|
if @client && @client.connected?
|
|
message = @client.gets
|
|
|
|
@packet_handler.handle(message) if message
|
|
|
|
if TACNET.milliseconds > @last_heartbeat_sent + @heartbeat_interval
|
|
@last_heartbeat_sent = TACNET.milliseconds
|
|
|
|
@client.puts(PacketHandler.packet_heartbeat)
|
|
end
|
|
|
|
sleep @sync_interval / 1000.0
|
|
end
|
|
end
|
|
|
|
def puts(packet)
|
|
@client.puts(packet)
|
|
end
|
|
|
|
def gets
|
|
@client.gets
|
|
end
|
|
|
|
def connected?
|
|
@client.connected? if @client
|
|
end
|
|
|
|
def closed?
|
|
@client.closed? if @client
|
|
end
|
|
|
|
def close
|
|
@client.close if @client
|
|
end
|
|
end
|
|
end
|
|
end |