@startuml OfflineTranmission header Message OfflineTranmission ' left to bottom direction skinparam actorStyle awesome skinparam usecase { BackgroundColor<< Publisher >> Pink BorderColor<< Publisher >> Red BackgroundColor<< Subscriber >> Pink BorderColor<< Subscriber >> Red } package PublisherSite { actor "Publisher" as Publisher #pink;line:red;line.bold;text:red (Parent) as (parentPub) << Publisher >> usecase "Parent" as parentPub () "Proxy" as proxy1 } package SubscriberSite { () "Proxy" as proxy2 () "Proxy" as proxy3 (Parent) as (parentSub) << Subscriber >> actor "Subscriber" as Subscriber1 #pink;line:red;line.bold;text:red actor "Subscriber" as Subscriber2 #cyan;line:blue;line.bold;text:blue } note "Blue COLOR is the \nfirst triggering mechanism for \noffline transmission." as N1 note "Red COLOR is the \nfirst line of streaming." as N2 Publisher --> proxy1 #line:Red;text:Red : Publish data to \ndesignated subsriber \nover proxy Publisher -> parentPub : If internet is \ndown, NOTIFY \nparent publisher Subscriber1 --> proxy2 #line:Red;text:Red : Receive data \nfrom Publisher parentPub -> parentSub #line:blue;line.bold;text:Blue : Notify Internet \nWas Offline \nPlease Subscribe \nAgain proxy1 ... proxy2 #line:Red;text:Red : Internet Connection \nCut off Subscriber2 -> proxy3 #line:Blue;text:Blue : Subcribe to Publisher \nvia new Proxxy proxy1 . proxy3 #line:Blue;text:Blue : Subscribe to proxy \n to continue receiving \ndata Subscriber2 <- parentSub #line:Blue;text:Blue : Instantiate a \nnew Subsscriber parentSub <- Subscriber1 : Persists data \nreceived from \nPublisher @enduml