| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- # by Greg Hazel
- import random
- from twisted.internet import task
- from BTL.obsoletepythonsupport import set
- class InternetSubscriber(object):
- def internet_active(self):
- pass
- def try_one_connection(self):
- pass
- class InternetWatcher(object):
-
- def __init__(self, rawserver):
- self.rawserver = rawserver
- old_connectionMade = rawserver.connectionMade
- def connectionMade(s):
- if rawserver.connections == 0:
- self._first_connection()
- old_connectionMade(s)
- rawserver.connectionMade = connectionMade
- rawserver.internet_watcher = self
- self.subscribers = set()
- self.internet_watcher = task.LoopingCall(self._internet_watch)
- self.internet_watcher.start(5)
- def add_subscriber(self, s):
- self.subscribers.add(s)
- def remove_subscriber(self, s):
- self.subscribers.remove(s)
- def _internet_watch(self):
- if self.rawserver.connections != 0 or not self.subscribers:
- return
- l = list(self.subscribers)
- random.shuffle(l)
- for s in l:
- if s.try_one_connection():
- break
- def _first_connection(self):
- for s in self.subscribers:
- s.internet_active()
- def get_internet_watcher(rawserver):
- if not hasattr(rawserver, "internet_watcher"):
- InternetWatcher(rawserver)
- return rawserver.internet_watcher
|