42 lines
1.7 KiB
Plaintext
42 lines
1.7 KiB
Plaintext
|
|
sequenceDiagram
|
||
|
|
title Indexer — Pair A publie, Pair B publie (handleNodePublish → DHT)
|
||
|
|
|
||
|
|
participant NodeA as Node A
|
||
|
|
participant NodeB as Node B
|
||
|
|
participant Indexer as IndexerService (partagé)
|
||
|
|
participant DHT as DHT Kademlia
|
||
|
|
|
||
|
|
Note over NodeA: Après claimInfo ou refresh TTL
|
||
|
|
|
||
|
|
par Pair A publie son PeerRecord
|
||
|
|
NodeA->>Indexer: TempStream /opencloud/record/publish/1.0
|
||
|
|
NodeA->>Indexer: json.Encode(PeerRecord A {DID_A, PeerID_A, PubKey_A, Expiry, Sig_A})
|
||
|
|
|
||
|
|
Indexer->>Indexer: Verify sig_A (reconstruit rec minimal, pubKey_A.Verify)
|
||
|
|
Indexer->>Indexer: Check StreamRecords[Heartbeat][PeerID_A] existe
|
||
|
|
|
||
|
|
alt Heartbeat actif pour A
|
||
|
|
Indexer->>Indexer: StreamRecord A → DID_A, Record=PeerRecord A, LastSeen=now
|
||
|
|
Indexer->>DHT: PutValue("/node/"+DID_A, PeerRecord A JSON)
|
||
|
|
DHT-->>Indexer: ok
|
||
|
|
else Pas de heartbeat
|
||
|
|
Indexer->>NodeA: (erreur "no heartbeat", stream close)
|
||
|
|
end
|
||
|
|
and Pair B publie son PeerRecord
|
||
|
|
NodeB->>Indexer: TempStream /opencloud/record/publish/1.0
|
||
|
|
NodeB->>Indexer: json.Encode(PeerRecord B {DID_B, PeerID_B, PubKey_B, Expiry, Sig_B})
|
||
|
|
|
||
|
|
Indexer->>Indexer: Verify sig_B
|
||
|
|
Indexer->>Indexer: Check StreamRecords[Heartbeat][PeerID_B] existe
|
||
|
|
|
||
|
|
alt Heartbeat actif pour B
|
||
|
|
Indexer->>Indexer: StreamRecord B → DID_B, Record=PeerRecord B, LastSeen=now
|
||
|
|
Indexer->>DHT: PutValue("/node/"+DID_B, PeerRecord B JSON)
|
||
|
|
DHT-->>Indexer: ok
|
||
|
|
else Pas de heartbeat
|
||
|
|
Indexer->>NodeB: (erreur "no heartbeat", stream close)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
Note over DHT: DHT contient maintenant<br/>"/node/DID_A" et "/node/DID_B"
|