From 9fc746bd17a57e209d6219fa2f1651f11e620a0d Mon Sep 17 00:00:00 2001 From: Uriziel Date: Fri, 19 Oct 2012 14:50:28 +0200 Subject: [PATCH] Server now actively checks for disconnected users --- syncplay/server.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/syncplay/server.py b/syncplay/server.py index d84a80c..122c6da 100644 --- a/syncplay/server.py +++ b/syncplay/server.py @@ -16,7 +16,9 @@ class SyncFactory(Factory): self._rooms = {} self._roomStates = {} self.isolateRooms = isolateRooms - + self._usersCheckupTimer = task.LoopingCall(self._checkUsers) + self._usersCheckupTimer.start(4, True) + def buildProtocol(self, addr): return SyncServerProtocol(self) @@ -87,6 +89,7 @@ class SyncFactory(Factory): watcherProtocol.sendState(position, paused, doSeek, setBy, senderLatency, watcher.latency, forcedUpdate) if(time.time() - watcher.lastUpdate > 4.1): watcherProtocol.drop() + self.removeWatcher(watcherProtocol) def __updateWatcherPing(self, latencyCalculation, watcher): if (latencyCalculation): @@ -185,6 +188,14 @@ class SyncFactory(Factory): for receiver in room: what(receiver) + def _checkUsers(self): + for room in self._rooms.itervalues(): + for watcher in room.itervalues(): + if(time.time() - watcher.lastUpdate > 4.1): + watcher.watcherProtocol.drop() + self.removeWatcher(watcher.watcherProtocol) + + class Watcher(object): def __init__(self, factory, watcherProtocol, name, room): self.factory = factory