52 lines
2.1 KiB
Plaintext
52 lines
2.1 KiB
Plaintext
|
|
@startuml
|
||
|
|
title Stream — Session Planner : Pair A demande le plan de Pair B
|
||
|
|
|
||
|
|
participant "App Pair A (oc-booking)" as AppA
|
||
|
|
participant "NATS A" as NATSA
|
||
|
|
participant "Node A" as NodeA
|
||
|
|
participant "StreamService A" as StreamA
|
||
|
|
participant "Node B" as NodeB
|
||
|
|
participant "StreamService B" as StreamB
|
||
|
|
participant "DB Pair B (oc-lib)" as DBB
|
||
|
|
participant "NATS B" as NATSB
|
||
|
|
|
||
|
|
' Ouverture session planner
|
||
|
|
AppA -> NATSA: Publish(PROPALGATION_EVENT, {PB_PLANNER, peer_id:PeerID_B, payload:{}})
|
||
|
|
NATSA -> NodeA: ListenNATS → PB_PLANNER
|
||
|
|
|
||
|
|
NodeA -> NodeA: Unmarshal → {peer_id: PeerID_B, payload: {}}
|
||
|
|
NodeA -> StreamA: PublishCommon(nil, user, PeerID_B, ProtocolSendPlanner, {})
|
||
|
|
note over StreamA: WaitResponse=true, TTL=24h\nStream long-lived vers Pair B
|
||
|
|
StreamA -> NodeB: TempStream /opencloud/resource/planner/1.0
|
||
|
|
StreamA -> NodeB: json.Encode(Event{Type:planner, From:DID_A, Payload:{}})
|
||
|
|
|
||
|
|
NodeB -> StreamB: HandleResponse → readLoop(ProtocolSendPlanner)
|
||
|
|
StreamB -> StreamB: handleEvent(ProtocolSendPlanner, evt)
|
||
|
|
StreamB -> StreamB: sendPlanner(evt)
|
||
|
|
|
||
|
|
alt evt.Payload vide (requête initiale)
|
||
|
|
StreamB -> DBB: planner.GenerateShallow(AdminRequest)
|
||
|
|
DBB --> StreamB: plan (shallow booking plan de Pair B)
|
||
|
|
StreamB -> StreamA: PublishCommon(nil, user, DID_A, ProtocolSendPlanner, planJSON)
|
||
|
|
StreamA -> NodeA: json.Encode(Event{plan de B})
|
||
|
|
NodeA -> NATSA: (forwardé à AppA via SEARCH_EVENT ou PLANNER event)
|
||
|
|
NATSA -> AppA: Plan de Pair B
|
||
|
|
else evt.Payload non vide (mise à jour planner)
|
||
|
|
StreamB -> StreamB: m["peer_id"] = evt.From (DID_A)
|
||
|
|
StreamB -> NATSB: SetNATSPub(PROPALGATION_EVENT, {PB_PLANNER, peer_id:DID_A, payload:plan})
|
||
|
|
NATSB -> DBB: (oc-booking traite le plan sur NATS B)
|
||
|
|
end
|
||
|
|
|
||
|
|
' Fermeture session planner
|
||
|
|
AppA -> NATSA: Publish(PROPALGATION_EVENT, {PB_CLOSE_PLANNER, peer_id:PeerID_B})
|
||
|
|
NATSA -> NodeA: ListenNATS → PB_CLOSE_PLANNER
|
||
|
|
|
||
|
|
NodeA -> NodeA: Unmarshal → {peer_id: PeerID_B}
|
||
|
|
NodeA -> StreamA: Mu.Lock()
|
||
|
|
NodeA -> StreamA: Streams[ProtocolSendPlanner][PeerID_B].Stream.Close()
|
||
|
|
NodeA -> StreamA: delete(Streams[ProtocolSendPlanner], PeerID_B)
|
||
|
|
NodeA -> StreamA: Mu.Unlock()
|
||
|
|
note over StreamA,NodeB: Stream planner fermé — session terminée
|
||
|
|
|
||
|
|
@enduml
|