mirror of
https://github.com/TimeCrafters/timecrafters_configuration_tool_desktop.git
synced 2025-12-16 13:52:34 +00:00
TACNET is now able to dynamically sync configs on initial connection, added error sound, made tacnet status dialog update stats, made simulator clock stop after all robots have run out of 'states' to run, changed some dialogs titlebar and borders to be different colors, misc. other changes.
This commit is contained in:
@@ -10,6 +10,7 @@ module TAC
|
||||
packet = Packet.from_stream(message)
|
||||
|
||||
if packet
|
||||
log.i(TAG, "Received packet of type: #{packet.type}")
|
||||
hand_off(packet)
|
||||
else
|
||||
log.d(TAG, "Rejected raw packet: #{message}")
|
||||
@@ -24,10 +25,21 @@ module TAC
|
||||
handle_heartbeat(packet)
|
||||
when :error
|
||||
handle_error(packet)
|
||||
|
||||
when :download_config
|
||||
handle_download_config(packet)
|
||||
when :upload_config
|
||||
handle_upload_config(packet)
|
||||
when :list_configs
|
||||
handle_list_configs(packet)
|
||||
when :select_config
|
||||
handle_select_config(packet)
|
||||
when :add_config
|
||||
handle_add_config(packet)
|
||||
when :update_config # rename config/file
|
||||
handle_update_config(packet)
|
||||
when :delete_config
|
||||
handle_delete_config(packet)
|
||||
else
|
||||
log.d(TAG, "No hand off available for packet type: #{packet.type}")
|
||||
end
|
||||
@@ -45,11 +57,15 @@ module TAC
|
||||
|
||||
# TODO: Handle errors
|
||||
def handle_error(packet)
|
||||
if @host_is_a_connection
|
||||
title, message = packet.body.split(Packet::PROTOCOL_SEPERATOR, 2)
|
||||
$window.push_state(TAC::Dialog::TACNETDialog, title: title, message: message)
|
||||
end
|
||||
end
|
||||
|
||||
def handle_upload_config(packet)
|
||||
begin
|
||||
config_name, json = packet.body.split(Packet::PROTOCOL_HEADER_SEPERATOR)
|
||||
config_name, json = packet.body.split(Packet::PROTOCOL_SEPERATOR, 2)
|
||||
data = JSON.parse(json, symbolize_names: true)
|
||||
|
||||
if @host_is_a_connection
|
||||
@@ -58,11 +74,15 @@ module TAC
|
||||
$window.push_state(TAC::Dialog::AlertDialog, title: "Invalid Config", message: "Remote config to old.")
|
||||
|
||||
elsif data.is_a?(Hash) && data.dig(:config, :spec_version) == TAC::CONFIG_SPEC_VERSION
|
||||
$window.push_state(TAC::Dialog::ConfirmDialog, title: "Replace Config", message: "Replace local config\nwith remote config?", callback_method: proc {
|
||||
File.open("#{TAC::CONFIGS_PATH}/#{config_name}.json", "w") { |f| f.write json }
|
||||
|
||||
$window.backend.load_config(config_name)
|
||||
})
|
||||
if $window.backend.config.name == config_name
|
||||
$window.backend.load_config(config_name)
|
||||
|
||||
$window.instance_variable_get(:"@states").each do |state|
|
||||
state.populate_groups_list if state.is_a?(TAC::States::Editor)
|
||||
end
|
||||
end
|
||||
|
||||
elsif data.is_a?(Hash) && data.dig(:config, :spec_version) < TAC::CONFIG_SPEC_VERSION
|
||||
# OLD CONFIG, Upgrade?
|
||||
@@ -103,6 +123,56 @@ module TAC
|
||||
end
|
||||
end
|
||||
|
||||
def handle_list_configs(packet)
|
||||
if @host_is_a_connection # Download new or updated configs
|
||||
list = packet.body.split(Packet::PROTOCOL_SEPERATOR).map { |part| part.split(",") }
|
||||
|
||||
remote_configs = list.map { |l| l.first }
|
||||
local_configs = Dir.glob("#{TAC::CONFIGS_PATH}/*.json").map { |f| File.basename(f, ".json") }
|
||||
_diff = local_configs - remote_configs
|
||||
|
||||
list.each do |name, revision|
|
||||
revision = Integer(revision)
|
||||
path = "#{TAC::CONFIGS_PATH}/#{name}.json"
|
||||
|
||||
if File.exist?(path)
|
||||
config = Config.new(name)
|
||||
|
||||
if config.configuration.revision < revision
|
||||
$window.backend.tacnet.puts( PacketHandler.packet_download_config(name) )
|
||||
elsif config.configuration.revision > revision
|
||||
$window.backend.tacnet.puts( PacketHandler.packet_upload_config(name, JSON.dump( config )) )
|
||||
end
|
||||
|
||||
else
|
||||
$window.backend.tacnet.puts( PacketHandler.packet_download_config(name) )
|
||||
end
|
||||
end
|
||||
|
||||
_diff.each do |name|
|
||||
config = Config.new(name)
|
||||
|
||||
$window.backend.tacnet.puts( PacketHandler.packet_upload_config(name, JSON.dump( config )) )
|
||||
end
|
||||
else
|
||||
if $server.active_client && $server.active_client.connected?
|
||||
$server.active_client.puts(PacketHandler.packet_list_configs)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def handle_select_config(packet)
|
||||
end
|
||||
|
||||
def handle_add_config(packet)
|
||||
end
|
||||
|
||||
def handle_update_config(packet)
|
||||
end
|
||||
|
||||
def handle_delete_config(packet)
|
||||
end
|
||||
|
||||
def self.packet_handshake(client_uuid)
|
||||
Packet.create(Packet::PACKET_TYPES[:handshake], client_uuid)
|
||||
end
|
||||
@@ -120,10 +190,24 @@ module TAC
|
||||
end
|
||||
|
||||
def self.packet_upload_config(config_name, json)
|
||||
string = "#{config_name}#{Packet::PROTOCOL_HEADER_SEPERATOR}#{json.gsub("\n", " ")}"
|
||||
string = "#{config_name}#{Packet::PROTOCOL_SEPERATOR}#{json.gsub("\n", " ")}"
|
||||
|
||||
Packet.create(Packet::PACKET_TYPES[:upload_config], string)
|
||||
end
|
||||
|
||||
def self.packet_list_configs
|
||||
files = Dir.glob("#{TAC::CONFIGS_PATH}/*.json")
|
||||
list = files.map do |file|
|
||||
name = File.basename(file, ".json")
|
||||
config = Config.new(name)
|
||||
"#{name},#{config.configuration.revision}"
|
||||
end.join(Packet::PROTOCOL_SEPERATOR)
|
||||
|
||||
Packet.create(
|
||||
Packet::PACKET_TYPES[:list_configs],
|
||||
list
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user