Skip to content
Prev Previous commit
Next Next commit
working implementation (thread-safe queue
  • Loading branch information
Archmonger committed Oct 28, 2021
commit 698e4edfadf2d08a1169d4e6ff7b6ecff4f83195
1 change: 1 addition & 0 deletions requirements/pkg-deps.txt
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
channels<4.0.0 # Django websocket features
idom >=0.33.0, <0.34.0
janus < 1.0.0
12 changes: 7 additions & 5 deletions src/django_idom/websocket_consumer.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
from typing import Any
from urllib.parse import parse_qsl

import janus
from channels.generic.websocket import AsyncJsonWebsocketConsumer
from idom.core.dispatcher import dispatch_single_view
from idom.core.layout import Layout, LayoutEvent
Expand All @@ -24,11 +25,12 @@ def __init__(self, *args: Any, **kwargs: Any) -> None:

async def connect(self) -> None:
await super().connect()
self._idom_dispatcher_future = Thread(
self._idom_dispatcher_thread = Thread(
target=asyncio.run,
args=(self._run_dispatch_loop(),),
)
self._idom_dispatcher_future.start()
self._idom_dispatcher_thread.daemon = True
self._idom_dispatcher_thread.start()

async def disconnect(self, code: int) -> None:
# if self._idom_dispatcher_future.done():
Expand Down Expand Up @@ -61,14 +63,14 @@ async def _run_dispatch_loop(self):
)
return

self._idom_recv_queue = recv_queue = asyncio.Queue()
# Thread-safe queue
self._idom_recv_queue = janus.Queue().async_q
try:
await dispatch_single_view(
Layout(component_instance),
self.send_json,
recv_queue.get,
self._idom_recv_queue.get,
)
print("complete")
except Exception:
await self.close()
raise