Global Listeners (#3373)

SSwireless is dead, long live Global Listeners.
This commit is contained in:
Lohikar
2017-08-29 16:09:41 -05:00
committed by GitHub
parent dc85579850
commit 839ca01947
9 changed files with 368 additions and 443 deletions
@@ -0,0 +1,27 @@
var/datum/controller/subsystem/listener/SSlistener
/datum/controller/subsystem/listener
name = "Global Listener"
flags = SS_NO_INIT | SS_NO_FIRE
var/list/listeners = list()
/datum/controller/subsystem/listener/New()
NEW_SS_GLOBAL(SSlistener)
/datum/controller/subsystem/listener/Recover()
listeners = SSlistener.listeners
/datum/controller/subsystem/listener/stat_entry()
..("L:[listeners.len]")
/datum/controller/subsystem/listener/proc/register(listener/L)
LAZYINITLIST(listeners[L.channel])
listeners[L.channel][L] = TRUE
/datum/controller/subsystem/listener/proc/unregister(listener/L)
if (listeners[L.channel])
listeners[L.channel] -= L
if (!LAZYLEN(listeners[L.channel]))
listeners[L.channel] = null
-84
View File
@@ -1,84 +0,0 @@
var/datum/controller/subsystem/wireless/SSwireless
/datum/controller/subsystem/wireless
name = "Wireless"
flags = SS_BACKGROUND
priority = SS_PRIORITY_WIRELESS
init_order = SS_INIT_WIRELESS
var/list/receiver_list = list()
var/list/pending_connections = list()
var/list/retry_connections = list()
var/list/failed_connections = list()
var/total_processed_connections = 0
/datum/controller/subsystem/wireless/New()
NEW_SS_GLOBAL(SSwireless)
/datum/controller/subsystem/wireless/Recover()
receiver_list = SSwireless.receiver_list
/datum/controller/subsystem/wireless/stat_entry()
..("RL:[receiver_list.len] PC:[pending_connections.len] RC:[retry_connections.len] FC:[failed_connections.len] TC:[total_processed_connections]")
/datum/controller/subsystem/wireless/proc/add_device(datum/wifi/receiver/R)
LAZYINITLIST(receiver_list)
receiver_list |= R
wake()
/datum/controller/subsystem/wireless/proc/remove_device(datum/wifi/receiver/R)
if (receiver_list)
receiver_list -= R
/datum/controller/subsystem/wireless/proc/add_request(datum/connection_request/C)
LAZYADD(pending_connections, C)
/datum/controller/subsystem/wireless/proc/process_connection(datum/connection_request/connection, list/fail_queue)
var/target_found = 0
for (var/datum/wifi/receiver/R in receiver_list)
if (R.id == connection.id)
var/datum/wifi/sender/S = connection.source
S.connect_device(R)
R.connect_device(S)
target_found = 1
if (!target_found)
fail_queue += connection
total_processed_connections += 1
/datum/controller/subsystem/wireless/Initialize()
fire(0, 1)
fire(0, 1) // So we suspend.
..()
/datum/controller/subsystem/wireless/fire(resumed = 0, no_mc_check = 0)
if (!resumed && !LAZYLEN(pending_connections) && !LAZYLEN(retry_connections))
suspend()
return
var/list/pending = pending_connections
var/list/retry = retry_connections
while (retry.len)
var/datum/connection_request/C = retry[retry.len]
retry.len--
process_connection(C, failed_connections)
if (no_mc_check)
CHECK_TICK
else if (MC_TICK_CHECK)
return
while (pending.len)
var/datum/connection_request/C = pending[pending.len]
pending.len--
process_connection(C, retry_connections)
if (no_mc_check)
CHECK_TICK
else if (MC_TICK_CHECK)
return