File size: 1,924 Bytes
3dc4f38 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | 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.") |