|
@@ -1,43 +1,75 @@
|
|
|
@startuml OfflineTranmission
|
|
|
header Message OfflineTranmission
|
|
|
left to right direction
|
|
|
-skinparam actorStyle awesome
|
|
|
|
|
|
skinparam usecase {
|
|
|
BackgroundColor<< Publisher >> Pink
|
|
|
BorderColor<< Publisher >> Red
|
|
|
BackgroundColor<< Subscriber >> YellowGreen
|
|
|
BorderColor<< Subscriber >> Green
|
|
|
+ BackgroundColor<< Interrupt >> Pink
|
|
|
+ BorderColor<< Interrupt >> Red
|
|
|
}
|
|
|
|
|
|
-package PublisherSite {
|
|
|
- actor "Publisher" as Publisher #pink;line:red;line.bold;text:red
|
|
|
+skinparam component {
|
|
|
+ PublisherSite 24
|
|
|
+}
|
|
|
+
|
|
|
+component "PublisherSite" as PublisherSite{
|
|
|
(Parent) as (parentPub) << Publisher >>
|
|
|
- usecase "Parent" as parentPub
|
|
|
- () "Proxy" as proxy1
|
|
|
+ usecase "**Parent**" as parentPub
|
|
|
+ card PublisherObservable as PublisherObs #Pink;line:Red;line.bold;text:Black
|
|
|
+ port "**Proxy**" as proxy1
|
|
|
+ database "**buffer**" as buffer
|
|
|
}
|
|
|
|
|
|
-package SubscriberSite {
|
|
|
- () "Proxy" as proxy2
|
|
|
- () "Proxy" as proxy3
|
|
|
+component SubscriberSite as SubscriberSite{
|
|
|
(Parent) as (parentSub) << Subscriber >>
|
|
|
- actor "Subscriber" as Subscriber1 #YellowGreen;line:green;line.bold;text:Green
|
|
|
- actor "Subscriber" as Subscriber2 #cyan;line:blue;line.bold;text:blue
|
|
|
+ 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
|
|
|
}
|
|
|
|
|
|
-' note "<b><size:18>Blue COLOR</size></b> is the \nfirst triggering mechanism for \noffline transmission." as N1
|
|
|
-' note "<b><size:18>Red COLOR</size></b> is the \nfirst line of streaming." as N2
|
|
|
-' note "Internet Connection Interrupted" as N3
|
|
|
-proxy1 <-- Publisher #line:Red;text:Red : Publish data to \ndesignated subsriber \nover proxy
|
|
|
-parentPub <-- Publisher : If internet is \ndown, NOTIFY \nparent publisher
|
|
|
-proxy2 --> Subscriber1 #line:Red;text:Red : Receive data \nfrom Publisher
|
|
|
-parentPub --> parentSub #line:blue;line.bold;text:Blue : Notify Internet \nWas Offline \nPlease Subscribe \nAgain
|
|
|
-proxy2 . proxy1 #line:Red;text:Red : Internet Connection \nInterruption
|
|
|
-' N3 . proxy2 #line:Red;text:Red
|
|
|
+' (X) as (interrupt) << Interrupt >>
|
|
|
+' usecase "X" as interrupt
|
|
|
|
|
|
-proxy3 <-- Subscriber2 #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
|
|
|
+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.'/
|