diff --git a/src/snek/app.py b/src/snek/app.py index 1d225cc..3094dd5 100644 --- a/src/snek/app.py +++ b/src/snek/app.py @@ -61,6 +61,7 @@ class Application(BaseApplication): middlewares=middlewares, template_path=self.template_path, *args, **kwargs ) session_setup(self, EncryptedCookieStorage(SESSION_KEY)) + self.tasks = [] self._middlewares.append(session_middleware) self.jinja2_env.add_extension(MarkdownExtension) self.jinja2_env.add_extension(LinkifyExtension) @@ -68,12 +69,28 @@ class Application(BaseApplication): self.jinja2_env.add_extension(EmojiExtension) self.setup_router() - + self.cache = Cache(self) self.services = get_services(app=self) self.mappers = get_mappers(app=self) self.on_startup.append(self.prepare_database) + async def create_task(self, task): + self.tasks.append(task) + + async def task_runner(self): + while True: + await asyncio.sleep(0.1) + task = None + try: + task = self.tasks.pop(0) + except IndexError: + continue + try: + await task + except: + print(ex) + async def prepare_database(self,app): self.db.query("PRAGMA journal_mode=WAL") self.db.query("PRAGMA syncnorm=off") @@ -89,6 +106,7 @@ class Application(BaseApplication): pass await app.services.drive.prepare_all() + self.loop.create_task(self.task_runner()) def setup_router(self): self.router.add_get("/", IndexView) diff --git a/src/snek/service/chat.py b/src/snek/service/chat.py index 17c677b..ecaedb7 100644 --- a/src/snek/service/chat.py +++ b/src/snek/service/chat.py @@ -21,7 +21,10 @@ class ChatService(BaseService): user = await self.services.user.get(uid=user_uid) await self.services.notification.create_channel_message(channel_message_uid) - sent_to_count = await self.services.socket.broadcast(channel_uid, dict( + channel['last_message_on'] = now() + await self.services.channel.save(channel) + + await self.app.create_task(self.services.socket.broadcast(channel_uid, dict( message=channel_message["message"], html=channel_message["html"], user_uid=user_uid, @@ -32,7 +35,5 @@ class ChatService(BaseService): username=user['username'], uid=channel_message['uid'], user_nick=user['nick'] - )) - channel['last_message_on'] = now() - await self.services.channel.save(channel) - return sent_to_count \ No newline at end of file + ))) + return True