mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2025-12-16 04:34:21 +00:00
rscadd: Circuit ntnet components buffed. Added a new low level ntnet component that can send custom data instead of just the two plaintext and one passkey format, which things will use by default. Ntnet now uses a list for their data instead of three variables. they also have lowered complexity for the now weakened normal network component, and has lower cooldowns.
69 lines
2.6 KiB
Plaintext
69 lines
2.6 KiB
Plaintext
//Thing meant for allowing datums and objects to access a NTnet network datum.
|
|
/datum/proc/ntnet_recieve(datum/netdata/data)
|
|
return
|
|
|
|
/datum/proc/ntnet_recieve_broadcast(datum/netdata/data)
|
|
return
|
|
|
|
/datum/proc/ntnet_send(datum/netdata/data, netid)
|
|
GET_COMPONENT(NIC, /datum/component/ntnet_interface)
|
|
if(!NIC)
|
|
return FALSE
|
|
return NIC.__network_send(data, netid)
|
|
|
|
/datum/component/ntnet_interface
|
|
var/hardware_id //text. this is the true ID. do not change this. stuff like ID forgery can be done manually.
|
|
var/network_name = "" //text
|
|
var/list/networks_connected_by_id = list() //id = datum/ntnet
|
|
var/differentiate_broadcast = TRUE //If false, broadcasts go to ntnet_recieve. NOT RECOMMENDED.
|
|
|
|
/datum/component/ntnet_interface/Initialize(force_name = "NTNet Device", autoconnect_station_network = TRUE) //Don't force ID unless you know what you're doing!
|
|
hardware_id = "[SSnetworks.get_next_HID()]"
|
|
network_name = force_name
|
|
if(!SSnetworks.register_interface(src))
|
|
. = COMPONENT_INCOMPATIBLE
|
|
CRASH("Unable to register NTNet interface. Interface deleted.")
|
|
if(autoconnect_station_network)
|
|
register_connection(SSnetworks.station_network)
|
|
|
|
/datum/component/ntnet_interface/Destroy()
|
|
unregister_all_connections()
|
|
SSnetworks.unregister_interface(src)
|
|
return ..()
|
|
|
|
/datum/component/ntnet_interface/proc/__network_recieve(datum/netdata/data) //Do not directly proccall!
|
|
parent.SendSignal(COMSIG_COMPONENT_NTNET_RECIEVE, data)
|
|
if(differentiate_broadcast && data.broadcast)
|
|
parent.ntnet_recieve_broadcast(data)
|
|
else
|
|
parent.ntnet_recieve(data)
|
|
|
|
/datum/component/ntnet_interface/proc/__network_send(datum/netdata/data, netid) //Do not directly proccall!
|
|
// Process data before sending it
|
|
data.pre_send(src)
|
|
|
|
if(netid)
|
|
if(networks_connected_by_id[netid])
|
|
var/datum/ntnet/net = networks_connected_by_id[netid]
|
|
return net.process_data_transmit(src, data)
|
|
return FALSE
|
|
for(var/i in networks_connected_by_id)
|
|
var/datum/ntnet/net = networks_connected_by_id[i]
|
|
net.process_data_transmit(src, data)
|
|
return TRUE
|
|
|
|
/datum/component/ntnet_interface/proc/register_connection(datum/ntnet/net)
|
|
if(net.interface_connect(src))
|
|
networks_connected_by_id[net.network_id] = net
|
|
return TRUE
|
|
|
|
/datum/component/ntnet_interface/proc/unregister_all_connections()
|
|
for(var/i in networks_connected_by_id)
|
|
unregister_connection(networks_connected_by_id[i])
|
|
return TRUE
|
|
|
|
/datum/component/ntnet_interface/proc/unregister_connection(datum/ntnet/net)
|
|
net.interface_disconnect(src)
|
|
networks_connected_by_id -= net.network_id
|
|
return TRUE
|