mirror of
https://github.com/yeicor-3d/yet-another-cad-viewer.git
synced 2025-12-20 22:47:04 +01:00
Basic python server working including hot-reload
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
from typing import TypeVar, Generic, List, Callable
|
||||
import asyncio
|
||||
from typing import TypeVar, Generic, List, Callable, Tuple
|
||||
|
||||
T = TypeVar('T')
|
||||
|
||||
@@ -8,20 +9,32 @@ class EventPublisher(Generic[T]):
|
||||
|
||||
_listeners: List[Callable[[T], None]]
|
||||
_buffer: List[T]
|
||||
_lock: asyncio.Lock
|
||||
|
||||
def __init__(self):
|
||||
self._listeners = []
|
||||
self._buffer = []
|
||||
self._lock = asyncio.Lock()
|
||||
|
||||
def subscribe(self, listener: Callable[[T], None]):
|
||||
self._listeners.append(listener)
|
||||
for data in self._buffer:
|
||||
listener(data)
|
||||
async def subscribe(self, listener: Callable[[T], None]):
|
||||
async with self._lock:
|
||||
self._listeners.append(listener)
|
||||
for data in self._buffer:
|
||||
listener(data)
|
||||
|
||||
def unsubscribe(self, listener: Callable[[T], None]):
|
||||
self._listeners.remove(listener)
|
||||
async with self._lock:
|
||||
self._listeners.remove(listener)
|
||||
|
||||
def emit(self, data: T):
|
||||
self._buffer.append(data)
|
||||
for listener in self._listeners:
|
||||
listener(data)
|
||||
async with self._lock:
|
||||
self._buffer.append(data)
|
||||
for listener in self._listeners:
|
||||
listener(data)
|
||||
|
||||
def buffer(self) -> Tuple[List[T], asyncio.Lock]:
|
||||
return self._buffer, self._lock
|
||||
|
||||
def clear(self):
|
||||
async with self._lock:
|
||||
self._buffer.clear()
|
||||
|
||||
Reference in New Issue
Block a user