53 lines
2.4 KiB
Plaintext
53 lines
2.4 KiB
Plaintext
sequenceDiagram
|
|
title Stream — Recherche directe (type "known"/"partner") : Pair A → Pair B
|
|
|
|
participant AppA as App Pair A
|
|
participant NATSA as NATS A
|
|
participant NodeA as Node A
|
|
participant PubSubA as PubSubService A
|
|
participant StreamA as StreamService A
|
|
participant DBA as DB Pair A (oc-lib)
|
|
participant NodeB as Node B
|
|
participant StreamB as StreamService B
|
|
participant DBB as DB Pair B (oc-lib)
|
|
|
|
AppA->>NATSA: Publish(PROPALGATION_EVENT, {PB_SEARCH, type:"partner", search:"gpu"})
|
|
NATSA->>NodeA: ListenNATS → PB_SEARCH (type "partner")
|
|
NodeA->>PubSubA: SearchPublishEvent(ctx, dt, "partner", user, "gpu")
|
|
|
|
PubSubA->>StreamA: SearchPartnersPublishEvent(dt, user, "gpu")
|
|
StreamA->>DBA: Search(PEER, PARTNER) + PeerIDS config
|
|
DBA-->>StreamA: [Peer B, ...]
|
|
|
|
loop Pour chaque pair partenaire (Pair B)
|
|
StreamA->>StreamA: json.Marshal({search:"gpu"}) → payload
|
|
StreamA->>StreamA: write(PeerID_B, addr_B, dt, user, payload, ProtocolSearchResource)
|
|
StreamA->>NodeB: TempStream /opencloud/resource/search/1.0
|
|
StreamA->>NodeB: json.Encode(Event{Type:search, From:DID_A, DataType, Payload:{search:"gpu"}})
|
|
|
|
NodeB->>StreamB: HandleResponse(stream) → readLoop
|
|
StreamB->>StreamB: handleEvent(ProtocolSearchResource, evt)
|
|
StreamB->>StreamB: handleEventFromPartner(evt, ProtocolSearchResource)
|
|
|
|
alt evt.DataType == -1 (toutes ressources)
|
|
StreamB->>DBA: Search(PEER, evt.From=DID_A)
|
|
Note over StreamB: Résolution locale ou via GetPeerRecord
|
|
StreamB->>StreamB: SendResponse(Peer A, evt)
|
|
StreamB->>DBB: Search(ALL_RESOURCES, filter{creator=B + public OR partner A + search:"gpu"})
|
|
DBB-->>StreamB: [Resource1, Resource2, ...]
|
|
else evt.DataType spécifié
|
|
StreamB->>DBB: Search(DataType, filter{creator=B + access + search:"gpu"})
|
|
DBB-->>StreamB: [Resource1, ...]
|
|
end
|
|
|
|
loop Pour chaque ressource
|
|
StreamB->>StreamA: write(PeerID_A, addr_A, dt, resource JSON, ProtocolSearchResource)
|
|
StreamA->>StreamA: readLoop → handleEvent(ProtocolSearchResource, evt)
|
|
StreamA->>StreamA: retrieveResponse(evt)
|
|
StreamA->>NATSA: SetNATSPub(SEARCH_EVENT, {DataType, resource JSON})
|
|
NATSA->>AppA: Résultat de Pair B
|
|
end
|
|
end
|
|
|
|
Note over NATSA,DBA: Optionnel: App A persiste<br/>les ressources découvertes dans DB A
|