import asyncio import argparse from swarm import SwarmMesh from core import CoreHotPath class VertusNodeInstance: def __init__(self, node_id: str, host: str, port: int, db_path: str): self.node_id = node_id self.host = host self.port = port self.mesh = SwarmMesh(node_id=node_id) self.core = CoreHotPath(cache_path=db_path) async def start(self): await self.mesh.start_server(host=self.host, port=self.port) print(f"[NODE {self.node_id}] Serveur P2P actif sur {self.host}:{self.port}") async def broadcast_intention(self, peer_host: str, peer_port: int, text: str): vec, latency, hit = self.core.project_intention(text) writer = await self.mesh.connect_to_peer(peer_host, peer_port) await self.mesh.send_packet_to_peer(writer, vec) await self.mesh.send_gene_sync_to_peer(writer, f"gene-{self.node_id}", {"intention": text, "cache_hit": hit}) await self.mesh.close_all_peers() print(f"[NODE {self.node_id}] Intention projetée et diffusée vers {peer_host}:{peer_port} (Latence: {latency:.2f}ms)") if __name__ == "__main__": parser = argparse.ArgumentParser(description="Lancer un nœud VERTUS") parser.add_argument("--id", type=str, default="node-1") parser.add_argument("--host", type=str, default="127.0.0.1") parser.add_argument("--port", type=int, default=9099) parser.add_argument("--db", type=str, default="vertus_node.db") args = parser.parse_args() async def main(): node = VertusNodeInstance(node_id=args.id, host=args.host, port=args.port, db_path=args.db) await node.start() # Maintien du serveur en écoute try: await asyncio.Future() except asyncio.CancelledError: pass try: asyncio.run(main()) except KeyboardInterrupt: print(f"\n[NODE {args.id}] Arrêt propre du nœud.")