| 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() |
| |
| 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.") |