From 79bb4facfc3f80acecfdfc556b0a0a34b628d80d Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Mon, 27 Mar 2023 04:28:18 +0200 Subject: [PATCH] [MIRROR] Removes networks from the game [MDB IGNORE] (#20083) * Removes networks from the game (#74142) ## About The Pull Request This is a continuation of https://github.com/tgstation/tgstation/pull/74085 - I announced in the comments there that this would be my next PR, and this is it. Removes SSnetwork, ``/datum/ntnet``, ``/datum/component/ntnet_interface``, ``var/network_root_id``, the network unit test, and a lot of other things related to networks. - NTNet circuits now check for an Ntnet relay, and uses signals to operate. - Logs in Wirecarp is now only for PDA and Ntnet Relay things, so you can no longer see what ruins exist using it (why should Wirecarp know that Oldstation spawned? The flavor is that they dont know its there). - Removed it from MULEbots entirely, I don't think it even did anything for them? Botkeeper seems to work without it, so it's possibly there from pre-tgui PDAs. - Moves assigning random names to a base proc instead of being tied to network, this is things like random-naming scrubbers/vents. The behavior hasn't changed at all. - Makes Ntos work for consoles when relays are down, as the comments said they're supposed to (because they're wired). I think this was an accidental change on my part, so this is a revert of that. ## Why It's Good For The Game Ntnet is ancient code that hasn't given us much that we can't do with already existing alternatives, we've been slowly moving away from it for init times, and though a large portion of that was limited to airlocks, I still don't think this is a system worth keeping around. It's way too complex to expect feature coders to do anything with it, and too old with better alternatives for anyone to want to improve any of it. ## Changelog :cl: fix: Computers are now properly connected to Ethernet, and can use Ntos when Relays are down. refactor: Removes Ntnet and Ntnet interfaces, which was only used by Ntnet circuits (which now directly checks for a Relay to work) and MULEbots, which did nothing with it. balance: Wirecarp no longer tells you what ruins spawned in a round, instead it's limited to PDA logs, and tells you the source too. This means the RD can catch someone running illegal programs if they don't make any attempt at hiding it. qol: Wirecarp logs is now set to save 300 at once, instead of 100 and being increased to 300 by the RD during the round. This is pretty insignificant, since there's no reason to NOT want as many logs as possible. /:cl: --------- Co-authored-by: Zephyr <12817816+ZephyrTFA@ users.noreply.github.com> * Removes networks from the game --------- Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com> Co-authored-by: Zephyr <12817816+ZephyrTFA@ users.noreply.github.com> --- code/__DEFINES/dcs/signals/signals_NTNet.dm | 16 - code/__DEFINES/dcs/signals/signals_circuit.dm | 3 + code/__DEFINES/networks.dm | 70 --- code/__DEFINES/subsystems.dm | 2 - code/__HELPERS/names.dm | 34 ++ .../subsystem/modular_computers.dm | 46 +- .../subsystem/processing/networks.dm | 485 ------------------ code/datums/components/ntnet_interface.dm | 140 ----- code/game/area/areas.dm | 10 - code/game/area/areas/centcom.dm | 13 +- code/game/area/areas/holodeck.dm | 1 - code/game/area/areas/ruins/space.dm | 1 - code/game/area/areas/station.dm | 1 - code/game/objects/objs.dm | 13 - code/modules/NTNet/netdata.dm | 126 ----- code/modules/NTNet/network.dm | 211 -------- code/modules/NTNet/relays.dm | 29 +- .../components/unary_devices/vent_pump.dm | 2 +- .../components/unary_devices/vent_scrubber.dm | 2 +- code/modules/mapping/map_template.dm | 1 - .../mob/living/simple_animal/bot/mulebot.dm | 5 - .../computers/item/computer.dm | 10 +- .../file_system/programs/antagonist/dos.dm | 6 +- .../file_system/programs/wirecarp.dm | 19 +- code/modules/paperwork/fax.dm | 2 +- .../projectiles/guns/energy/dueling.dm | 2 +- code/modules/unit_tests/_unit_tests.dm | 1 - code/modules/unit_tests/ntnetwork_tests.dm | 93 ---- .../wiremod/components/ntnet/ntnet_receive.dm | 16 +- .../wiremod/components/ntnet/ntnet_send.dm | 8 +- tgstation.dme | 6 - .../tgui/interfaces/NtosNetMonitor.js | 34 +- 32 files changed, 121 insertions(+), 1287 deletions(-) delete mode 100644 code/__DEFINES/dcs/signals/signals_NTNet.dm delete mode 100644 code/__DEFINES/networks.dm delete mode 100644 code/controllers/subsystem/processing/networks.dm delete mode 100644 code/datums/components/ntnet_interface.dm delete mode 100644 code/modules/NTNet/netdata.dm delete mode 100644 code/modules/NTNet/network.dm delete mode 100644 code/modules/unit_tests/ntnetwork_tests.dm diff --git a/code/__DEFINES/dcs/signals/signals_NTNet.dm b/code/__DEFINES/dcs/signals/signals_NTNet.dm deleted file mode 100644 index 4ba1a3b3865..00000000000 --- a/code/__DEFINES/dcs/signals/signals_NTNet.dm +++ /dev/null @@ -1,16 +0,0 @@ -//NTnet - -///called on an object by its NTNET connection component on receive. (data(datum/netdata)) -#define COMSIG_COMPONENT_NTNET_RECEIVE "ntnet_receive" -///called on an object by its NTNET connection component on a port update (hardware_id, port)) -#define COMSIG_COMPONENT_NTNET_PORT_UPDATE "ntnet_port_update" -/// called when packet was accepted by the target (datum/netdata, error_code) -#define COMSIG_COMPONENT_NTNET_ACK "ntnet_ack" -/// called when packet was not acknoledged by the target (datum/netdata, error_code) -#define COMSIG_COMPONENT_NTNET_NAK "ntnet_nack" - -// Some internal NTnet signals used on ports -///called on an object by its NTNET connection component on a port distruction (port, list/data)) -#define COMSIG_COMPONENT_NTNET_PORT_DESTROYED "ntnet_port_destroyed" -///called on an object by its NTNET connection component on a port distruction (port, list/data)) -#define COMSIG_COMPONENT_NTNET_PORT_UPDATED "ntnet_port_updated" diff --git a/code/__DEFINES/dcs/signals/signals_circuit.dm b/code/__DEFINES/dcs/signals/signals_circuit.dm index 3a6cde7639a..1b7b6b53c4f 100644 --- a/code/__DEFINES/dcs/signals/signals_circuit.dm +++ b/code/__DEFINES/dcs/signals/signals_circuit.dm @@ -72,3 +72,6 @@ /// Called when a ui action is sent for the circuit component #define COMSIG_CIRCUIT_COMPONENT_PERFORM_ACTION "circuit_component_perform_action" + +///Called when an Ntnet sender is sending Ntnet data +#define COMSIG_GLOB_CIRCUIT_NTNET_DATA_SENT "!circuit_ntnet_data_sent" diff --git a/code/__DEFINES/networks.dm b/code/__DEFINES/networks.dm deleted file mode 100644 index f37337819c8..00000000000 --- a/code/__DEFINES/networks.dm +++ /dev/null @@ -1,70 +0,0 @@ -#define HID_RESTRICTED_END 101 //the first nonrestricted ID, automatically assigned on connection creation. - -#define NETWORK_BROADCAST_ID "ALL" - -/// To debug networks use this to check -//#define DEBUG_NETWORKS 1 - - -/// We do some macro magic to make sure the strings are created at compile time rather than runtime -/// We do it this way so that if someone changes any of the names of networks we don't have to hunt down -/// all the constants though all the files for them. hurrah! - -/// Ugh, couldn't get recursive stringafy to work in byond for some reason -#define NETWORK_NAME_COMBINE(L,R) ((L) + "." + (R)) - -/// Station network names. Used as the root networks for main parts of the station -#define HOLODECK_NETWORK_ROOT "HOLODECK" -#define STATION_NETWORK_ROOT "SS13" -#define CENTCOM_NETWORK_ROOT "CENTCOM" -#define SYNDICATE_NETWORK_ROOT "SYNDI" -#define LIMBO_NETWORK_ROOT "LIMBO" // Limbo is a dead network - - -/// various sub networks pieces -#define __NETWORK_CARGO "CARGO" -#define __NETWORK_BOTS "BOTS" -#define __NETWORK_CIRCUITS "CIRCUITS" - -/// Various combined subnetworks -#define NETWORK_BOTS_CARGO NETWORK_NAME_COMBINE(__NETWORK_CARGO, __NETWORK_BOTS) - -/// Network name should be all caps and no punctuation except for _ and . between domains -/// This does a quick an dirty fix to a network name to make sure it works -/proc/simple_network_name_fix(name) - // can't make this as a define, some reason findtext(name,@"^[^\. ]+[A-Z0-9_\.]+[^\. ]+$") dosn't work - var/static/regex/check_regex = new(@"[ \-]{1}","g") - return check_regex.Replace(uppertext(name),"_") -/* - * Helper that verifies a network name is valid. - * - * A valid network name (ie, SS13.ATMOS.SCRUBBERS) is all caps, no spaces with periods between - * branches. Returns false if it doesn't meat this requirement - * - * Arguments: - * * name - network text name to check -*/ -/proc/verify_network_name(name) - // can't make this as a define, some reason findtext(name,@"^[^\. ]+[A-Z0-9_\.]+[^\. ]+$") dosn't work - var/static/regex/check_regex = new(@"^(?=[^\. ]+)[A-Z0-9_\.]+[^\. ]+$") - return istext(name) && check_regex.Find(name) - - - -/// Port protocol. A port is just a list with a few vars that are used to send signals -/// that something is refreshed or updated. These macros make it faster rather than -/// calling procs -#define NETWORK_PORT_DISCONNECTED(LIST) (!LIST || LIST["_disconnected"]) -#define NETWORK_PORT_UPDATED(LIST) (LIST && !LIST["_disconnected"] && LIST["_updated"]) -#define NETWORK_PORT_UPDATE(LIST) if(LIST) { LIST["_updated"] = TRUE } -#define NETWORK_PORT_CLEAR_UPDATE(LIST) if(LIST) { LIST["_updated"] = FALSE } -#define NETWORK_PORT_SET_UPDATE(LIST) if(LIST) { LIST["_updated"] = TRUE } -#define NETWORK_PORT_DISCONNECT(LIST) if(LIST) { LIST["_disconnected"] = TRUE } - -/// Error codes -#define NETWORK_ERROR_OK null -#define NETWORK_ERROR_NOT_ON_NETWORK "network_error_not_on_network" -#define NETWORK_ERROR_BAD_NETWORK "network_error_bad_network" -#define NETWORK_ERROR_BAD_RECEIVER_ID "network_error_bad_receiver_id" -#define NETWORK_ERROR_UNAUTHORIZED "network_error_bad_unauthorized" - diff --git a/code/__DEFINES/subsystems.dm b/code/__DEFINES/subsystems.dm index ef924465f8f..85851aa6c1a 100644 --- a/code/__DEFINES/subsystems.dm +++ b/code/__DEFINES/subsystems.dm @@ -156,7 +156,6 @@ #define INIT_ORDER_EARLY_ASSETS 48 #define INIT_ORDER_RESEARCH 47 #define INIT_ORDER_TIMETRACK 46 -#define INIT_ORDER_NETWORKS 45 #define INIT_ORDER_SPATIAL_GRID 43 #define INIT_ORDER_ECONOMY 40 #define INIT_ORDER_OUTPUTS 35 @@ -213,7 +212,6 @@ #define FIRE_PRIORITY_REAGENTS 26 #define FIRE_PRIORITY_SPACEDRIFT 30 #define FIRE_PRIOTITY_SMOOTHING 35 -#define FIRE_PRIORITY_NETWORKS 40 #define FIRE_PRIORITY_OBJ 40 #define FIRE_PRIORITY_ACID 40 #define FIRE_PRIOTITY_BURNING 40 diff --git a/code/__HELPERS/names.dm b/code/__HELPERS/names.dm index 15a659f1bc7..33bb0348df5 100644 --- a/code/__HELPERS/names.dm +++ b/code/__HELPERS/names.dm @@ -243,6 +243,40 @@ GLOBAL_DATUM(syndicate_code_response_regex, /regex) /proc/hive_name() return "[pick(GLOB.hive_names)]-hive" +/** + * Generate a name devices + * + * Creates a randomly generated tag or name for devices or anything really + * it keeps track of a special list that makes sure no name is used more than + * once + * + * args: + * * len (int)(Optional) Default=5 The length of the name + * * prefix (string)(Optional) static text in front of the random name + * * postfix (string)(Optional) static text in back of the random name + * Returns (string) The generated name + */ +/proc/assign_random_name(len=5, prefix="", postfix="") + //DO NOT REMOVE NAMES HERE UNLESS YOU KNOW WHAT YOU'RE DOING + //All names already used + var/static/list/used_names = list() + + var/static/valid_chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" + var/list/new_name = list() + var/text + // machine id's should be fun random chars hinting at a larger world + do + new_name.Cut() + new_name += prefix + for(var/i = 1 to len) + new_name += valid_chars[rand(1,length(valid_chars))] + new_name += postfix + text = new_name.Join() + while(used_names[text]) + used_names[text] = TRUE + return text + + /** * returns an ic name of the tool needed * Arguments: diff --git a/code/controllers/subsystem/modular_computers.dm b/code/controllers/subsystem/modular_computers.dm index c6e1a9a111f..0c4d88c55e3 100644 --- a/code/controllers/subsystem/modular_computers.dm +++ b/code/controllers/subsystem/modular_computers.dm @@ -1,7 +1,13 @@ +///The maximum amount of logs that can be generated before they start overwriting eachother. +#define MAX_LOG_COUNT 300 + SUBSYSTEM_DEF(modular_computers) name = "Modular Computers" flags = SS_NO_FIRE + ///List of all ModPC logging + var/list/logs = list() + ///List of all programs available to download from the NTNet store. var/list/available_station_software = list() ///List of all programs that can be downloaded from an emagged NTNet store. @@ -14,9 +20,6 @@ SUBSYSTEM_DEF(modular_computers) ///Boolean to show a message warning if there's an active intrusion for Wirecarp users. var/intrusion_detection_alarm = FALSE - ///List of all available NTNet relays. - var/list/obj/machinery/ntnet_relay/ntnet_relays = list() - /datum/controller/subsystem/modular_computers/Initialize() build_software_lists() initialized = TRUE @@ -35,22 +38,43 @@ SUBSYSTEM_DEF(modular_computers) if(prog.available_on_syndinet) available_antag_software.Add(prog) -///Checks if at least one ntnet relay is functional. -/datum/controller/subsystem/modular_computers/proc/check_relay_operation() - for(var/obj/machinery/ntnet_relay/relays as anything in ntnet_relays) - if(!relays.is_operational) - continue - return TRUE - return FALSE - ///Attempts to find a new file through searching the available stores with its name. /datum/controller/subsystem/modular_computers/proc/find_ntnet_file_by_name(filename) for(var/datum/computer_file/program/programs as anything in available_station_software + available_antag_software) if(filename == programs.filename) return programs + return null ///Attempts to find a chatorom using the ID of the channel. /datum/controller/subsystem/modular_computers/proc/get_chat_channel_by_id(id) for(var/datum/ntnet_conversation/chan as anything in chat_channels) if(chan.id == id) return chan + return null + +/** + * Records a message into the station logging system for the network + * Arguments: + * * log_string - The message being logged + */ +/datum/controller/subsystem/modular_computers/proc/add_log(log_string) + var/list/log_text = list() + log_text += "\[[station_time_timestamp()]\]" + log_text += "*SYSTEM* - " + log_text += log_string + log_string = log_text.Join() + + logs.Add(log_string) + + // We have too many logs, remove the oldest entries until we get into the limit + if(logs.len > MAX_LOG_COUNT) + logs = logs.Copy(logs.len - MAX_LOG_COUNT, 0) + +/** + * Removes all station logs and leaves it with an alert that it's been wiped. + */ +/datum/controller/subsystem/modular_computers/proc/purge_logs() + logs = list() + add_log("-!- LOGS DELETED BY SYSTEM OPERATOR -!-") + +#undef MAX_LOG_COUNT diff --git a/code/controllers/subsystem/processing/networks.dm b/code/controllers/subsystem/processing/networks.dm deleted file mode 100644 index 279e7994c0f..00000000000 --- a/code/controllers/subsystem/processing/networks.dm +++ /dev/null @@ -1,485 +0,0 @@ -SUBSYSTEM_DEF(networks) - name = "Networks" - priority = FIRE_PRIORITY_NETWORKS - wait = 5 - flags = SS_KEEP_TIMING - init_order = INIT_ORDER_NETWORKS - - /// all interfaces by their hardware address. - /// Do NOT use to verify a reciver_id is valid, use the network.root_devices for that - var/list/interfaces_by_hardware_id = list() - - /// List of networks using their fully qualified network name. Used for quick lookups - /// of networks for sending packets - var/list/networks = list() - /// List of the root networks starting at their root names. Used to find and/or build - /// network tress - var/list/root_networks = list() - - // Why not list? Because its a Copy() every time we add a packet, and thats stupid. - var/datum/netdata/first = null // start of the queue. Pulled off in fire. - var/datum/netdata/last = null // end of the queue. pushed on by transmit - var/packet_count = 0 - // packet stats - var/count_broadcasts_packets = 0 // count of broadcast packets sent - var/count_failed_packets = 0 // count of message fails - // Logs moved here - // Amount of logs the system tries to keep in memory. Keep below 999 to prevent byond from acting weirdly. - // High values make displaying logs much laggier. - var/setting_maxlogcount = 100 - var/list/logs = list() - - /// Random name search to make sure we have unique names. - /// DO NOT REMOVE NAMES HERE UNLESS YOU KNOW WHAT YOUR DOING - var/list/used_names = list() - - -/// You shouldn't need to do this. But mapping is async and there is no guarantee that Initialize -/// will run before these networks are dynamically created. So its here. -/datum/controller/subsystem/networks/PreInit() - /// Limbo network needs to be made at boot up for all error devices - new/datum/ntnet(LIMBO_NETWORK_ROOT) - new/datum/ntnet(STATION_NETWORK_ROOT) - new/datum/ntnet(SYNDICATE_NETWORK_ROOT) - /// As well as the station network incase something funny goes during startup - new/datum/ntnet(CENTCOM_NETWORK_ROOT) - - -/datum/controller/subsystem/networks/stat_entry(msg) - msg = "NET: QUEUE([packet_count]) FAILS([count_failed_packets]) BROADCAST([count_broadcasts_packets])" - return ..() - -/datum/controller/subsystem/networks/Initialize() - assign_areas_root_ids(get_sorted_areas()) // setup area names before Initialize - initialized = TRUE - // Now when the objects Initialize they will join the right network - return SS_INIT_SUCCESS - -/* - * Process incoming queued packet and return NAK/ACK signals - * - * This should only be called when you want the target object to process the NAK/ACK signal, usually - * during fire. At this point data.receiver_id has already been converted if it was a broadcast but - * is undefined in this function. - * Arguments: - * * receiver_id - text hardware id for the target device - * * data - packet to be sent - */ - -/datum/controller/subsystem/networks/proc/_process_packet(receiver_id, datum/netdata/data) - /// Used only for sending NAK/ACK and error reply's - var/datum/component/ntnet_interface/sending_interface = interfaces_by_hardware_id[data.sender_id] - - /// Check if the network_id is valid and if not send an error and return - var/datum/ntnet/target_network = networks[data.network_id] - if(!target_network) - count_failed_packets++ - add_log("Bad target network '[data.network_id]'", null, data.sender_id) - if(!QDELETED(sending_interface)) - SEND_SIGNAL(sending_interface.parent, COMSIG_COMPONENT_NTNET_NAK, data , NETWORK_ERROR_BAD_NETWORK) - return - - /// Check if the receiver_id is in the network. If not send an error and return - var/datum/component/ntnet_interface/target_interface = target_network.root_devices[receiver_id] - if(QDELETED(target_interface)) - count_failed_packets++ - add_log("Bad target device '[receiver_id]'", target_network, data.sender_id) - if(!QDELETED(sending_interface)) - SEND_SIGNAL(sending_interface.parent, COMSIG_COMPONENT_NTNET_NAK, data, NETWORK_ERROR_BAD_RECEIVER_ID) - return - - // Check if we care about permissions. If we do check if we are allowed the message to be processed - if(data.passkey) // got to check permissions - var/obj/O = target_interface.parent - if(O) - if(!O.check_access_ntnet(data.passkey)) - count_failed_packets++ - add_log("Access denied to ([receiver_id]) from ([data.network_id])", target_network, data.sender_id) - if(!QDELETED(sending_interface)) - SEND_SIGNAL(sending_interface.parent, COMSIG_COMPONENT_NTNET_NAK, data, NETWORK_ERROR_UNAUTHORIZED) - return - else - add_log("A access key message was sent to a non-device", target_network, data.sender_id) - if(!QDELETED(sending_interface)) - SEND_SIGNAL(sending_interface.parent, COMSIG_COMPONENT_NTNET_NAK, data, NETWORK_ERROR_UNAUTHORIZED) - - - SEND_SIGNAL(target_interface.parent, COMSIG_COMPONENT_NTNET_RECEIVE, data) - // All is good, send the packet then send an ACK to the sender - if(!QDELETED(sending_interface)) - SEND_SIGNAL(sending_interface.parent, COMSIG_COMPONENT_NTNET_ACK, data) - -/// Helper define to make sure we pop the packet and qdel it -#define POP_PACKET(CURRENT) first = CURRENT.next; packet_count--; if(!first) { last = null; packet_count = 0; }; qdel(CURRENT); - -/datum/controller/subsystem/networks/fire(resumed = 0) - var/datum/netdata/current - var/datum/component/ntnet_interface/target_interface - while(first) - current = first - /// Check if we are a list. If so process the list - if(islist(current.receiver_id)) // are we a broadcast list - var/list/receivers = current.receiver_id - var/receiver_id = receivers[receivers.len] // pop it - receivers.len-- - _process_packet(receiver_id, current) - if(receivers.len == 0) // pop it if done - count_broadcasts_packets++ - POP_PACKET(current) - else // else set up a broadcast or send a single targete - // check if we are sending to a network or to a single target - target_interface = interfaces_by_hardware_id[current.receiver_id] - if(target_interface) // a single sender id - _process_packet(current.receiver_id, current) // single target - POP_PACKET(current) - else // ok so lets find the network to send it too - var/datum/ntnet/net = networks[current.network_id] // get the sending network - net = net?.networks[current.receiver_id] // find the target network to broadcast - if(net) // we found it - current.receiver_id = net.collect_interfaces() // make a list of all the sending targets - else - // We got an error, the network is bad so send a NAK - target_interface = interfaces_by_hardware_id[current.sender_id] - if(!QDELETED(target_interface)) - SEND_SIGNAL(target_interface.parent, COMSIG_COMPONENT_NTNET_NAK, current , NETWORK_ERROR_BAD_NETWORK) - POP_PACKET(current) // and get rid of it - if (MC_TICK_CHECK) - return - -#undef POP_PACKET - -/* - * Main function to queue a packet. As long as we have valid receiver_id and network_id we will take it - * - * Main queuing function for any message sent. if the data.receiver_id is null, then it will be broadcasted - * error checking is only done during the process this just throws it on the queue. - * Arguments: - * * data - packet to be sent - */ -/datum/controller/subsystem/networks/proc/transmit(datum/netdata/data) - data.next = null // sanity check - - if(!last) - first = last = data - else - last.next = data - last = data - packet_count++ - // We do error checking when the packet is sent - return NETWORK_ERROR_OK - -/** - * Records a message into the station logging system for the network - * - * This CAN be read in station by personal so do not use it for game debugging - * during fire. At this point data.receiver_id has already been converted if it was a broadcast but - * is undefined in this function. It is also dumped to normal logs but remember players can read/intercept - * these messages - * Arguments: - * * log_string - message to log - * * network - optional, It can be a ntnet or just the text equivalent - * * hardware_id = optional, text, will look it up and return with the parent.name as well - */ -/datum/controller/subsystem/networks/proc/add_log(log_string, network = null) - set waitfor = FALSE // so process keeps running - var/list/log_text = list() - log_text += "\[[station_time_timestamp()]\]" - if(network) - var/datum/ntnet/net = network - if(!istype(net)) - net = networks[network] - if(net) // bad network? - log_text += "{[net.network_id]}" - else // bad network? - log_text += "{[network] *BAD*}" - - log_text += "*SYSTEM* - " - log_text += log_string - log_string = log_text.Join() - - logs.Add(log_string) - //log_telecomms("NetLog: [log_string]") // causes runtime on startup humm - - // We have too many logs, remove the oldest entries until we get into the limit - if(logs.len > setting_maxlogcount) - logs = logs.Copy(logs.len-setting_maxlogcount,0) - -/** - * Removes all station logs for the current game - */ -/datum/controller/subsystem/networks/proc/purge_logs() - logs = list() - add_log("-!- LOGS DELETED BY SYSTEM OPERATOR -!-") - -/datum/controller/subsystem/networks/proc/log_data_transfer( datum/netdata/data) - logs += "[station_time_timestamp()] - [data.generate_netlog()]" - if(logs.len > setting_maxlogcount) - logs = logs.Copy(logs.len - setting_maxlogcount, 0) - -/** - * Updates the maximum amount of logs and purges those that go beyond that number - * - * Shouldn't been needed to be run by players but maybe admins need it? - * Arguments: - * * lognumber - new setting_maxlogcount count - */ -/datum/controller/subsystem/networks/proc/update_max_log_count(lognumber) - if(!lognumber) - return FALSE - // Trim the value if necessary - lognumber = max(MIN_NTNET_LOGS, min(lognumber, MAX_NTNET_LOGS)) - setting_maxlogcount = lognumber - add_log("Configuration Updated. Now keeping [setting_maxlogcount] logs in system memory.") - - - -/** - * Gives an area a root and a network_area_id - * - * When a device is added to the network on map load, it needs to know where it is. - * So that it is added to that ruins/base's network instead of the general station network - * This way people on the station cannot just hack Charlie's doors and visa versa. All area's - * "should" have this information and if not one is created from existing map tags or - * ruin template id's. This SHOULD run before the Initialize of a atom, or the root will not - * be put in the object.area - * - * An example on what the area.network_root_id does/ - * Before Init: obj.network_id = "ATMOS.SCRUBBER" area.network_root_id="SS13_STATION" area.network_area_id = "BRIDGE" - * After Init: obj.network_id = "SS13_STATION.ATMOS.SCRUBBER" also obj.network_id = "SS13_STATION.AREA.BRIDGE" - * - * Arguments: - * * area - Area to modify the root id. - * * template - optional, map_template of that area - */ -/datum/controller/subsystem/networks/proc/lookup_area_root_id(area/A, datum/map_template/M=null) - /// Check if the area is valid and if it doesn't have a network root id. - if(!istype(A) || A.network_root_id != null) - return - - /// If we are a ruin or a shuttle, we get our own network - if(M) - /// if we have a template, try to get the network id from the template - if(M.station_id && M.station_id != LIMBO_NETWORK_ROOT) // check if the template specifies it - A.network_root_id = simple_network_name_fix(M.station_id) - else if(istype(M, /datum/map_template/shuttle)) // if not, then check if its a shuttle type - var/datum/map_template/shuttle/T = M // we are a shuttle so use shuttle id - A.network_root_id = simple_network_name_fix(T.shuttle_id) - else if(istype(M,/datum/map_template/ruin)) // if not again, check if its a ruin type - var/datum/map_template/ruin/R = M - A.network_root_id = simple_network_name_fix(R.id) - - if(!A.network_root_id) // not assigned? Then lets use some defaults - // Anything in Centcom is completely isolated - // Special case for holodecks. - if(istype(A,/area/station/holodeck)) - A.network_root_id = HOLODECK_NETWORK_ROOT // isolated from the station network - else if(SSmapping.level_trait(A.z, ZTRAIT_CENTCOM)) - A.network_root_id = CENTCOM_NETWORK_ROOT - else if(SSmapping.level_trait(A.z, ZTRAIT_RESERVED)) - A.network_root_id = SYNDICATE_NETWORK_ROOT - // Otherwise the default is the station - else - A.network_root_id = STATION_NETWORK_ROOT - -/datum/controller/subsystem/networks/proc/assign_area_network_id(area/A, datum/map_template/M=null) - if(!istype(A)) - return - if(!A.network_root_id) - lookup_area_root_id(A, M) - // finally set the network area id, bit copy paste from area Initialize - // This is done in case we have more than one area type, each area instance has its own network name - if(!A.network_area_id) - A.network_area_id = A.network_root_id + ".AREA." + simple_network_name_fix(A.name) // Make the string - if(!(A.area_flags & UNIQUE_AREA)) // if we aren't a unique area, make sure our name is different - A.network_area_id = SSnetworks.assign_random_name(5, A.network_area_id + "_") // tack on some garbage incase there are two area types - -/datum/controller/subsystem/networks/proc/assign_areas_root_ids(list/areas, datum/map_template/map_template) - for(var/area/area as anything in areas) - assign_area_network_id(area, map_template) - -/** - * Converts a list of string's into a full network_id - * - * Converts a list of individual branches into a proper network id. Validates - * individual parts to make sure they are clean. - * - * ex. list("A","B","C") -> A.B.C - * - * Arguments: - * * tree - List of strings - */ -/datum/controller/subsystem/networks/proc/network_list_to_string(list/tree) -#ifdef DEBUG_NETWORKS - ASSERT(tree && tree.len > 0) // this should be obvious but JUST in case. - for(var/part in tree) - if(!verify_network_name(part) || findtext(name,".") != 0) // and no stray dots - stack_trace("network_list_to_string: Cannot create network with ([part]) of ([tree.Join(".")])") - break -#endif - return tree.Join(".") - -/** - * Converts string into a list of network branches - * - * Converts a a proper network id into a list of the individual branches - * - * ex. A.B.C -> list("A","B","C") - * - * Arguments: - * * tree - List of strings - */ -/datum/controller/subsystem/networks/proc/network_string_to_list(name) -#ifdef DEBUG_NETWORKS - if(!verify_network_name(name)) - stack_trace("network_string_to_list: [name] IS INVALID") -#endif - return splittext(name,".") // should we do a splittext_char? I doubt we really need unicode in network names - - -/** - * Hard creates a network. Helper function for create_network_simple and create_network - * - * Hard creates a using a list of branches and returns. No error checking as it should - * of been done before this call - * - * Arguments: - * * network_tree - list,text List of branches of network - */ -/datum/controller/subsystem/networks/proc/_hard_create_network(list/network_tree) - var/network_name_part = network_tree[1] - var/network_id = network_name_part - var/datum/ntnet/parent = root_networks[network_name_part] - var/datum/ntnet/network - if(!parent) // we have no network root? Must be mapload of a ruin or such - parent = new(network_name_part) - - // go up the branches, creating nodes - for(var/i in 2 to network_tree.len) - network_name_part = network_tree[i] - network = parent.children[network_name_part] - network_id += "." + network_name_part - if(!network) - network = new(network_id, network_name_part, parent) - - parent = network - return network - - -/** - * Creates or finds a network anywhere in the world using a fully qualified name - * - * This is the simple case finding of a network in the world. It must take a full - * qualified network name and it will either return an existing network or build - * a new one from scratch. We must be able to create names on the fly as there is - * no way for the map loader to tell us ahead of time what networks to create or - * use for any maps or templates. So this thing will throw silent mapping errors - * and log them, but will always return a network for something. - * - * Arguments: - * * network_id - text, Fully qualified network name - */ -/datum/controller/subsystem/networks/proc/create_network_simple(network_id) - - var/datum/ntnet/network = networks[network_id] - if(network != null) - return network // don't worry about it - - /// Checks to make sure the network is valid. We log BOTH to mapping and telecoms - /// so if your checking for network errors you can find it in mapping to (because its their fault!) - if(!verify_network_name(network_id)) - log_mapping("create_network_simple: [network_id] IS INVALID, replacing with LIMBO") - log_telecomms("create_network_simple: [network_id] IS INVALID, replacing with LIMBO") - return networks[LIMBO_NETWORK_ROOT] - - var/list/network_tree = network_string_to_list(network_id) - if(!network_tree || network_tree.len == 0) - log_mapping("create_network_simple: [network_id] IS INVALID, replacing with LIMBO") - log_telecomms("create_network_simple: [network_id] IS INVALID, replacing with LIMBO") - return networks[LIMBO_NETWORK_ROOT] - - network = _hard_create_network(network_tree) -#ifdef DEBUG_NETWORKS - if(!network) - CRASH("NETWORK CANNOT BE NULL") -#endif - log_telecomms("create_network_simple: created final [network.network_id]") - return network // and we are done! - - -/** - * Creates or finds a network anywhere in the world using bits of text - * - * This works the same as create_network_simple however it allows the addition - * of qualified network names. So you can call it with a root_id and a sub - * network. However this function WILL return null if it cannot be created - * so it should be used with error checking is involved. - * - * ex. create_network("ROOT_NETWORK", "ATMOS.SCRUBBERS") -> ROOT_NETWORK.ATMOS.SCRUBBERS - * - * Arguments: - * * tree - List of string - */ -/datum/controller/subsystem/networks/proc/create_network(...) - var/list/network_tree = list() - - for(var/i in 1 to args.len) - var/part = args[i] -#ifdef DEBUG_NETWORKS - if(!part || !istext(part)) - /// stack trace here because this is a bad error - stack_trace("create_network: We only take text on [part] index [i]") - return null -#endif - network_tree += network_string_to_list(part) - - var/datum/ntnet/network = _hard_create_network(network_tree) - log_telecomms("create_network: created final [network.network_id]") - return network - -/** - * Generate a hardware id for devices. - * - * Creates a 32 bit hardware id for network devices. This is random so masking - * the number won't make routing "easier" (Think Ethernet) It does check if - * an existing device has the number but will NOT assign it as thats - * up to the collar - * - * Returns (string) The generated name - */ -/datum/controller/subsystem/networks/proc/get_next_HID() - do - var/string = md5("[num2text(rand(HID_RESTRICTED_END, 999999999), 12)]") - if(!string) - log_runtime("Could not generagea m5 hash from address, problem with md5?") - return //errored - . = "[copytext_char(string, 1, 9)]" //16 ^ 8 possibilities I think. - while(interfaces_by_hardware_id[.]) - -/** - * Generate a name devices - * - * Creates a randomly generated tag or name for devices or anything really - * it keeps track of a special list that makes sure no name is used more than - * once - * - * args: - * * len (int)(Optional) Default=5 The length of the name - * * prefix (string)(Optional) static text in front of the random name - * * postfix (string)(Optional) static text in back of the random name - * Returns (string) The generated name - */ -/datum/controller/subsystem/networks/proc/assign_random_name(len=5, prefix="", postfix="") - var/static/valid_chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" - var/list/new_name = list() - var/text - // machine id's should be fun random chars hinting at a larger world - do - new_name.Cut() - new_name += prefix - for(var/i = 1 to len) - new_name += valid_chars[rand(1,length(valid_chars))] - new_name += postfix - text = new_name.Join() - while(used_names[text]) - used_names[text] = TRUE - return text diff --git a/code/datums/components/ntnet_interface.dm b/code/datums/components/ntnet_interface.dm deleted file mode 100644 index 28ba2bd1f9e..00000000000 --- a/code/datums/components/ntnet_interface.dm +++ /dev/null @@ -1,140 +0,0 @@ - -/* - * Helper function that does 90% of the work in sending a packet - * - * This function gets the component and builds a packet so the sending - * person doesn't have to lift a finger. Just create a netdata datum or even - * just a list and it will send it on its merry way. - * - * Arguments: - * * packet_data - Either a list() or a /datum/netdata. If its netdata, the other args are ignored - * * target_id - Target hardware id or network_id for this packet. If we are a network id, then its - broadcasted to that network. - * * passkey - Authentication for the packet. If the target doesn't authenticate the packet is dropped - */ -/datum/proc/ntnet_send(packet_data, target_id = null, passkey = null) - var/datum/netdata/data = packet_data - if(!istype(data)) // construct netdata from list() - if(!islist(packet_data)) - stack_trace("ntnet_send: Bad packet creation") // hard fail as its runtime fault - return - data = new(packet_data) - data.receiver_id = target_id - data.passkey = passkey - var/datum/component/ntnet_interface/NIC = GetComponent(/datum/component/ntnet_interface) - if(!NIC) - return NETWORK_ERROR_NOT_ON_NETWORK - data.sender_id = NIC.hardware_id - data.network_id = NIC.network.network_id - data.receiver_id ||= data.network_id - return SSnetworks.transmit(data) - -/* - * # /datum/component/ntnet_interface - * - * This component connects a obj/datum to the station network. - * - * Anything can be connected to the station network. Any obj can auto connect as long as its network_id - * var is set before the parent new is called. This allows map objects to be connected. Technically the - * component only handles getting you on the network while SSnetwork and datum/ntnet does all the real work. - * There are quite a few stack_traces in here. This is because error checking should be done before this component is - * added. Also, there never should be a component that has no network. If it needs a network assign it to LIMBO - * - */ -/datum/component/ntnet_interface - var/hardware_id = null // text. this is the true ID. do not change this. stuff like ID forgery can be done manually. - var/id_tag = null // named tag, mainly used to look up mapping objects - var/datum/ntnet/network = null // network we are on, we MUST be on a network or there is no point in this component - var/list/registered_sockets = list()// list of ports opened up on devices - var/list/alias = list() // if we live in more than one network branch - -/** - * Initialize for the interface - * - * Assigns a hardware id and gets your object onto the network - * - * Arguments: - * * network_name - Fully qualified network id of the network we are joining - * * network_tag - The objects id_tag. Used for finding the device at mapload time - */ -/datum/component/ntnet_interface/Initialize(network_name, network_tag = null) - if(network_name == null || !istext(network_name)) - log_telecomms("ntnet_interface/Initialize: Bad network '[network_name]' for '[parent]', going to limbo it") - network_name = LIMBO_NETWORK_ROOT - // Tags cannot be numbers and must be unique over the world - if(network_tag != null && !istext(network_tag)) - // numbers are not allowed as lookups for interfaces - log_telecomms("Tag cannot be a number? '[network_name]' for '[parent]', going to limbo it") - network_tag = "BADTAG_" + network_tag - - hardware_id = SSnetworks.get_next_HID() - id_tag = network_tag - SSnetworks.interfaces_by_hardware_id[hardware_id] = src - - network = SSnetworks.create_network_simple(network_name) - - network.add_interface(src) - - -/** - * Create a port for this interface - * - * A port is basicity a shared associated list() with some values that - * indicated its been updated. (see _DEFINES/network.dm). By using a shared - * we don't have to worry about qdeling this object if it goes out of scope. - * - * Once a port is created any number of devices can use the port, however only - * the creating interface can disconnect it. - * - * Arguments: - * * port - text, Name of the port installed on this interface - * * data - list, shared list of data. Don't put objects in this - */ -/datum/component/ntnet_interface/proc/register_port(port, list/data) - if(!port || !length(data)) - stack_trace("port is null or data is empty") - return - if(registered_sockets[port]) - stack_trace("port already regestered") - return - data["_updated"] = FALSE - registered_sockets[port] = data - -/** - * Disconnects an existing port in the interface - * - * Removes a port from this interface and marks it that its - * has been disconnected - * - * Arguments: - * * port - text, Name of the port installed on this interface - * * data - list, shared list of data. Don't put objects in this - */ -/datum/component/ntnet_interface/proc/deregister_port(port) - if(registered_sockets[port]) // should I runtime if this isn't in here? - var/list/datalink = registered_sockets[port] - NETWORK_PORT_DISCONNECT(datalink) - // this should remove all outstanding ports - registered_sockets.Remove(port) - - -/** - * Connect to a port on this interface - * - * Returns the shared list that this interface uses to send - * data though a port. - * - * Arguments: - * * port - text, Name of the port installed on this interface - */ -/datum/component/ntnet_interface/proc/connect_port(port) - return registered_sockets[port] - -/datum/component/ntnet_interface/Destroy() - network.remove_interface(src, TRUE) - SSnetworks.interfaces_by_hardware_id.Remove(hardware_id) - for(var/port in registered_sockets) - var/list/datalink = registered_sockets[port] - NETWORK_PORT_DISCONNECT(datalink) - registered_sockets.Cut() - return ..() diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index ff28b1f4416..4a1fb8d4c13 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -107,11 +107,6 @@ ///This datum, if set, allows terrain generation behavior to be ran on Initialize() var/datum/map_generator/map_generator - /// Default network root for this area aka station, lavaland, etc - var/network_root_id = null - /// Area network id when you want to find all devices hooked up to this area - var/network_area_id = null - ///Used to decide what kind of reverb the area makes sound have var/sound_environment = SOUND_ENVIRONMENT_NONE @@ -200,11 +195,6 @@ GLOBAL_LIST_EMPTY(teleportlocs) reg_in_areas_in_z() - if(!mapload) - if(!network_root_id) - network_root_id = STATION_NETWORK_ROOT // default to station root because this might be created with a blueprint - SSnetworks.assign_area_network_id(src) - update_base_lighting() return INITIALIZE_HINT_LATELOAD diff --git a/code/game/area/areas/centcom.dm b/code/game/area/areas/centcom.dm index e035526b153..6b78e503b82 100644 --- a/code/game/area/areas/centcom.dm +++ b/code/game/area/areas/centcom.dm @@ -1,14 +1,5 @@ // CENTCOM - -/* -Side note, be sure to change the network_root_id of any areas that are not a part of centcom -and just using the z space as safe harbor. It shouldn't matter much as centcom z is isolated -from everything anyway. - -The areas used here are STRICTLY on the CC Z level. -*/ - // CentCom itself /area/centcom name = "CentCom" @@ -175,7 +166,7 @@ The areas used here are STRICTLY on the CC Z level. has_gravity = STANDARD_GRAVITY area_flags = UNIQUE_AREA | NOTELEPORT flags_1 = NONE - network_root_id = "MAGIC_NET" + //Abductors /area/centcom/abductor_ship @@ -187,7 +178,6 @@ The areas used here are STRICTLY on the CC Z level. base_lighting_alpha = 255 has_gravity = STANDARD_GRAVITY flags_1 = NONE - network_root_id = "ALIENS" //Syndicates /area/centcom/syndicate_mothership @@ -198,7 +188,6 @@ The areas used here are STRICTLY on the CC Z level. area_flags = UNIQUE_AREA | NOTELEPORT flags_1 = NONE ambience_index = AMBIENCE_DANGER - network_root_id = SYNDICATE_NETWORK_ROOT /area/centcom/syndicate_mothership/control name = "Syndicate Control Room" diff --git a/code/game/area/areas/holodeck.dm b/code/game/area/areas/holodeck.dm index ecd728e7831..b0691803bb7 100644 --- a/code/game/area/areas/holodeck.dm +++ b/code/game/area/areas/holodeck.dm @@ -10,7 +10,6 @@ var/obj/machinery/computer/holodeck/linked var/restricted = FALSE // if true, program goes on emag list - network_root_id = "HOLODECK" /* Power tracking: Use the holodeck computer's power grid Asserts are to avoid the inevitable infinite loops diff --git a/code/game/area/areas/ruins/space.dm b/code/game/area/areas/ruins/space.dm index e09aef2e40e..d7450a8b7de 100644 --- a/code/game/area/areas/ruins/space.dm +++ b/code/game/area/areas/ruins/space.dm @@ -536,7 +536,6 @@ ambientsounds = list('sound/ambience/ambisin2.ogg', 'sound/ambience/signal.ogg', 'sound/ambience/signal.ogg', 'sound/ambience/ambigen10.ogg', 'sound/ambience/ambitech.ogg',\ 'sound/ambience/ambitech2.ogg', 'sound/ambience/ambitech3.ogg', 'sound/ambience/ambimystery.ogg') airlock_wires = /datum/wires/airlock/engineering - network_root_id = STATION_NETWORK_ROOT //ABANDONED BOX WHITESHIP diff --git a/code/game/area/areas/station.dm b/code/game/area/areas/station.dm index c5362a67ad8..9bbe491d6df 100644 --- a/code/game/area/areas/station.dm +++ b/code/game/area/areas/station.dm @@ -1433,7 +1433,6 @@ ambientsounds = list('sound/ambience/ambisin2.ogg', 'sound/ambience/signal.ogg', 'sound/ambience/signal.ogg', 'sound/ambience/ambigen10.ogg', 'sound/ambience/ambitech.ogg',\ 'sound/ambience/ambitech2.ogg', 'sound/ambience/ambitech3.ogg', 'sound/ambience/ambimystery.ogg') airlock_wires = /datum/wires/airlock/engineering - network_root_id = STATION_NETWORK_ROOT // They should of unpluged the router before they left /area/station/tcommsat/computer name = "\improper Telecomms Control Room" diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index ba4698c54b3..cbb89e7fb8c 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -57,19 +57,6 @@ return FALSE return ..() -// Call this if you want to add your object to a network -/obj/proc/init_network_id(network_id) - var/area/A = get_area(src) - if(A) - if(!A.network_root_id) - log_telecomms("Area '[A.name]([REF(A)])' has no network network_root_id, force assigning in object [src]([REF(src)])") - SSnetworks.lookup_area_root_id(A) - network_id = NETWORK_NAME_COMBINE(A.network_root_id, network_id) // I regret nothing!! - else - log_telecomms("Created [src]([REF(src)] in nullspace, assuming network to be in station") - network_id = NETWORK_NAME_COMBINE(STATION_NETWORK_ROOT, network_id) // I regret nothing!! - AddComponent(/datum/component/ntnet_interface, network_id, id_tag) - /// A list of all /obj by their id_tag GLOBAL_LIST_EMPTY(objects_by_id_tag) diff --git a/code/modules/NTNet/netdata.dm b/code/modules/NTNet/netdata.dm deleted file mode 100644 index 04224033356..00000000000 --- a/code/modules/NTNet/netdata.dm +++ /dev/null @@ -1,126 +0,0 @@ -// This netlink class shares a list to two devices -// This allows skipping of sending many many packets -// just to update simple data -/datum/netlink - var/server_id - var/server_network - var/port - var/passkey = null // sends auth data used to check if we can connect or send data to a device - var/list/data - -/datum/netlink/New(datum/component/ntnet_interface/conn, port) - data = conn.registered_sockets[port] - ASSERT(data != null) - server_id = conn.hardware_id - server_network = conn.network.network_id - src.port = port - RegisterSignal(conn, COMSIG_COMPONENT_NTNET_PORT_DESTROYED, PROC_REF(_server_disconnected)) - ..() - -/datum/netlink/proc/_server_disconnected(datum/component/com) - SIGNAL_HANDLER - data = null - -/datum/netlink/Destroy() - passkey = null - data = null - return ..() - -// If you don't want to use this fine, but this just shows how the system works - -// I hate you all. I want to operator overload [] -// So fuck you all, Do NOT access data directly you freaks -// or this breaks god knows what. -// FINE, you don't have to use get, is dirty or even clean -// proc overhead is WAY more important than fucking clarity or -// sealed classes. But for the LOVE OF GOD make sure _updated -// is set if your going to do this. -/datum/netlink/proc/get(idx) - return data ? data[idx] : null - -/datum/netlink/proc/put(idx, V) - // is it posable to do this async without worry about racing conditions? - if(data && data[idx] != V) - data["_updated"] = TRUE - data[idx] = V - - -/datum/netlink/proc/is_dirty() - return data && data["_updated"] - -/datum/netlink/proc/clean() - if(data) - data["_updated"] = FALSE - -/datum/netlink/proc/is_connected() - return data != null - - - -/datum/netdata - //this requires some thought later on but for now it's fine. (WarlockD) ARRRRG - // Packets are kind of shaped like IPX. IPX had a network, a node (aka id) and a port. - // Special case with receiver_id == null, that wil broadcast to the network_id - // Also, if the network id is not the same for both sender and receiver the packet is dropped. - var/sender_id - var/receiver_id - var/network_id - var/passkey = null // sends auth data used to check if we can connect or send data to a device - var/list/data = list() - // Used for packet queuing - var/datum/netdata/next = null - var/mob/user = null // used for sending error messages - -/datum/netdata/New(list/data = null) - if(!data) - data = list() - src.data = data - -/datum/netdata/Destroy() - data = null - passkey = null - next = null - user = null - return ..() - -/datum/netdata/proc/clone(deep_copy=FALSE) - var/datum/netdata/C = new - C.sender_id = sender_id - C.receiver_id = receiver_id - C.network_id = network_id - C.passkey = passkey - C.user = user - C.next = null - if(deep_copy) - C.data = deep_copy_list(data) - else - C.data = data - return C - - -/datum/netdata/proc/json_to_data(json) - data = json_decode(json) - -/datum/netdata/proc/json_append_to_data(json) - data |= json_decode(json) - -/datum/netdata/proc/data_to_json() - return json_encode(data) - -/datum/netdata/proc/json_list_generation_admin() //for admin logs and such. - . = list() - . |= json_list_generation() - -/datum/netdata/proc/json_list_generation() - . = list() - . |= json_list_generation_netlog() - -/datum/netdata/proc/json_list_generation_netlog() - . = list() - .["network_id"] = network_id - .["sender_id"] = sender_id - .["receiver_id"] = receiver_id - .["data_list"] = data - -/datum/netdata/proc/generate_netlog() - return "[json_encode(json_list_generation_netlog())]" diff --git a/code/modules/NTNet/network.dm b/code/modules/NTNet/network.dm deleted file mode 100644 index b8432b46e44..00000000000 --- a/code/modules/NTNet/network.dm +++ /dev/null @@ -1,211 +0,0 @@ -/* - * # /datum/ntnet - * - * This class defines each network of the world. Each root network is accessible by any device - * on the same network but NOT accessible to any other "root" networks. All normal devices only have - * one network and one network_id. - * - * This thing replaces radio. Think of wifi but better, bigger and bolder! The idea is that any device - * on a network can reach any other device on that same network if it knows the hardware_id. You can also - * search or broadcast to devices if you know what branch you wish. That is to say you can broadcast to all - * devices on "SS13.ATMOS.SCRUBBERS" to change the settings of all the scrubbers on the station or to - * "SS13.AREA.FRED_HOME.SCRUBBERS" to all the scrubbers at one area. However devices CANNOT communicate cross - * networks normality. - * - */ - -/datum/ntnet - /// The full network name for this network ex. SS13.ATMOS.SCRUBBERS - var/network_id - /// The network name part of this leaf ex ATMOS - var/network_node_id - /// All devices on this network. ALL devices on this network, not just this branch. - /// This list is shared between all leaf networks so we don't have to keep going to the - /// parents on lookups. It is an associated list of hardware_id AND tag_id's - var/list/root_devices - /// This lists has all the networks in this node. Each name is fully qualified - /// ie. SS13.ATMOS.SCRUBBERS, SS13.ATMOS.VENTS, etc - var/list/networks - /// All the devices on this branch of the network - var/list/linked_devices - /// Network children. Associated list using the network_node_id of the child as the key - var/list/children - /// Parrnt of the network. If this is null, we are a oot network - var/datum/ntnet/parent - -/* - * Creates a new network - * - * Used for /datum/controller/subsystem/networks/proc/create_network so do not - * call yourself as new doesn't do any checking itself - * - * Arguments: - * * net_id - Fully qualified network id for this network - * * net_part_id - sub part of a network if this is a child of P - * * P - Parent network, this will be attached to that network. - */ -/datum/ntnet/New(net_id, net_part_id, datum/ntnet/P = null) - linked_devices = list() - children = list() - network_id = net_id - - if(P) - network_node_id = net_part_id - parent = P - parent.children[network_node_id] = src - root_devices = parent.root_devices - networks = parent.networks - networks[network_id] = src - else - network_node_id = net_id - parent = null - networks = list() - root_devices = linked_devices - SSnetworks.root_networks[network_id] = src - - SSnetworks.networks[network_id] = src - - SSnetworks.add_log("Network was created: [network_id]") - - return ..() - -/// A network should NEVER be deleted. If you don't want to show it exists just check if its -/// empty -/datum/ntnet/Destroy(force) - networks -= network_id - if(children.len > 0 || linked_devices.len > 0) - CRASH("Trying to delete a network with devices still in them") - - if(parent) - parent.children.Remove(network_id) - parent = null - else - SSnetworks.root_networks.Remove(network_id) - - SSnetworks.networks.Remove(network_id) - - root_devices = null - networks = null - network_node_id = null - SSnetworks.add_log("Network was destroyed: [network_id]") - network_id = null - - return ..() - -/* - * Collects all the devices on this branch of the network and maybe its - * children - * - * Used for broadcasting, this will collect all the interfaces on this - * network and by default everything below this branch. Will return an - * empty list if no devices were found - * - * Arguments: - * * include_children - Include the children of all branches below this - */ -/datum/ntnet/proc/collect_interfaces(include_children=TRUE) - if(!include_children || children.len == 0) - return linked_devices.Copy() - else - /// Please no recursion. Byond hates recursion - var/list/devices = list() - var/list/queue = list(src) // add ourselves - while(queue.len) - var/datum/ntnet/net = queue[queue.len--] - if(net.children.len > 0) - for(var/net_id in net.children) - queue += networks[net_id] - devices += net.linked_devices - return devices - - -/** - * Add this interface to this branch of the network. - * - * This will add a network interface to this branch of the network. - * If the interface already exists on the network it will add it and - * give the alias list in the interface this branch name. If the interface - * has an id_tag it will add that name to the root_devices for map lookup - * - * Arguments: - * * interface - ntnet component of the device to add to the network - */ -/datum/ntnet/proc/add_interface(datum/component/ntnet_interface/interface) - if(interface.network) - /// If we are doing a hard jump to a new network, log it - log_telecomms("The device {[interface.hardware_id]} is jumping networks from '[interface.network.network_id]' to '[network_id]'") - interface.network.remove_interface(interface, TRUE) - interface.network ||= src - interface.alias[network_id] = src // add to the alias just to make removing easier. - linked_devices[interface.hardware_id] = interface - root_devices[interface.hardware_id] = interface - if(interface.id_tag != null) // could be a type, never know - root_devices[interface.id_tag] = interface - -/* - * Remove this interface from the network - * - * This will remove an interface from this network and null the network field on the - * interface. Be sure that add_interface is run as soon as posable as an interface MUST - * have a network - * - * Arguments: - * * interface - ntnet component of the device to remove to the network - * * remove_all_alias - remove ALL references to this device on this network - */ -/datum/ntnet/proc/remove_interface(datum/component/ntnet_interface/interface, remove_all_alias=FALSE) - if(!interface.alias[network_id]) - log_telecomms("The device {[interface.hardware_id]} is trying to leave a '[network_id]'' when its on '[interface.network.network_id]'") - return - // just cashing it - var/hardware_id = interface.hardware_id - // Handle the quick case - interface.alias.Remove(network_id) - linked_devices.Remove(hardware_id) - if(remove_all_alias) - var/datum/ntnet/net - for(var/id in interface.alias) - net = interface.alias[id] - net.linked_devices.Remove(hardware_id) - - // Now check if there are more than meets the eye - if(interface.network == src || remove_all_alias) - // Ok, so we got to remove this network, but if we have an alias we are still "on" the network - // so we need to shift down to one of the other networks on the alias list. If the alias list - // is empty, fuck it and remove it from the network. - if(interface.alias.len > 0) - interface.network = interface.alias[1] // ... whatever is there. - else - // ok, hard remove from everything then - root_devices.Remove(interface.hardware_id) - if(interface.id_tag != null) // could be a type, never know - root_devices.Remove(interface.id_tag) - interface.network = null - -/* - * Move interface to another branch of the network - * - * This function is a lightweight way of moving an interface from one branch to another like a gps - * device going from one area to another. Target network MUST be this network or it will fail - * - * Arguments: - * * interface - ntnet component of the device to move - * * target_network - qualified network id to move to - * * original_network - qualified network id from the original network if not this one - */ -/datum/ntnet/proc/move_interface(datum/component/ntnet_interface/interface, target_network, original_network = null) - var/datum/ntnet/net = original_network == null ? src : networks[original_network] - var/datum/ntnet/target = networks[target_network] - if(!target || !net) - log_telecomms("The device {[interface.hardware_id]} is trying to move to a network ([target_network]) that is not on ([network_id])") - return - if(target.linked_devices[interface.hardware_id]) - log_telecomms("The device {[interface.hardware_id]} is trying to move to a network ([target_network]) it is already on.") - return - if(!net.linked_devices[interface.hardware_id]) - log_telecomms("The device {[interface.hardware_id]} is trying to move to a network ([target_network]) but its not on ([net.network_id]) ") - return - net.linked_devices.Remove(interface.hardware_id) - target.linked_devices[interface.hardware_id] = interface - interface.alias.Remove(net.network_id) - interface.alias[target.network_id] = target diff --git a/code/modules/NTNet/relays.dm b/code/modules/NTNet/relays.dm index 6669129a307..bb6b8b11815 100644 --- a/code/modules/NTNet/relays.dm +++ b/code/modules/NTNet/relays.dm @@ -1,3 +1,14 @@ +GLOBAL_LIST_EMPTY(ntnet_relays) + +///Checks whether NTNet is available by ensuring at least one relay exists and is operational. +/proc/find_functional_ntnet_relay() + // Check all relays. If we have at least one working relay, ntos is up. + for(var/obj/machinery/ntnet_relay/relays as anything in GLOB.ntnet_relays) + if(!relays.is_operational) + continue + return TRUE + return FALSE + // Relays don't handle any actual communication. Global NTNet datum does that, relays only tell the datum if it should or shouldn't work. /obj/machinery/ntnet_relay name = "NTNet Quantum Relay" @@ -69,13 +80,13 @@ if((dos_overload > dos_capacity) && !dos_failure) set_dos_failure(TRUE) update_appearance() - SSnetworks.add_log("Quantum relay switched from normal operation mode to overload recovery mode.") + SSmodular_computers.add_log("Quantum relay switched from normal operation mode to overload recovery mode.") // If the DoS buffer reaches 0 again, restart. if((dos_overload == 0) && dos_failure) set_dos_failure(FALSE) update_appearance() - SSnetworks.add_log("Quantum relay switched from overload recovery mode to normal operation mode.") - ..() + SSmodular_computers.add_log("Quantum relay switched from overload recovery mode to normal operation mode.") + return ..() /obj/machinery/ntnet_relay/ui_interact(mob/user, datum/tgui/ui) ui = SStgui.try_update_ui(user, src, ui) @@ -100,11 +111,11 @@ dos_overload = 0 set_dos_failure(FALSE) update_appearance() - SSnetworks.add_log("Quantum relay manually restarted from overload recovery mode to normal operation mode.") + SSmodular_computers.add_log("Quantum relay manually restarted from overload recovery mode to normal operation mode.") return TRUE if("toggle") set_relay_enabled(!relay_enabled) - SSnetworks.add_log("Quantum relay manually [relay_enabled ? "enabled" : "disabled"].") + SSmodular_computers.add_log("Quantum relay manually [relay_enabled ? "enabled" : "disabled"].") update_appearance() return TRUE @@ -112,13 +123,13 @@ uid = gl_uid++ component_parts = list() - SSmodular_computers.ntnet_relays.Add(src) - SSnetworks.add_log("New quantum relay activated. Current amount of linked relays: [SSmodular_computers.ntnet_relays.len]") + GLOB.ntnet_relays += src + SSmodular_computers.add_log("New quantum relay activated. Current amount of linked relays: [GLOB.ntnet_relays.len]") return ..() /obj/machinery/ntnet_relay/Destroy() - SSmodular_computers.ntnet_relays.Remove(src) - SSnetworks.add_log("Quantum relay connection severed. Current amount of linked relays: [SSmodular_computers.ntnet_relays.len]") + GLOB.ntnet_relays -= src + SSmodular_computers.add_log("Quantum relay connection severed. Current amount of linked relays: [GLOB.ntnet_relays.len]") for(var/datum/computer_file/program/ntnet_dos/D in dos_sources) D.target = null diff --git a/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm b/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm index 00d46dfcf4f..067cad67d9e 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm @@ -36,7 +36,7 @@ /obj/machinery/atmospherics/components/unary/vent_pump/Initialize(mapload) if(!id_tag) - id_tag = SSnetworks.assign_random_name() + id_tag = assign_random_name() var/static/list/tool_screentips = list( TOOL_MULTITOOL = list( SCREENTIP_CONTEXT_LMB = "Log to link later with air sensor", diff --git a/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm b/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm index f55b03190a7..26a1bc261fd 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm @@ -35,7 +35,7 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/Initialize(mapload) if(!id_tag) - id_tag = SSnetworks.assign_random_name() + id_tag = assign_random_name() . = ..() for(var/to_filter in filter_types) diff --git a/code/modules/mapping/map_template.dm b/code/modules/mapping/map_template.dm index cbfe2ddb24e..30477657ab5 100644 --- a/code/modules/mapping/map_template.dm +++ b/code/modules/mapping/map_template.dm @@ -92,7 +92,6 @@ // first or not. Its defined In Initialize yet its run first in templates // BEFORE so... hummm SSmapping.reg_in_areas_in_z(areas) - SSnetworks.assign_areas_root_ids(areas, src) if(!SSatoms.initialized) return diff --git a/code/modules/mob/living/simple_animal/bot/mulebot.dm b/code/modules/mob/living/simple_animal/bot/mulebot.dm index b252a978107..0b2476dcf70 100644 --- a/code/modules/mob/living/simple_animal/bot/mulebot.dm +++ b/code/modules/mob/living/simple_animal/bot/mulebot.dm @@ -31,7 +31,6 @@ bot_type = MULE_BOT path_image_color = "#7F5200" - var/network_id = NETWORK_BOTS_CARGO /// unique identifier in case there are multiple mulebots. var/id @@ -85,10 +84,6 @@ AddElement(/datum/element/ridable, /datum/component/riding/creature/mulebot) diag_hud_set_mulebotcell() - if(network_id) - AddComponent(/datum/component/ntnet_interface, network_id) - - /mob/living/simple_animal/bot/mulebot/handle_atom_del(atom/A) if(A == load) unload(0) diff --git a/code/modules/modular_computers/computers/item/computer.dm b/code/modules/modular_computers/computers/item/computer.dm index 952271d1550..447194e3ae1 100644 --- a/code/modules/modular_computers/computers/item/computer.dm +++ b/code/modules/modular_computers/computers/item/computer.dm @@ -621,14 +621,14 @@ GLOBAL_LIST_EMPTY(TabletMessengers) // a list of all active messengers, similar // Returns 0 for No Signal, 1 for Low Signal and 2 for Good Signal. 3 is for wired connection (always-on) /obj/item/modular_computer/proc/get_ntnet_status() - // NTNet is down and we are not connected via wired connection. No signal. - if(!SSmodular_computers.check_relay_operation()) - return NTNET_NO_SIGNAL - // computers are connected through ethernet if(hardware_flag & PROGRAM_CONSOLE) return NTNET_ETHERNET_SIGNAL + // NTNet is down and we are not connected via wired connection. No signal. + if(!find_functional_ntnet_relay()) + return NTNET_NO_SIGNAL + var/turf/current_turf = get_turf(src) if(!current_turf || !istype(current_turf)) return NTNET_NO_SIGNAL @@ -646,7 +646,7 @@ GLOBAL_LIST_EMPTY(TabletMessengers) // a list of all active messengers, similar if(!get_ntnet_status()) return FALSE - return SSnetworks.add_log("[src]: [text]", network_id) + return SSmodular_computers.add_log("[src]: [text]", network_id) /obj/item/modular_computer/proc/shutdown_computer(loud = 1) kill_program(forced = TRUE) diff --git a/code/modules/modular_computers/file_system/programs/antagonist/dos.dm b/code/modules/modular_computers/file_system/programs/antagonist/dos.dm index f865ff3a946..0645fa67a5a 100644 --- a/code/modules/modular_computers/file_system/programs/antagonist/dos.dm +++ b/code/modules/modular_computers/file_system/programs/antagonist/dos.dm @@ -46,7 +46,7 @@ return switch(action) if("PRG_target_relay") - for(var/obj/machinery/ntnet_relay/relays as anything in SSmodular_computers.ntnet_relays) + for(var/obj/machinery/ntnet_relay/relays as anything in GLOB.ntnet_relays) if(relays.uid == params["targid"]) target = relays break @@ -63,7 +63,7 @@ executed = TRUE target.dos_sources.Add(src) if(SSmodular_computers.intrusion_detection_enabled) - SSnetworks.add_log("IDS WARNING - Excess traffic flood targeting relay [target.uid] detected from device: [computer.name]") + SSmodular_computers.add_log("IDS WARNING - Excess traffic flood targeting relay [target.uid] detected from device: [computer.name]") SSmodular_computers.intrusion_detection_alarm = TRUE return TRUE @@ -80,7 +80,7 @@ else data["target"] = FALSE data["relays"] = list() - for(var/obj/machinery/ntnet_relay/relays as anything in SSmodular_computers.ntnet_relays) + for(var/obj/machinery/ntnet_relay/relays as anything in GLOB.ntnet_relays) data["relays"] += list(list("id" = relays.uid)) data["focus"] = target ? target.uid : null diff --git a/code/modules/modular_computers/file_system/programs/wirecarp.dm b/code/modules/modular_computers/file_system/programs/wirecarp.dm index 3d107405f10..f33660a3752 100644 --- a/code/modules/modular_computers/file_system/programs/wirecarp.dm +++ b/code/modules/modular_computers/file_system/programs/wirecarp.dm @@ -23,17 +23,13 @@ SSmodular_computers.intrusion_detection_enabled = !SSmodular_computers.intrusion_detection_enabled return TRUE if("toggle_relay") - var/obj/machinery/ntnet_relay/target_relay = locate(params["ref"]) in SSmodular_computers.ntnet_relays + var/obj/machinery/ntnet_relay/target_relay = locate(params["ref"]) in GLOB.ntnet_relays if(!istype(target_relay)) return target_relay.set_relay_enabled(!target_relay.relay_enabled) return TRUE if("purgelogs") - SSnetworks.purge_logs() - return TRUE - if("updatemaxlogs") - var/logcount = params["new_number"] - SSnetworks.update_max_log_count(logcount) + SSmodular_computers.purge_logs() return TRUE if("toggle_mass_pda") var/obj/item/modular_computer/target_tablet = locate(params["ref"]) in GLOB.TabletMessengers @@ -47,7 +43,7 @@ var/list/data = list() data["ntnetrelays"] = list() - for(var/obj/machinery/ntnet_relay/relays as anything in SSmodular_computers.ntnet_relays) + for(var/obj/machinery/ntnet_relay/relays as anything in GLOB.ntnet_relays) var/list/relay_data = list() relay_data["is_operational"] = !!relays.is_operational relay_data["name"] = relays.name @@ -59,9 +55,8 @@ data["idsalarm"] = SSmodular_computers.intrusion_detection_alarm data["ntnetlogs"] = list() - for(var/i in SSnetworks.logs) + for(var/i in SSmodular_computers.logs) data["ntnetlogs"] += list(list("entry" = i)) - data["ntnetmaxlogs"] = SSnetworks.setting_maxlogcount data["tablets"] = list() for(var/obj/item/modular_computer/messenger as anything in GetViewableDevices()) @@ -76,9 +71,3 @@ data["tablets"] += list(tablet_data) return data - -/datum/computer_file/program/ntnetmonitor/ui_static_data(mob/user) - var/list/data = ..() - data["minlogs"] = MIN_NTNET_LOGS - data["maxlogs"] = MAX_NTNET_LOGS - return data diff --git a/code/modules/paperwork/fax.dm b/code/modules/paperwork/fax.dm index ad59c9a836a..fd1e73e31f9 100644 --- a/code/modules/paperwork/fax.dm +++ b/code/modules/paperwork/fax.dm @@ -57,7 +57,7 @@ GLOBAL_VAR_INIT(nt_fax_department, pick("NT HR Department", "NT Legal Department /obj/machinery/fax/Initialize(mapload) . = ..() if (!fax_id) - fax_id = SSnetworks.assign_random_name() + fax_id = assign_random_name() if (!fax_name) fax_name = "Unregistered fax " + fax_id wires = new /datum/wires/fax(src) diff --git a/code/modules/projectiles/guns/energy/dueling.dm b/code/modules/projectiles/guns/energy/dueling.dm index 6d4125a4b42..42d9d967ac5 100644 --- a/code/modules/projectiles/guns/energy/dueling.dm +++ b/code/modules/projectiles/guns/energy/dueling.dm @@ -21,7 +21,7 @@ var/pairing_code = "" /datum/duel/New(new_gun_A, new_gun_B) - pairing_code = SSnetworks.assign_random_name() + pairing_code = assign_random_name() gun_A = new_gun_A gun_B = new_gun_B diff --git a/code/modules/unit_tests/_unit_tests.dm b/code/modules/unit_tests/_unit_tests.dm index 060db1006f9..976398772d7 100644 --- a/code/modules/unit_tests/_unit_tests.dm +++ b/code/modules/unit_tests/_unit_tests.dm @@ -158,7 +158,6 @@ #include "mutant_hands_consistency.dm" #include "mutant_organs.dm" #include "novaflower_burn.dm" -#include "ntnetwork_tests.dm" #include "nuke_cinematic.dm" #include "objectives.dm" #include "orderable_items.dm" diff --git a/code/modules/unit_tests/ntnetwork_tests.dm b/code/modules/unit_tests/ntnetwork_tests.dm deleted file mode 100644 index 21e3925f685..00000000000 --- a/code/modules/unit_tests/ntnetwork_tests.dm +++ /dev/null @@ -1,93 +0,0 @@ -/datum/unit_test/ntnetwork - var/number_of_names_to_test = 50 - var/length_of_test_network = 5 - - var/static/list/valid_network_names = list( - "SS13.ATMOS.SCRUBBERS.SM", - "DEEPSPACE.HYDRO.PLANT", - "SINDIE.STINKS.BUTT", - ) - - var/static/list/invalid_network_names = list( - ".SS13.BOB", - "SS13.OHMAN.", - "SS13.HAS A SPACE", - ) - - var/static/list/valid_network_trees = list( - list( - "SS13", - "ATMOS", - "SCRUBBERS", - "SM", - ), - list( - "DEEPSPACE", - "HYDRO", - "PLANT", - ), - list( - "SINDIE", - "STINKS", - "BUTT", - ), - ) - - var/static/list/network_roots = list( - HOLODECK_NETWORK_ROOT, - STATION_NETWORK_ROOT, - CENTCOM_NETWORK_ROOT, - SYNDICATE_NETWORK_ROOT, - LIMBO_NETWORK_ROOT, - ) - - var/static/list/random_words_for_testing = list( - __NETWORK_CARGO, - __NETWORK_BOTS, - ) - -/datum/unit_test/proc/mangle_word(word) - var/len = length(word) - var/space_pos = round(len/2) - word = copytext(word,1,space_pos) + " " + copytext(word,space_pos,len) - return word - -/datum/unit_test/ntnetwork/Run() - // First check if name checks work - for(var/name in valid_network_names) - TEST_ASSERT(verify_network_name(name), "Network name ([name]) marked as invalid but supposed to valid") - - for(var/name in invalid_network_names) - TEST_ASSERT(!verify_network_name(name), "Network name ([name]) marked as valid but supposed to be invalid") - - // Next check if we can pack and unpack network names - for(var/i in 1 to valid_network_names.len) - var/name = valid_network_names[i] - var/list/name_list = SSnetworks.network_string_to_list(name) - TEST_ASSERT(compare_list(name_list, valid_network_trees[i]), "Network name ([name]) did not unpack into a proper list") - for(var/i in 1 to valid_network_trees.len) - var/list/name_list = valid_network_trees[i] - var/name = SSnetworks.network_list_to_string(name_list) - TEST_ASSERT_EQUAL(name, valid_network_names[i], "Network name ([name]) did not pack into a proper string") - - // Ok, we know we can verify network names now, and that we can pack and unpack. Lets try making some random good names - var/list/generated_network_names = list() - var/test_string - for(var/i in 1 to number_of_names_to_test) - var/list/builder = list() - builder += pick(network_roots) - for(var/j in 1 to length_of_test_network) - builder += pick(random_words_for_testing) - test_string = SSnetworks.network_list_to_string(builder) - var/name_fix = simple_network_name_fix(test_string) - TEST_ASSERT_EQUAL(name_fix, test_string, "Network name ([test_string]) was not fixed correctly to ([name_fix])") - generated_network_names += name_fix // save for future - // test badly generated names - for(var/i in 1 to number_of_names_to_test) - var/list/builder = list() - builder += mangle_word(pick(network_roots)) - for(var/j in 1 to length_of_test_network) - builder += mangle_word(pick(random_words_for_testing)) - test_string = builder.Join(".") - var/name_fix = simple_network_name_fix(test_string) - TEST_ASSERT(verify_network_name(name_fix), "Network name ([test_string]) was not fixed correctly ([name_fix]) with bad name") diff --git a/code/modules/wiremod/components/ntnet/ntnet_receive.dm b/code/modules/wiremod/components/ntnet/ntnet_receive.dm index 8e6addc1736..2047834d294 100644 --- a/code/modules/wiremod/components/ntnet/ntnet_receive.dm +++ b/code/modules/wiremod/components/ntnet/ntnet_receive.dm @@ -19,17 +19,13 @@ /// Encryption key var/datum/port/input/enc_key -/obj/item/circuit_component/ntnet_receive/Initialize(mapload) - . = ..() - init_network_id(__NETWORK_CIRCUITS) - /obj/item/circuit_component/ntnet_receive/populate_options() list_options = add_option_port("List Type", GLOB.wiremod_basic_types) /obj/item/circuit_component/ntnet_receive/populate_ports() data_package = add_output_port("Data Package", PORT_TYPE_LIST(PORT_TYPE_ANY)) enc_key = add_input_port("Encryption Key", PORT_TYPE_STRING) - RegisterSignal(src, COMSIG_COMPONENT_NTNET_RECEIVE, PROC_REF(ntnet_receive)) + RegisterSignal(SSdcs, COMSIG_GLOB_CIRCUIT_NTNET_DATA_SENT, PROC_REF(ntnet_receive)) /obj/item/circuit_component/ntnet_receive/pre_input_received(datum/port/input/port) if(port == list_options) @@ -37,13 +33,15 @@ data_package.set_datatype(PORT_TYPE_LIST(new_datatype)) -/obj/item/circuit_component/ntnet_receive/proc/ntnet_receive(datum/source, datum/netdata/data) +/obj/item/circuit_component/ntnet_receive/proc/ntnet_receive(obj/item/circuit_component/ntnet_send/source, list/data) SIGNAL_HANDLER - if(data.data["enc_key"] != enc_key.value) + if(!find_functional_ntnet_relay()) + return + if(data["enc_key"] != enc_key.value) return - var/datum/weakref/ref = data.data["port"] + var/datum/weakref/ref = data["port"] var/datum/port/input/port = ref?.resolve() if(!port) return @@ -52,5 +50,5 @@ if(!datatype_handler?.can_receive_from_datatype(port.datatype)) return - data_package.set_output(data.data["data"]) + data_package.set_output(data["data"]) trigger_output.set_output(COMPONENT_SIGNAL) diff --git a/code/modules/wiremod/components/ntnet/ntnet_send.dm b/code/modules/wiremod/components/ntnet/ntnet_send.dm index 0cad7f11e4a..c08ebdb3e7a 100644 --- a/code/modules/wiremod/components/ntnet/ntnet_send.dm +++ b/code/modules/wiremod/components/ntnet/ntnet_send.dm @@ -20,10 +20,6 @@ /// Encryption key var/datum/port/input/enc_key -/obj/item/circuit_component/ntnet_send/Initialize(mapload) - . = ..() - init_network_id(__NETWORK_CIRCUITS) - /obj/item/circuit_component/ntnet_send/populate_options() list_options = add_option_port("List Type", GLOB.wiremod_basic_types) @@ -37,4 +33,6 @@ data_package.set_datatype(PORT_TYPE_LIST(new_datatype)) /obj/item/circuit_component/ntnet_send/input_received(datum/port/input/port) - ntnet_send(list("data" = data_package.value, "enc_key" = enc_key.value, "port" = WEAKREF(data_package))) + if(!find_functional_ntnet_relay()) + return + SEND_GLOBAL_SIGNAL(COMSIG_GLOB_CIRCUIT_NTNET_DATA_SENT, src, list("data" = data_package.value, "enc_key" = enc_key.value, "port" = WEAKREF(data_package))) diff --git a/tgstation.dme b/tgstation.dme index 0a77ae02a19..f8a6eb2d551 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -144,7 +144,6 @@ #include "code\__DEFINES\move_force.dm" #include "code\__DEFINES\movement.dm" #include "code\__DEFINES\movespeed_modification.dm" -#include "code\__DEFINES\networks.dm" #include "code\__DEFINES\nitrile.dm" #include "code\__DEFINES\nuclear_bomb.dm" #include "code\__DEFINES\obj_flags.dm" @@ -279,7 +278,6 @@ #include "code\__DEFINES\dcs\signals\signals_moveloop.dm" #include "code\__DEFINES\dcs\signals\signals_movetype.dm" #include "code\__DEFINES\dcs\signals\signals_music.dm" -#include "code\__DEFINES\dcs\signals\signals_NTNet.dm" #include "code\__DEFINES\dcs\signals\signals_object.dm" #include "code\__DEFINES\dcs\signals\signals_operating_computer.dm" #include "code\__DEFINES\dcs\signals\signals_painting.dm" @@ -705,7 +703,6 @@ #include "code\controllers\subsystem\processing\fastprocess.dm" #include "code\controllers\subsystem\processing\greyscale.dm" #include "code\controllers\subsystem\processing\instruments.dm" -#include "code\controllers\subsystem\processing\networks.dm" #include "code\controllers\subsystem\processing\obj.dm" #include "code\controllers\subsystem\processing\obj_tab_items.dm" #include "code\controllers\subsystem\processing\plumbing.dm" @@ -1006,7 +1003,6 @@ #include "code\datums\components\mob_harvest.dm" #include "code\datums\components\multiple_lives.dm" #include "code\datums\components\mutant_hands.dm" -#include "code\datums\components\ntnet_interface.dm" #include "code\datums\components\nuclear_bomb_operator.dm" #include "code\datums\components\omen.dm" #include "code\datums\components\onwear_mood.dm" @@ -4316,8 +4312,6 @@ #include "code\modules\movespeed\modifiers\mobs.dm" #include "code\modules\movespeed\modifiers\reagent.dm" #include "code\modules\movespeed\modifiers\status_effects.dm" -#include "code\modules\NTNet\netdata.dm" -#include "code\modules\NTNet\network.dm" #include "code\modules\NTNet\relays.dm" #include "code\modules\pai\actions.dm" #include "code\modules\pai\camera.dm" diff --git a/tgui/packages/tgui/interfaces/NtosNetMonitor.js b/tgui/packages/tgui/interfaces/NtosNetMonitor.js index b8c7b2b5b94..52eedf96086 100644 --- a/tgui/packages/tgui/interfaces/NtosNetMonitor.js +++ b/tgui/packages/tgui/interfaces/NtosNetMonitor.js @@ -1,5 +1,5 @@ import { useBackend, useSharedState } from '../backend'; -import { Box, Button, LabeledList, NoticeBox, NumberInput, Icon, Section, Stack, Tabs } from '../components'; +import { Box, Button, LabeledList, NoticeBox, Icon, Section, Stack, Tabs } from '../components'; import { NtosWindow } from '../layouts'; export const NtosNetMonitor = (props, context) => { @@ -9,9 +9,6 @@ export const NtosNetMonitor = (props, context) => { ntnetrelays, idsalarm, idsstatus, - ntnetmaxlogs, - maxlogs, - minlogs, ntnetlogs = [], tablets = [], } = data; @@ -42,9 +39,6 @@ export const NtosNetMonitor = (props, context) => { ntnetrelays={ntnetrelays} idsalarm={idsalarm} idsstatus={idsstatus} - ntnetmaxlogs={ntnetmaxlogs} - maxlogs={maxlogs} - minlogs={minlogs} ntnetlogs={ntnetlogs} /> @@ -60,15 +54,7 @@ export const NtosNetMonitor = (props, context) => { }; const MainPage = (props, context) => { - const { - ntnetrelays, - idsalarm, - idsstatus, - ntnetmaxlogs, - maxlogs, - minlogs, - ntnetlogs = [], - } = props; + const { ntnetrelays, idsalarm, idsstatus, ntnetlogs = [] } = props; const { act, data } = useBackend(context); return (
@@ -125,22 +111,6 @@ const MainPage = (props, context) => { } /> - - act('updatemaxlogs', { - new_number: value, - }) - } - /> - } - />