Add caching to air alarms, apcs and power monitoring computers

This commit is contained in:
Markolie
2015-08-11 15:56:37 +02:00
parent 09fc2bc54f
commit ebdfeae887
9 changed files with 96 additions and 39 deletions
+22
View File
@@ -0,0 +1,22 @@
var/global/datum/repository/air_alarm/air_alarm_repository = new()
/datum/repository/air_alarm/proc/air_alarm_data(var/list/monitored_alarms)
var/alarms[0]
var/datum/cache_entry/cache_entry = cache_data
if(!cache_entry)
cache_entry = new/datum/cache_entry
cache_data = cache_entry
if(world.time < cache_entry.timestamp)
return cache_entry.data
for(var/obj/machinery/alarm/alarm in sortAtom((monitored_alarms.len ? monitored_alarms : machines)))
if(!monitored_alarms.len && alarm.z != ZLEVEL_STATION && alarm.z != ZLEVEL_ASTEROID)
continue
alarms[++alarms.len] = alarm.get_nano_data_console()
cache_entry.timestamp = world.time + 10 SECONDS
cache_entry.data = alarms
return alarms
+28
View File
@@ -0,0 +1,28 @@
var/global/datum/repository/apc/apc_repository = new()
/datum/repository/apc/proc/apc_data(var/obj/machinery/computer/monitor/powermonitor)
var/apcData[0]
var/datum/cache_entry/cache_entry = cache_data
if(!cache_entry)
cache_entry = new/datum/cache_entry
cache_data = cache_entry
if(world.time < cache_entry.timestamp)
return cache_entry.data
if (powermonitor && !isnull(powermonitor.powernet))
var/list/L = list()
for(var/obj/machinery/power/terminal/term in powermonitor.powernet.nodes)
if(istype(term.master, /obj/machinery/power/apc))
var/obj/machinery/power/apc/A = term.master
L += A
var/list/Status = list(0,0,1,1) // Status: off, auto-off, on, auto-on
var/list/chg = list(0,1,1) // Charging: no, charging, full
for(var/obj/machinery/power/apc/A in L)
apcData[++apcData.len] = list("Name" = html_encode(A.area.name), "Equipment" = Status[A.equipment+1], "Lights" = Status[A.lighting+1], "Environment" = Status[A.environ+1], "CellPct" = A.cell ? round(A.cell.percent(),1) : -1, "CellStatus" = A.cell ? chg[A.charging+1] : 0)
cache_entry.timestamp = world.time + 5 SECONDS
cache_entry.data = apcData
return apcData
+6
View File
@@ -0,0 +1,6 @@
/datum/cache_entry
var/timestamp
var/data
/datum/repository
var/cache_data
-7
View File
@@ -1,12 +1,5 @@
var/global/datum/repository/crew/crew_repository = new()
/datum/cache_entry
var/timestamp
var/data
/datum/repository/crew
var/list/cache_data
/datum/repository/crew/New()
cache_data = list()
..()
+24
View File
@@ -0,0 +1,24 @@
var/global/datum/repository/powermonitor/powermonitor_repository = new()
/datum/repository/powermonitor/proc/powermonitor_data(var/refresh = 0)
var/pMonData[0]
var/datum/cache_entry/cache_entry = cache_data
if(!cache_entry)
cache_entry = new/datum/cache_entry
cache_data = cache_entry
if(!refresh)
return cache_entry.data
for(var/obj/machinery/computer/monitor/pMon in world)
if( !(pMon.stat & (NOPOWER|BROKEN)) )
pMonData[++pMonData.len] = list ("Name" = pMon.name, "ref" = "\ref[pMon]")
cache_entry.timestamp = world.time //+ 30 SECONDS
cache_entry.data = pMonData
return pMonData
/datum/repository/powermonitor/proc/update_cache()
return powermonitor_data(1)