@startuml "Messaging with server delivery" actor Sender as snd actor Receiver as rcv control Server as srv collections msg as msg queue msgch as msgch collections dvyrq as dvyrq collections dvy as dvy queue dvych as dvych rcv->srv: Listen for messages srv->msgch: Subscribe snd->srv: Send message with delivery uid snd->msg: Listen for delivery group storeMessage srv->msg: Store message srv->dvyrq: Store delivery request uid=>Receiver srv->msgch: Notify listening receivers end msgch->srv: Notify msg->srv: Grab message srv->rcv: Cuts listening with message srv->dvy: Store delivery done Receiver=>uid srv->dvych: Notify listening Sender dvych->srv: Notify dvy->srv: Grab delivery srv->snd: Cuts listening with delivery @enduml