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
les ressources découvertes dans DB A