mirror of
https://github.com/yogstation13/Yogstation.git
synced 2025-02-26 09:04:50 +00:00
52 lines
1.8 KiB
Plaintext
52 lines
1.8 KiB
Plaintext
PROCESSING_SUBSYSTEM_DEF(networks)
|
|
name = "Networks"
|
|
priority = FIRE_PRIORITY_NETWORKS
|
|
wait = 1
|
|
stat_tag = "NET"
|
|
flags = SS_KEEP_TIMING
|
|
init_order = INIT_ORDER_NETWORKS
|
|
var/datum/ntnet/station/station_network
|
|
var/assignment_hardware_id = HID_RESTRICTED_END
|
|
var/list/networks_by_id = list() //id = network
|
|
var/list/interfaces_by_id = list() //hardware id = component interface
|
|
var/resolve_collisions = TRUE
|
|
|
|
/datum/controller/subsystem/processing/networks/Initialize()
|
|
station_network = new
|
|
station_network.register_map_supremecy()
|
|
return SS_INIT_SUCCESS
|
|
|
|
/datum/controller/subsystem/processing/networks/proc/register_network(datum/ntnet/network)
|
|
if(!networks_by_id[network.network_id])
|
|
networks_by_id[network.network_id] = network
|
|
return TRUE
|
|
return FALSE
|
|
|
|
/datum/controller/subsystem/processing/networks/proc/unregister_network(datum/ntnet/network)
|
|
networks_by_id -= network.network_id
|
|
return TRUE
|
|
|
|
/datum/controller/subsystem/processing/networks/proc/register_interface(datum/component/ntnet_interface/D)
|
|
if(!interfaces_by_id[D.hardware_id])
|
|
interfaces_by_id[D.hardware_id] = D
|
|
return TRUE
|
|
return FALSE
|
|
|
|
/datum/controller/subsystem/processing/networks/proc/unregister_interface(datum/component/ntnet_interface/D)
|
|
interfaces_by_id -= D.hardware_id
|
|
return TRUE
|
|
|
|
/datum/controller/subsystem/processing/networks/proc/get_next_HID()
|
|
var/string = "[num2text(assignment_hardware_id++, 12)]"
|
|
return make_address(string)
|
|
|
|
/datum/controller/subsystem/processing/networks/proc/make_address(string)
|
|
if(!string)
|
|
return resolve_collisions? make_address("[num2text(rand(HID_RESTRICTED_END, 999999999), 12)]"):null
|
|
var/hex = md5(string)
|
|
if(!hex)
|
|
return //errored
|
|
. = "[copytext_char(hex, 1, 9)]" //16 ^ 8 possibilities I think.
|
|
if(interfaces_by_id[.])
|
|
return resolve_collisions? make_address("[num2text(rand(HID_RESTRICTED_END, 999999999), 12)]"):null
|