mirror of
https://github.com/meshcore-dev/meshcore_py.git
synced 2026-06-14 13:16:54 +00:00
Merge branch 'main' into feature/refactor
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
from enum import Enum
|
||||
import inspect
|
||||
import logging
|
||||
from typing import Any, Dict, Optional, Callable, List, Union
|
||||
import asyncio
|
||||
@@ -148,6 +149,7 @@ class EventDispatcher:
|
||||
logger.debug(
|
||||
f"Dispatching event: {event.type}, {event.payload}, {event.attributes}"
|
||||
)
|
||||
|
||||
for subscription in self.subscriptions.copy():
|
||||
# Check if event type matches
|
||||
if (
|
||||
@@ -165,15 +167,24 @@ class EventDispatcher:
|
||||
for key, value in subscription.attribute_filters.items()
|
||||
):
|
||||
continue
|
||||
try:
|
||||
result = subscription.callback(event.clone())
|
||||
if asyncio.iscoroutine(result):
|
||||
await result
|
||||
except Exception as e:
|
||||
print(f"Error in event handler: {e}")
|
||||
|
||||
|
||||
# Fire the call back asychronously
|
||||
asyncio.create_task(self._execute_callback(subscription.callback, event.clone()))
|
||||
|
||||
self.queue.task_done()
|
||||
|
||||
async def _execute_callback(self, callback, event):
|
||||
"""Execute a callback with proper error handling"""
|
||||
try:
|
||||
if asyncio.iscoroutinefunction(callback):
|
||||
await callback(event)
|
||||
else:
|
||||
result = callback(event)
|
||||
if inspect.iscoroutine(result):
|
||||
await result
|
||||
except Exception as e:
|
||||
logger.error(f"Error in event handler for {event.type}: {e}", exc_info=True)
|
||||
|
||||
async def start(self):
|
||||
if not self.running:
|
||||
self.running = True
|
||||
|
||||
Reference in New Issue
Block a user