Basic python server working including hot-reload

This commit is contained in:
Yeicor
2024-02-05 21:05:50 +01:00
parent 69106abbbd
commit 07334a75f5
5 changed files with 130 additions and 12 deletions

View File

@@ -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()