75 lines
2.3 KiB
Python
75 lines
2.3 KiB
Python
import asyncio
|
|
|
|
from loguru import logger
|
|
|
|
from ..relay_manager import RelayManager
|
|
|
|
|
|
class NostrClient:
|
|
relay_manager: RelayManager
|
|
running: bool
|
|
|
|
def __init__(self):
|
|
self.running = True
|
|
self.relay_manager = RelayManager()
|
|
|
|
def connect(self, relays):
|
|
for relay in relays:
|
|
try:
|
|
self.relay_manager.add_relay(relay)
|
|
except Exception as e:
|
|
logger.debug(e)
|
|
self.running = True
|
|
|
|
def reconnect(self, relays):
|
|
self.relay_manager.remove_relays()
|
|
self.connect(relays)
|
|
|
|
def close(self):
|
|
try:
|
|
self.relay_manager.close_all_subscriptions()
|
|
self.relay_manager.close_connections()
|
|
|
|
self.running = False
|
|
except Exception as e:
|
|
logger.error(e)
|
|
|
|
async def subscribe(
|
|
self,
|
|
callback_events_func=None,
|
|
callback_notices_func=None,
|
|
callback_eosenotices_func=None,
|
|
):
|
|
while self.running:
|
|
self._check_events(callback_events_func)
|
|
self._check_notices(callback_notices_func)
|
|
self._check_eos_notices(callback_eosenotices_func)
|
|
|
|
await asyncio.sleep(0.2)
|
|
|
|
def _check_events(self, callback_events_func=None):
|
|
try:
|
|
while self.relay_manager.message_pool.has_events():
|
|
event_msg = self.relay_manager.message_pool.get_event()
|
|
if callback_events_func:
|
|
callback_events_func(event_msg)
|
|
except Exception as e:
|
|
logger.debug(e)
|
|
|
|
def _check_notices(self, callback_notices_func=None):
|
|
try:
|
|
while self.relay_manager.message_pool.has_notices():
|
|
event_msg = self.relay_manager.message_pool.get_notice()
|
|
if callback_notices_func:
|
|
callback_notices_func(event_msg)
|
|
except Exception as e:
|
|
logger.debug(e)
|
|
|
|
def _check_eos_notices(self, callback_eosenotices_func=None):
|
|
try:
|
|
while self.relay_manager.message_pool.has_eose_notices():
|
|
event_msg = self.relay_manager.message_pool.get_eose_notice()
|
|
if callback_eosenotices_func:
|
|
callback_eosenotices_func(event_msg)
|
|
except Exception as e:
|
|
logger.debug(e)
|