mirror of
https://github.com/yogstation13/Yogstation.git
synced 2025-02-26 09:04:50 +00:00
67 lines
2.5 KiB
Plaintext
67 lines
2.5 KiB
Plaintext
//Thing meant for allowing datums and objects to access a NTnet network datum.
|
|
/datum/proc/ntnet_receive(datum/netdata/data)
|
|
return
|
|
|
|
/datum/proc/ntnet_receive_broadcast(datum/netdata/data)
|
|
return
|
|
|
|
/datum/proc/ntnet_send(datum/netdata/data, netid)
|
|
var/datum/component/ntnet_interface/NIC = GetComponent(/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_receive. 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_receive(datum/netdata/data) //Do not directly proccall!
|
|
SEND_SIGNAL(parent, COMSIG_COMPONENT_NTNET_RECEIVE, data)
|
|
if(differentiate_broadcast && data.broadcast)
|
|
parent.ntnet_receive_broadcast(data)
|
|
else
|
|
parent.ntnet_receive(data)
|
|
|
|
/datum/component/ntnet_interface/proc/__network_send(datum/netdata/data, netid) //Do not directly proccall!
|
|
|
|
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
|