Files
2022-04-06 18:41:31 -03:00

129 lines
4.0 KiB
Plaintext

/*
The server logs all traffic and signal data. Once it records the signal, it sends
it to the subspace broadcaster.
Store a maximum of 100 logs and then deletes them.
*/
/obj/machinery/telecomms/server
name = "telecommunication server"
icon_state = "comm_server"
desc = "A machine used to store data and network statistics."
density = TRUE
use_power = IDLE_POWER_USE
idle_power_usage = 15
circuit = /obj/item/circuitboard/machine/telecomms/server
var/list/log_entries = list()
var/totaltraffic = 0 // gigabytes (if > 1024, divide by 1024 -> terrabytes)
/obj/machinery/telecomms/server/Initialize(mapload)
. = ..()
/obj/machinery/telecomms/server/RefreshParts()
idle_power_usage = 15
for(var/obj/item/stock_parts/manipulator/P in component_parts)
idle_power_usage -= (P.rating) //has 2 manipulators
/obj/machinery/telecomms/server/receive_information(datum/signal/subspace/vocal/signal, obj/machinery/telecomms/machine_from)
// can't log non-vocal signals
if(!istype(signal) || !signal.data["message"] || !is_freq_listening(signal))
return
if(traffic > 0)
totaltraffic += traffic // add current traffic to total traffic
// Delete particularly old logs
if(LAZYLEN(log_entries) >= 400) //[list].len is not safe
log_entries.Cut(1, 2)
var/datum/comm_log_entry/log = new
log.parameters["mobtype"] = signal.virt.source.type
log.parameters["name"] = signal.data["name"]
log.parameters["job"] = signal.data["job"]
log.parameters["message"] = signal.data["message"]
log.parameters["language"] = signal.language
// If the signal is still compressed, make the log entry gibberish
var/compression = signal.data["compression"]
if(compression > 0)
log.input_type = "Corrupt File"
log.parameters["name"] = Gibberish(signal.data["name"], compression + 50)
log.parameters["job"] = Gibberish(signal.data["job"], compression + 50)
log.parameters["message"] = Gibberish(signal.data["message"], compression + 50)
// Give the log a name and store it
var/identifier = num2text( rand(-1000,1000) + world.time )
log.name = "data packet ([md5(identifier)])"
log_entries.Add(log)
var/can_send = relay_information(signal, /obj/machinery/telecomms/hub)
if(!can_send)
relay_information(signal, /obj/machinery/telecomms/broadcaster)
// Simple log entry datum
/datum/comm_log_entry
var/input_type = "Speech File"
var/name = "data packet (#)"
var/parameters = list() // copied from signal.data above
// Preset Servers
/obj/machinery/telecomms/server/presets
network = "tcommsat"
/obj/machinery/telecomms/server/presets/Initialize(mapload)
. = ..()
name = id
/obj/machinery/telecomms/server/presets/science
id = "Science Server"
freq_listening = list(FREQ_SCIENCE)
autolinkers = list("science")
/obj/machinery/telecomms/server/presets/medical
id = "Medical Server"
freq_listening = list(FREQ_MEDICAL)
autolinkers = list("medical")
/obj/machinery/telecomms/server/presets/supply
id = "Supply Server"
freq_listening = list(FREQ_SUPPLY)
autolinkers = list("supply")
/obj/machinery/telecomms/server/presets/service
id = "Service Server"
freq_listening = list(FREQ_SERVICE)
autolinkers = list("service")
/obj/machinery/telecomms/server/presets/common
id = "Common Server"
freq_listening = list()
autolinkers = list("common")
//Common and other radio frequencies for people to freely use
/obj/machinery/telecomms/server/presets/common/Initialize(mapload)
. = ..()
for(var/i = MIN_FREQ, i <= MAX_FREQ, i += 2)
freq_listening |= i
/obj/machinery/telecomms/server/presets/command
id = "Command Server"
freq_listening = list(FREQ_COMMAND)
autolinkers = list("command")
/obj/machinery/telecomms/server/presets/engineering
id = "Engineering Server"
freq_listening = list(FREQ_ENGINEERING)
autolinkers = list("engineering")
/obj/machinery/telecomms/server/presets/security
id = "Security Server"
freq_listening = list(FREQ_SECURITY)
autolinkers = list("security")
/obj/machinery/telecomms/server/presets/common/birdstation/Initialize(mapload)
. = ..()
freq_listening = list()