示例#1
0
 def ping(self):
     message = ChatMessage()
     message.sender = 'ground control'
     message.receiver = self.id
     message.type = 'ping'
     message.data = time_ms()
     self.send(message.json())
示例#2
0
    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)
示例#3
0
        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)
示例#4
0
文件: chat.py 项目: ediboko1980/camus
        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)
示例#5
0
    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)
示例#6
0
    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)
示例#7
0
 def active_ago(self):
     return int((time_ms() - self.last_active) / 60000)
示例#8
0
 async def _process_inbox(self):
     while True:
         message = await self.inbox.get()
         self.last_seen = time_ms()
         self.emit('message', message)
示例#9
0
文件: chat.py 项目: ediboko1980/camus
 def active_ago(self):
     """The number of minutes ago that the room was last active."""
     return int((time_ms() - self.last_active) / 60000)