Files
GS13NG/code/game/machinery/telecomms/machines/server.dm
T

182 lines
5.5 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
anchored = TRUE
use_power = IDLE_POWER_USE
idle_power_usage = 15
machinetype = 4
circuit = /obj/item/circuitboard/machine/telecomms/server
var/list/log_entries = list()
var/list/stored_names = list()
var/list/TrafficActions = list()
var/logs = 0 // number of logs
var/totaltraffic = 0 // gigabytes (if > 1024, divide by 1024 -> terrabytes)
var/list/memory = list() // stored memory
var/encryption = "null" // encryption key: ie "password"
var/salt = "null" // encryption salt: ie "123comsat"
// would add up to md5("password123comsat")
var/language = "human"
var/obj/item/device/radio/headset/server_radio = null
var/last_signal = 0 // Last time it sent a signal
/obj/machinery/telecomms/server/Initialize()
. = ..()
server_radio = new
/obj/machinery/telecomms/server/receive_information(datum/signal/signal, obj/machinery/telecomms/machine_from)
if(signal.data["message"])
if(is_freq_listening(signal))
if(traffic > 0)
totaltraffic += traffic // add current traffic to total traffic
//Is this a test signal? Bypass logging
if(signal.data["type"] != 4)
// If signal has a message and appropriate frequency
update_logs()
var/datum/comm_log_entry/log = new
// Copy the signal.data entries we want
log.parameters["mobtype"] = signal.data["mobtype"]
log.parameters["job"] = signal.data["job"]
log.parameters["key"] = signal.data["key"]
log.parameters["message"] = signal.data["message"]
log.parameters["name"] = signal.data["name"]
log.parameters["realname"] = signal.data["realname"]
//log.parameters["uspeech"] = signal.data["languages"] & HUMAN //good enough
// TODO languages: ^ I don't know what this does
// If the signal is still compressed, make the log entry gibberish
if(signal.data["compression"] > 0)
log.parameters["message"] = Gibberish(signal.data["message"], signal.data["compression"] + 50)
log.parameters["job"] = Gibberish(signal.data["job"], signal.data["compression"] + 50)
log.parameters["name"] = Gibberish(signal.data["name"], signal.data["compression"] + 50)
log.parameters["realname"] = Gibberish(signal.data["realname"], signal.data["compression"] + 50)
log.input_type = "Corrupt File"
// Log and store everything that needs to be logged
log_entries.Add(log)
if(!(signal.data["name"] in stored_names))
stored_names.Add(signal.data["name"])
logs++
signal.data["server"] = src
// Give the log a name
var/identifier = num2text( rand(-1000,1000) + world.time )
log.name = "data packet ([md5(identifier)])"
var/can_send = relay_information(signal, "/obj/machinery/telecomms/hub")
if(!can_send)
relay_information(signal, "/obj/machinery/telecomms/broadcaster")
/obj/machinery/telecomms/server/proc/update_logs()
// start deleting the very first log entry
if(logs >= 400)
for(var/i = 1, i <= logs, i++) // locate the first garbage collectable log entry and remove it
var/datum/comm_log_entry/L = log_entries[i]
if(L.garbage_collector)
log_entries.Remove(L)
logs--
break
/obj/machinery/telecomms/server/proc/add_entry(content, input)
var/datum/comm_log_entry/log = new
var/identifier = num2text( rand(-1000,1000) + world.time )
log.name = "[input] ([md5(identifier)])"
log.input_type = input
log.parameters["message"] = content
log_entries.Add(log)
update_logs()
// Simple log entry datum
/datum/comm_log_entry
var/parameters = list() // carbon-copy to signal.data[]
var/name = "data packet (#)"
var/garbage_collector = 1 // if set to 0, will not be garbage collected
var/input_type = "Speech File"
//Preset Servers
/obj/machinery/telecomms/server/presets
network = "tcommsat"
/obj/machinery/telecomms/server/presets/Initialize()
. = ..()
name = id
/obj/machinery/telecomms/server/presets/science
id = "Science Server"
freq_listening = list(GLOB.SCI_FREQ)
autolinkers = list("science")
/obj/machinery/telecomms/server/presets/medical
id = "Medical Server"
freq_listening = list(GLOB.MED_FREQ)
autolinkers = list("medical")
/obj/machinery/telecomms/server/presets/supply
id = "Supply Server"
freq_listening = list(GLOB.SUPP_FREQ)
autolinkers = list("supply")
/obj/machinery/telecomms/server/presets/service
id = "Service Server"
freq_listening = list(GLOB.SERV_FREQ)
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
// 1441 to 1489
/obj/machinery/telecomms/server/presets/common/Initialize()
. = ..()
for(var/i = 1441, i < 1489, i += 2)
freq_listening |= i
/obj/machinery/telecomms/server/presets/command
id = "Command Server"
freq_listening = list(GLOB.COMM_FREQ)
autolinkers = list("command")
/obj/machinery/telecomms/server/presets/engineering
id = "Engineering Server"
freq_listening = list(GLOB.ENG_FREQ)
autolinkers = list("engineering")
/obj/machinery/telecomms/server/presets/security
id = "Security Server"
freq_listening = list(GLOB.SEC_FREQ)
autolinkers = list("security")
/obj/machinery/telecomms/server/presets/common/birdstation/Initialize()
. = ..()
freq_listening = list()