mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2025-12-11 10:11:09 +00:00
Done using this command sed -Ei 's/(\s*\S+)\s*\t+/\1 /g' code/**/*.dm We have countless examples in the codebase with this style gone wrong, and defines and such being on hideously different levels of indentation. Fixing this to keep the alignment involves tainting the blames of code your PR doesn't need to be touching at all. And ultimately, it's hideous. There are some files that this sed makes uglier. I can fix these when they are pointed out, but I believe this is ultimately for the greater good of readability. I'm more concerned with if any strings relied on this. Hi codeowners! Co-authored-by: Jared-Fogle <35135081+Jared-Fogle@users.noreply.github.com>
144 lines
5.4 KiB
Plaintext
144 lines
5.4 KiB
Plaintext
|
|
/*
|
|
* Helper function that does 90% of the work in sending a packet
|
|
*
|
|
* This function gets the component and builds a packet so the sending
|
|
* person doesn't have to lift a finger. Just create a netdata datum or even
|
|
* just a list and it will send it on its merry way.
|
|
*
|
|
* Arguments:
|
|
* * packet_data - Either a list() or a /datum/netdata. If its netdata, the other args are ignored
|
|
* * target_id - Target hardware id or network_id for this packet. If we are a network id, then its
|
|
broadcasted to that network.
|
|
* * passkey - Authentication for the packet. If the target doesn't authenticate the packet is dropped
|
|
*/
|
|
/datum/proc/ntnet_send(packet_data, target_id = null, passkey = null)
|
|
var/datum/netdata/data = packet_data
|
|
if(!data) // check for easy case
|
|
if(!islist(packet_data) || target_id == null)
|
|
stack_trace("ntnet_send: Bad packet creation") // hard fail as its runtime fault
|
|
return
|
|
data = new(packet_data)
|
|
data.receiver_id = target_id
|
|
data.passkey = passkey
|
|
if(data.receiver_id == null)
|
|
return NETWORK_ERROR_BAD_TARGET_ID
|
|
var/datum/component/ntnet_interface/NIC = GetComponent(/datum/component/ntnet_interface)
|
|
if(!NIC)
|
|
return NETWORK_ERROR_NOT_ON_NETWORK
|
|
data.sender_id = NIC.hardware_id
|
|
data.network_id = NIC.network.network_id
|
|
return SSnetworks.transmit(data)
|
|
|
|
/*
|
|
* # /datum/component/ntnet_interface
|
|
*
|
|
* This component connects a obj/datum to the station network.
|
|
*
|
|
* Anything can be connected to the station network. Any obj can auto connect as long as its network_id
|
|
* var is set before the parent new is called. This allows map objects to be connected. Technically the
|
|
* component only handles getting you on the network while SSnetwork and datum/ntnet does all the real work.
|
|
* There are quite a few stack_traces in here. This is because error checking should be done before this component is
|
|
* added. Also, there never should be a component that has no network. If it needs a network assign it to LIMBO
|
|
*
|
|
*/
|
|
/datum/component/ntnet_interface
|
|
var/hardware_id = null // text. this is the true ID. do not change this. stuff like ID forgery can be done manually.
|
|
var/id_tag = null // named tag, mainly used to look up mapping objects
|
|
var/datum/ntnet/network = null // network we are on, we MUST be on a network or there is no point in this component
|
|
var/list/registered_sockets = list()// list of ports opened up on devices
|
|
var/list/alias = list() // if we live in more than one network branch
|
|
|
|
/**
|
|
* Initialize for the interface
|
|
*
|
|
* Assigns a hardware id and gets your object onto the network
|
|
*
|
|
* Arguments:
|
|
* * network_name - Fully qualified network id of the network we are joining
|
|
* * network_tag - The objects id_tag. Used for finding the device at mapload time
|
|
*/
|
|
/datum/component/ntnet_interface/Initialize(network_name, network_tag = null)
|
|
if(network_name == null || !istext(network_name))
|
|
log_telecomms("ntnet_interface/Initialize: Bad network '[network_name]' for '[parent]', going to limbo it")
|
|
network_name = LIMBO_NETWORK_ROOT
|
|
// Tags cannot be numbers and must be unique over the world
|
|
if(network_tag != null && !istext(network_tag))
|
|
// numbers are not allowed as lookups for interfaces
|
|
log_telecomms("Tag cannot be a number? '[network_name]' for '[parent]', going to limbo it")
|
|
network_tag = "BADTAG_" + network_tag
|
|
|
|
hardware_id = SSnetworks.get_next_HID()
|
|
id_tag = network_tag
|
|
SSnetworks.interfaces_by_hardware_id[hardware_id] = src
|
|
|
|
network = SSnetworks.create_network_simple(network_name)
|
|
|
|
network.add_interface(src)
|
|
|
|
|
|
/**
|
|
* Create a port for this interface
|
|
*
|
|
* A port is basicity a shared associated list() with some values that
|
|
* indicated its been updated. (see _DEFINES/network.dm). By using a shared
|
|
* we don't have to worry about qdeling this object if it goes out of scope.
|
|
*
|
|
* Once a port is created any number of devices can use the port, however only
|
|
* the creating interface can disconnect it.
|
|
*
|
|
* Arguments:
|
|
* * port - text, Name of the port installed on this interface
|
|
* * data - list, shared list of data. Don't put objects in this
|
|
*/
|
|
/datum/component/ntnet_interface/proc/register_port(port, list/data)
|
|
if(!port || !length(data))
|
|
stack_trace("port is null or data is empty")
|
|
return
|
|
if(registered_sockets[port])
|
|
stack_trace("port already regestered")
|
|
return
|
|
data["_updated"] = FALSE
|
|
registered_sockets[port] = data
|
|
|
|
/**
|
|
* Disconnects an existing port in the interface
|
|
*
|
|
* Removes a port from this interface and marks it that its
|
|
* has been disconnected
|
|
*
|
|
* Arguments:
|
|
* * port - text, Name of the port installed on this interface
|
|
* * data - list, shared list of data. Don't put objects in this
|
|
*/
|
|
/datum/component/ntnet_interface/proc/deregister_port(port)
|
|
if(registered_sockets[port]) // should I runtime if this isn't in here?
|
|
var/list/datalink = registered_sockets[port]
|
|
NETWORK_PORT_DISCONNECT(datalink)
|
|
// this should remove all outstanding ports
|
|
registered_sockets.Remove(port)
|
|
|
|
|
|
/**
|
|
* Connect to a port on this interface
|
|
*
|
|
* Returns the shared list that this interface uses to send
|
|
* data though a port.
|
|
*
|
|
* Arguments:
|
|
* * port - text, Name of the port installed on this interface
|
|
*/
|
|
/datum/component/ntnet_interface/proc/connect_port(port)
|
|
return registered_sockets[port]
|
|
|
|
|
|
|
|
/datum/component/ntnet_interface/Destroy()
|
|
network.remove_interface(src, TRUE)
|
|
SSnetworks.interfaces_by_hardware_id.Remove(hardware_id)
|
|
for(var/port in registered_sockets)
|
|
var/list/datalink = registered_sockets[port]
|
|
NETWORK_PORT_DISCONNECT(datalink)
|
|
registered_sockets.Cut()
|
|
return ..()
|