/* 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()