| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 | 
							- @startuml OfflineTranmission
 
- header Message OfflineTranmission
 
- left to right direction
 
- skinparam usecase {
 
-     BackgroundColor<< Publisher >> Pink
 
-     BorderColor<< Publisher >> Red
 
-     BackgroundColor<< Subscriber >> YellowGreen
 
-     BorderColor<< Subscriber >> Green
 
-     BackgroundColor<< Interrupt >> Pink
 
-     BorderColor<< Interrupt >> Red
 
- }
 
- skinparam component {
 
-     PublisherSite 24
 
- }
 
- component "PublisherSite" as PublisherSite{
 
-     (Parent) as (parentPub) << Publisher >>
 
-     usecase "**Parent**" as parentPub
 
-     card PublisherObservable as PublisherObs #Pink;line:Red;line.bold;text:Black
 
-     port "**Proxy**" as proxy1
 
-     database "**buffer**" as buffer
 
- }
 
- component SubscriberSite as SubscriberSite{
 
-     (Parent) as (parentSub) << Subscriber >>
 
-     usecase "**Parent**" as parentSub
 
-     card SubscriberObservable as SubscriberObs1   #YellowGreen;line:green;line.bold;text:Black
 
-     card SubscriberObservable as SubscriberObs2   #cyan;line:blue;line.bold;text:Black
 
-     port "**Proxy**" as proxy2
 
-     port "**Proxy**" as proxy3
 
- }
 
- ' (X) as (interrupt) << Interrupt >>
 
- ' usecase "X" as interrupt
 
- proxy1 *- PublisherObs #line:Red;text:Red : Publish data to \ndesignated subsriber \nover proxy
 
- PublisherObs --> parentPub : If internet is \ndown, NOTIFY \nparent publisher
 
- parentPub --> parentSub #line:blue;line.bold;text:Blue : Notify Internet \nWas Offline \nPlease Subscribe \nAgain
 
- ' proxy1 *..* interrupt #line:Red;text:Red
 
- ' interrupt *..* proxy2 #line:Red;text:Red
 
- proxy1 *.(0).> proxy2 #line:Red;text:Red : Internet Disconnected
 
- ' destroy proxy1
 
- proxy1 == buffer : Store data \nin buffer should \nthe internet \nbe disconnected
 
- proxy2 -* SubscriberObs1  #line:Red;text:Red : Subscribe and \nReceive data 
 
- proxy3 *- SubscriberObs2 #line:Blue;text:Blue : Subcribe to Publisher \nvia new Proxxy or \nexisting Proxy
 
- ' proxy2 *- SubscriberObs2 #line:Blue;text:Blue
 
- proxy1 *..* proxy3 #line:Blue;text:Blue : Subscribe to proxy \n to continue receiving \ndata
 
- parentSub => SubscriberObs2 #line:DarkGreen;line.bold;text:DarkGreen : Instantiate a \nnew Subscriber upon \nreceiving notification \nfrom Publisher's parent
 
- parentSub -> SubscriberObs1 : Persists data \nreceived from \nPublisher
 
- @enduml
 
- /' Briedf description
 
- Follow the red line first. It represents a normal flow of data/message transfer
 
- during an ideal situation.
 
- The blue lines represents when the internet is done and provides direction as to
 
- how the components handle the situation.
 
- So here, the the publisher will produce it's messages/payload to the subscriber
 
- using the imported library to enable remote transmission of the data via proxy.
 
- The same thing also for the other side, to which they will also need to use the
 
- same library in order to receive the transmitted data.
 
- Now, assuming the internet connection is interrupted for whatever reason, then the
 
- data will then be stored in the the buffer so to speak or whatever that the publisher
 
- wants to deal with it. The parent component will then keep track of the records
 
- and send it's notification to the subscriber's parents once the internet is back
 
- online. Meanwhile, there would be, ideally speaking, internal mechanism to deal
 
- with the ongoing data transmission that is occuring at the publisher's site.
 
- So, when the internet connection is back online, and upon receiving the notification
 
- from the parent of the publisher's site, it would then instantaite a new subcriber
 
- to subscribe to the previously subscribed publisher, and continue to receive the
 
- stream data. The publisher will of course stream the buffered data that failed to
 
- transmit to the relevant party.'/
 
 
  |