Adds 3 new NTNet components (#60557)

Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
This commit is contained in:
SmArtKar
2021-08-13 21:53:48 +03:00
committed by GitHub
parent b0bd677418
commit 47f039ffbc
6 changed files with 113 additions and 0 deletions
@@ -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)
@@ -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)