def ping(self): message = ChatMessage() message.sender = 'ground control' message.receiver = self.id message.type = 'ping' message.data = time_ms() self.send(message.json())
def __init__(self, name, password=None, guest_limit=None, admin_list=None, is_public=False): super().__init__() self.name = name self.id = slugify(name) self.clients = {} self.password_hash = None if password is None else generate_password_hash( password) self.guest_limit = guest_limit self.admin_list = admin_list if admin_list is not None else [] self.is_public = is_public self._last_active = time_ms() async def check_expire(): now = time_ms() / 1000 last_active = self.last_active / 1000 if now - last_active > self._reap_timeout: logging.info('Room %s expired', self.id) self.emit('expire') else: new_timeout = last_active + self._reap_timeout - now self._timer = MTimer(new_timeout, check_expire) self._reap_timeout = 3600 self._timer = MTimer(self._reap_timeout, check_expire) logging.info('Created room %s', self.id)
async def check_expire(): now = time_ms() / 1000 last_active = self.last_active / 1000 if now - last_active > self._reap_timeout: logging.info('Room %s expired', self.id) self.emit('expire') else: new_timeout = last_active + self._reap_timeout - now self._timer = MTimer(new_timeout, check_expire)
async def check_expire(): """Check whether the room has expired. Rooms expire and are cleaned up after 60 minutes of inactivity. """ now = time_ms() / 1000 last_active = self.last_active / 1000 if now - last_active > self._reap_timeout: logging.info('Room %s expired', self.id) self.emit('expire') else: new_timeout = last_active + self._reap_timeout - now self._timer = MTimer(new_timeout, check_expire)
async def shutdown(self): message = ChatMessage() message.sender = 'ground control' message.receiver = self.id message.type = 'bye' message.data = time_ms() self.send(message.json()) if self.timer is not None: self.timer.cancel() self.timer = None if self._inbox_task is not None: self._inbox_task.cancel() self._inbox_task = None logging.info('Shut down client %s', self.id)
def __init__(self, id, username=None, room=None, is_admin=False): super().__init__() self.id = id self.username = username if username is not None else 'Major Tom' self.room = room self.is_admin = is_admin self.inbox = asyncio.Queue() self.outbox = asyncio.Queue() self._inbox_task = asyncio.create_task(self._process_inbox()) # Used by ChatManager for reaping # TODO: there is probably a cleaner solution self.last_seen = time_ms() self.timer = None logging.info('Created client %s', self.id)
def active_ago(self): return int((time_ms() - self.last_active) / 60000)
async def _process_inbox(self): while True: message = await self.inbox.get() self.last_seen = time_ms() self.emit('message', message)
def active_ago(self): """The number of minutes ago that the room was last active.""" return int((time_ms() - self.last_active) / 60000)