//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31
/obj/machinery/computer/telecomms
/obj/machinery/computer/telecomms/server
name = "Telecommunications Server Monitor"
desc = "A monitor that contains and displays the logs of a selected telecommunications server to authorized personnel."
icon_screen = "comm_logs"
icon_keyboard = "green_key"
icon_keyboard_emis = "green_key_mask"
light_color = LIGHT_COLOR_GREEN
var/screen = 0 // the screen number:
var/list/servers = list() // the servers located by the computer
var/obj/machinery/telecomms/server/SelectedServer
var/network = "NULL" // the network to probe
var/temp = "" // temporary feedback messages
var/universal_translate = 0 // set to 1 if it can translate nonhuman speech
req_access = list(ACCESS_TCOMSAT)
var/last_print_time
/obj/machinery/computer/telecomms/server/attack_hand(mob/user)
if(stat & (BROKEN|NOPOWER))
return
user.set_machine(src)
var/dat = "
Telecommunications Server Monitor"
switch(screen)
// --- Main Menu ---
if(0)
dat += "
[temp]
"
dat += "
Current Network: [network]
"
if(servers.len)
dat += "
Detected Telecommunication Servers:"
for(var/obj/machinery/telecomms/T in servers)
dat += "- [REF(T)] [T.name] ([T.id])
"
dat += "
"
dat += "
\[Flush Buffer\]"
else
dat += "
No servers detected. Scan for servers: \[Scan\]"
// --- Viewing Server ---
if(1)
dat += "
[temp]
"
dat += "\[Main Menu\] \[Refresh\] \[Print Logs\]"
dat += "
Current Network: [network]"
dat += "
Selected Server: [SelectedServer.id]"
if(SelectedServer.totaltraffic >= 1024)
dat += "
Total recorded traffic: [round(SelectedServer.totaltraffic / 1024)] Terrabytes
"
else
dat += "
Total recorded traffic: [SelectedServer.totaltraffic] Gigabytes
"
dat += log_entries_to_text(user, SelectedServer)
user << browse(HTML_SKELETON_TITLE("Telecommunications Server Monitor", dat), "window=comm_monitor;size=575x400")
onclose(user, "server_control")
temp = ""
return
/obj/machinery/computer/telecomms/server/Topic(href, href_list)
if(..())
return
add_fingerprint(usr)
usr.set_machine(src)
if(href_list["viewserver"])
screen = 1
for(var/obj/machinery/telecomms/T in servers)
if(T.id == href_list["viewserver"])
SelectedServer = T
break
if(href_list["operation"])
switch(href_list["operation"])
if("release")
servers = list()
screen = 0
if("mainmenu")
screen = 0
if("scan")
if(servers.len > 0)
temp = "- FAILED: CANNOT PROBE WHEN BUFFER FULL -"
else
for(var/obj/machinery/telecomms/server/T in range(25, src))
if(T.network == network)
servers.Add(T)
if(!servers.len)
temp = "- FAILED: UNABLE TO LOCATE SERVERS IN \[[network]\] -"
else
temp = "- [servers.len] SERVERS PROBED & BUFFERED -"
screen = 0
if(href_list["delete"])
if(!src.allowed(usr) && !emagged)
to_chat(usr, SPAN_WARNING("ACCESS DENIED."))
return
if(SelectedServer)
var/datum/comm_log_entry/D = SelectedServer.log_entries[text2num(href_list["delete"])]
temp = "- DELETED ENTRY: [D.name] -"
SelectedServer.log_entries.Remove(D)
qdel(D)
else
temp = "- FAILED: NO SELECTED MACHINE -"
if(href_list["network"])
var/newnet = sanitize(input(usr, "Which network do you want to view?", "Comm Monitor", network) as null|text)
if(newnet && (((usr in range(1, src)) || issilicon(usr))))
if(length(newnet) > 15)
temp = "- FAILED: NETWORK TAG STRING TOO LENGHTLY -"
else
network = newnet
screen = 0
servers = list()
temp = "- NEW NETWORK TAG SET IN ADDRESS \[[network]\] -"
updateUsrDialog()
return
/obj/machinery/computer/telecomms/server/attackby(obj/item/attacking_item, mob/user)
if(attacking_item.tool_behaviour == TOOL_SCREWDRIVER)
if(attacking_item.use_tool(src, user, 20, volume = 50))
if (src.stat & BROKEN)
to_chat(user, SPAN_NOTICE("The broken glass falls out."))
var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc )
new /obj/item/material/shard( src.loc )
var/obj/item/circuitboard/comm_server/M = new /obj/item/circuitboard/comm_server( A )
for (var/obj/C in src)
C.forceMove(src.loc)
A.circuit = M
A.state = 3
A.icon_state = "3"
A.anchored = 1
qdel(src)
else
to_chat(user, SPAN_NOTICE("You disconnect the monitor."))
var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc )
var/obj/item/circuitboard/comm_server/M = new /obj/item/circuitboard/comm_server( A )
for (var/obj/C in src)
C.forceMove(src.loc)
A.circuit = M
A.state = 4
A.icon_state = "4"
A.anchored = 1
qdel(src)
return TRUE
src.updateUsrDialog()
/obj/machinery/computer/telecomms/server/emag_act(var/remaining_charges, var/mob/user)
if(!emagged)
playsound(src.loc, 'sound/effects/sparks4.ogg', 75, 1)
emagged = 1
to_chat(user, SPAN_NOTICE("You disable the security protocols."))
src.updateUsrDialog()
return 1
/obj/machinery/computer/telecomms/server/proc/log_entries_to_text(mob/user, var/obj/machinery/telecomms/server/SelectedServer, start = 1, end = SelectedServer.log_entries.len)
if(!end)
end = SelectedServer.log_entries.len
start = between(1, start, SelectedServer.log_entries.len)
end = between(0, end, SelectedServer.log_entries.len)
var/list/log_entries = SelectedServer.log_entries.Copy(start, end + 1)
. += "Stored Logs: "
var/i = start - 1
for(var/datum/comm_log_entry/C as anything in log_entries)
i++
// If the log is a speech file
if(C.input_type == "Speech File")
. += "- [C.name] \[X\]
"
var/datum/language/language = C.parameters["language"]
var/message_out = ""
var/message_in = C.parameters["message"]
if(universal_translate || (language in user.languages))
message_out = "\"[message_in]\""
else if(!(language in user.languages))
// Language unknown by viewer, scramble
message_out = "\"[language.scramble(message_in, user.languages)]\""
else
// Entirely unintelligible
message_out = "(Unintelligible)"
. += "Data type: [C.input_type]
"
. += "Source: [C.parameters["name"]] [C.parameters["job"] ? "(Job: [C.parameters["job"]])" : ""]
"
. += "Class: [C.parameters["race"]]
"
. += "Contents: [message_out]
"
if(language)
. += "Language: [language.name]
"
. += "
"
else if(C.input_type == "Execution Error")
. += "- [C.name] \[X\]
"
. += "Output: \"[C.parameters["message"]]\"
"
. += "
"
. += "
"