Main entry point for the directory server.
Classes
Functions
main() -> None
Source code in directory_server/src/directory_server/main.py
| def main() -> None:
try:
asyncio.run(run_server())
except KeyboardInterrupt:
logger.info("Interrupted by user")
except Exception as e:
logger.exception(f"Fatal error: {e}")
sys.exit(1)
|
run_server() -> None
async
Source code in directory_server/src/directory_server/main.py
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85 | async def run_server() -> None:
settings = get_settings()
setup_logging(settings.logging.level)
# Initialize notifier with settings before creating server
# This ensures DirectoryServer can use get_notifier() with config file settings
notifier = get_notifier(settings, component_name="Directory")
network = settings.network_config.network
# Generate random nick like any other peer (matches reference implementation)
server_nick = generate_jm_nick()
data_dir = settings.get_data_dir()
logger.info("=" * 80)
logger.info("Starting JoinMarket NG Directory Server")
logger.info(f"Network: {network.value}")
logger.info(f"Server nick: {server_nick}")
logger.info(f"Port: {settings.directory_server.port}")
logger.info(f"Max peers: {settings.directory_server.max_peers}")
logger.info("=" * 80)
# Write nick state file for external tracking
write_nick_state(data_dir, "directory", server_nick)
logger.info(f"Nick state written to {data_dir}/state/directory.nick")
server = DirectoryServer(settings.directory_server, network, server_nick)
loop = asyncio.get_running_loop()
def shutdown_handler() -> None:
logger.info("Received shutdown signal")
asyncio.create_task(server.stop())
def status_handler() -> None:
logger.info("Received status signal")
server.log_status()
for sig in (signal.SIGTERM, signal.SIGINT):
loop.add_signal_handler(sig, shutdown_handler)
loop.add_signal_handler(signal.SIGUSR1, status_handler)
try:
# Send startup notification (including nick)
await notifier.notify_startup(
component="Directory Server",
network=network.value,
nick=server_nick,
)
await server.start()
except Exception as e:
logger.error(f"Server error: {e}")
raise
finally:
# Clean up nick state file on shutdown
remove_nick_state(data_dir, "directory")
await server.stop()
|
setup_logging(level: str) -> None
Source code in directory_server/src/directory_server/main.py
18
19
20
21
22
23
24
25
26 | def setup_logging(level: str) -> None:
logger.remove()
logger.add(
sys.stderr,
format="<green>{time:YYYY-MM-DD HH:mm:ss}</green> | <level>{level: <8}</level> | <cyan>{name}</cyan>:<cyan>{function}</cyan>:<cyan>{line}</cyan> - <level>{message}</level>",
level=level,
colorize=True,
)
|