57 lines
2.1 KiB
Plaintext
57 lines
2.1 KiB
Plaintext
|
|
sequenceDiagram
|
||
|
|
title Node Initialization — Pair A (InitNode)
|
||
|
|
|
||
|
|
participant MainA as main (Pair A)
|
||
|
|
participant NodeA as Node A
|
||
|
|
participant libp2pA as libp2p (Pair A)
|
||
|
|
participant DBA as DB Pair A (oc-lib)
|
||
|
|
participant NATSA as NATS A
|
||
|
|
participant IndexerA as Indexer (partagé)
|
||
|
|
participant StreamA as StreamService A
|
||
|
|
participant PubSubA as PubSubService A
|
||
|
|
|
||
|
|
MainA->>NodeA: InitNode(isNode, isIndexer, isNativeIndexer)
|
||
|
|
|
||
|
|
NodeA->>NodeA: LoadKeyFromFilePrivate() → priv
|
||
|
|
NodeA->>NodeA: LoadPSKFromFile() → psk
|
||
|
|
|
||
|
|
NodeA->>libp2pA: New(PrivateNetwork(psk), Identity(priv), ListenAddr:4001)
|
||
|
|
libp2pA-->>NodeA: host A (PeerID_A)
|
||
|
|
|
||
|
|
Note over NodeA: isNode == true
|
||
|
|
|
||
|
|
NodeA->>libp2pA: NewGossipSub(ctx, host)
|
||
|
|
libp2pA-->>NodeA: ps (GossipSub)
|
||
|
|
|
||
|
|
NodeA->>IndexerA: ConnectToIndexers → SendHeartbeat /opencloud/heartbeat/1.0
|
||
|
|
Note over IndexerA: Heartbeat long-lived établi<br/>Score qualité calculé (bw + uptime + diversité)
|
||
|
|
IndexerA-->>NodeA: OK
|
||
|
|
|
||
|
|
NodeA->>NodeA: claimInfo(name, hostname)
|
||
|
|
NodeA->>IndexerA: TempStream /opencloud/record/publish/1.0
|
||
|
|
NodeA->>IndexerA: json.Encode(PeerRecord A signé)
|
||
|
|
IndexerA->>IndexerA: DHT.PutValue("/node/"+DID_A, record)
|
||
|
|
|
||
|
|
NodeA->>DBA: NewRequestAdmin(PEER).Search(SELF)
|
||
|
|
DBA-->>NodeA: peer A local (ou UUID généré)
|
||
|
|
|
||
|
|
NodeA->>NodeA: StartGC(30s) — GC sur StreamRecords
|
||
|
|
|
||
|
|
NodeA->>StreamA: InitStream(ctx, host, PeerID_A, 1000, nodeA)
|
||
|
|
StreamA->>StreamA: SetStreamHandler(heartbeat/partner, search, planner, ...)
|
||
|
|
StreamA->>DBA: Search(PEER, PARTNER) → liste partenaires
|
||
|
|
DBA-->>StreamA: [] (aucun partenaire au démarrage)
|
||
|
|
StreamA-->>NodeA: StreamService A
|
||
|
|
|
||
|
|
NodeA->>PubSubA: InitPubSub(ctx, host, ps, nodeA, streamA)
|
||
|
|
PubSubA->>PubSubA: subscribeEvents(PB_SEARCH, timeout=-1)
|
||
|
|
PubSubA-->>NodeA: PubSubService A
|
||
|
|
|
||
|
|
NodeA->>NodeA: SubscribeToSearch(ps, callback)
|
||
|
|
Note over NodeA: callback: GetPeerRecord(evt.From)<br/>→ StreamService.SendResponse
|
||
|
|
|
||
|
|
NodeA->>NATSA: ListenNATS(nodeA)
|
||
|
|
Note over NATSA: Enregistre handlers:<br/>CREATE_RESOURCE, PROPALGATION_EVENT
|
||
|
|
|
||
|
|
NodeA-->>MainA: *Node A prêt
|