diff --git a/code/__DEFINES/networks.dm b/code/__DEFINES/networks.dm index ad877bcec30..2d2a1e1acfd 100644 --- a/code/__DEFINES/networks.dm +++ b/code/__DEFINES/networks.dm @@ -34,6 +34,7 @@ #define __NETWORK_BOTS "BOTS" #define __NETWORK_COMPUTER "COMPUTER" #define __NETWORK_CARDS "CARDS" +#define __NETWORK_CIRCUITS "CIRCUITS" /// Various combined subnetworks #define NETWORK_DOOR_REMOTES NETWORK_NAME_COMBINE(__NETWORK_DOORS, __NETWORK_REMOTES) diff --git a/code/modules/research/designs/wiremod_designs.dm b/code/modules/research/designs/wiremod_designs.dm index 595110cd3d1..e333aa2d599 100644 --- a/code/modules/research/designs/wiremod_designs.dm +++ b/code/modules/research/designs/wiremod_designs.dm @@ -233,6 +233,16 @@ id = "comp_module" build_path = /obj/item/circuit_component/module +/datum/design/component/ntnet_receive + name = "Pressure NTNet Transmitter" + id = "comp_ntnet_receive" + build_path = /obj/item/circuit_component/ntnet_receive + +/datum/design/component/ntnet_send + name = "NTNet Request Component" + id = "comp_ntnet_send" + build_path = /obj/item/circuit_component/ntnet_send + /datum/design/component/list_literal name = "List Literal Component" id = "comp_list_literal" diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm index 3b3b2e941a6..c78ebf49156 100644 --- a/code/modules/research/techweb/all_nodes.dm +++ b/code/modules/research/techweb/all_nodes.dm @@ -219,6 +219,8 @@ "comp_module", "comp_multiplexer", "comp_not", + "comp_ntnet_receive", + "comp_ntnet_send", "comp_pressuresensor", "comp_radio", "comp_random", diff --git a/code/modules/wiremod/components/ntnet/ntnet_reciever.dm b/code/modules/wiremod/components/ntnet/ntnet_reciever.dm new file mode 100644 index 00000000000..a84ece8610e --- /dev/null +++ b/code/modules/wiremod/components/ntnet/ntnet_reciever.dm @@ -0,0 +1,61 @@ +/** + * # NTNet Reciever Component + * + * Recieves data through NTNet. + */ + +/obj/item/circuit_component/ntnet_receive + display_name = "NTNet Receiver" + desc = "Recieves data packages through NTNet. If Encryption Key is set then only signals with the same Encryption Key will be received." + + circuit_flags = CIRCUIT_FLAG_OUTPUT_SIGNAL //trigger_output + + network_id = __NETWORK_CIRCUITS + + var/datum/port/input/push_hid + var/datum/port/output/hid + var/datum/port/output/data_package + var/datum/port/output/secondary_package + var/datum/port/input/enc_key + var/datum/port/input/option/data_type_options + var/datum/port/input/option/secondary_data_type_options + +/obj/item/circuit_component/ntnet_receive/Initialize() + . = ..() + AddComponent(/datum/component/ntnet_interface) + data_package = add_output_port("Data Package", PORT_TYPE_ANY) + secondary_package = add_output_port("Secondary Package", PORT_TYPE_ANY) + enc_key = add_input_port("Encryption Key", PORT_TYPE_STRING) + RegisterSignal(src, COMSIG_COMPONENT_NTNET_RECEIVE, .proc/ntnet_receive) + +/obj/item/circuit_component/ntnet_receive/populate_options() + var/static/component_options = list( + PORT_TYPE_ANY, + PORT_TYPE_STRING, + PORT_TYPE_NUMBER, + PORT_TYPE_LIST, + PORT_TYPE_ATOM, + ) + data_type_options = add_option_port("Data Type", component_options) + secondary_data_type_options = add_option_port("Secondary Data Type", component_options) + +/obj/item/circuit_component/ntnet_receive/input_received(datum/port/input/port) + . = ..() + if(.) + return + + if(COMPONENT_TRIGGERED_BY(data_type_options, port)) + data_package.set_datatype(data_type_options.input_value) + + if(COMPONENT_TRIGGERED_BY(secondary_data_type_options, port)) + secondary_package.set_datatype(secondary_data_type_options.input_value) + +/obj/item/circuit_component/ntnet_receive/proc/ntnet_receive(datum/source, datum/netdata/data) + SIGNAL_HANDLER + + if(data.data["enc_key"] != enc_key.input_value) + return + + data_package.set_output(data.data["data"]) + secondary_package.set_output(data.data["data_secondary"]) + trigger_output.set_output(COMPONENT_SIGNAL) diff --git a/code/modules/wiremod/components/ntnet/ntnet_request.dm b/code/modules/wiremod/components/ntnet/ntnet_request.dm new file mode 100644 index 00000000000..c71b6091ce2 --- /dev/null +++ b/code/modules/wiremod/components/ntnet/ntnet_request.dm @@ -0,0 +1,37 @@ +/** + * # NTNet Transmitter Component + * + * Sends a data package through NTNet + */ + +/obj/item/circuit_component/ntnet_send + display_name = "NTNet Transmitter" + desc = "Sends a data package through NTNet when triggered. If target HID is not provided, data will be sent to all circuits in the network. If Encryption Key is set then transmitted data will be only picked up by receivers with the same Encryption Key." + + circuit_flags = CIRCUIT_FLAG_INPUT_SIGNAL + + network_id = __NETWORK_CIRCUITS + + var/datum/port/input/data_package + var/datum/port/input/secondary_package + var/datum/port/input/enc_key + +/obj/item/circuit_component/ntnet_send/Initialize() + . = ..() + data_package = add_input_port("Data Package", PORT_TYPE_ANY) + secondary_package = add_input_port("Secondary Package", PORT_TYPE_ANY) + enc_key = add_input_port("Encryption Key", PORT_TYPE_STRING) + +/obj/item/circuit_component/ntnet_send/input_received(datum/port/input/port) + . = ..() + if(. || !data_package.input_value) + return + + var/list/datalist = list("data" = data_package.input_value) + if(secondary_package.input_value) + datalist["data_secondary"] = secondary_package.input_value + if(enc_key.input_value) + datalist["enc_key"] = enc_key.input_value + var/datum/netdata/data = new(datalist) + data.receiver_id = __NETWORK_CIRCUITS + ntnet_send(data) diff --git a/tgstation.dme b/tgstation.dme index 2cdaa6df00c..ec6a55f5b6d 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -3743,6 +3743,8 @@ #include "code\modules\wiremod\components\math\logic.dm" #include "code\modules\wiremod\components\math\not.dm" #include "code\modules\wiremod\components\math\random.dm" +#include "code\modules\wiremod\components\ntnet\ntnet_reciever.dm" +#include "code\modules\wiremod\components\ntnet\ntnet_request.dm" #include "code\modules\wiremod\components\sensors\pressuresensor.dm" #include "code\modules\wiremod\components\sensors\tempsensor.dm" #include "code\modules\wiremod\components\string\concat.dm"