|
@@ -7,50 +7,62 @@ skinparam usecase {
|
|
BorderColor<< Publisher >> Red
|
|
BorderColor<< Publisher >> Red
|
|
BackgroundColor<< Subscriber >> YellowGreen
|
|
BackgroundColor<< Subscriber >> YellowGreen
|
|
BorderColor<< Subscriber >> Green
|
|
BorderColor<< Subscriber >> Green
|
|
|
|
+ BackgroundColor<< Interrupt >> Pink
|
|
|
|
+ BorderColor<< Interrupt >> Red
|
|
}
|
|
}
|
|
|
|
|
|
-component PublisherSite {
|
|
|
|
|
|
+skinparam component {
|
|
|
|
+ PublisherSite 24
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+component "PublisherSite" as PublisherSite{
|
|
(Parent) as (parentPub) << Publisher >>
|
|
(Parent) as (parentPub) << Publisher >>
|
|
- usecase "Parent" as parentPub
|
|
|
|
- [PublisherObservable] as PublisherObs #Pink;line:Red;line.bold;text:Black
|
|
|
|
- port "Proxy" as proxy1
|
|
|
|
- database "buffer" as buffer
|
|
|
|
|
|
+ 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 {
|
|
|
|
|
|
+component SubscriberSite as SubscriberSite{
|
|
(Parent) as (parentSub) << Subscriber >>
|
|
(Parent) as (parentSub) << Subscriber >>
|
|
- [SubscriberObservable] as SubscriberObs1 #YellowGreen;line:green;line.bold;text:Black
|
|
|
|
- [SubscriberObservable] as SubscriberObs2 #cyan;line:blue;line.bold;text:Black
|
|
|
|
- port "Proxy" as proxy2
|
|
|
|
- port "Proxy" as proxy3
|
|
|
|
|
|
+ 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
|
|
proxy1 *- PublisherObs #line:Red;text:Red : Publish data to \ndesignated subsriber \nover proxy
|
|
PublisherObs --> parentPub : If internet is \ndown, NOTIFY \nparent publisher
|
|
PublisherObs --> parentPub : If internet is \ndown, NOTIFY \nparent publisher
|
|
parentPub --> parentSub #line:blue;line.bold;text:Blue : Notify Internet \nWas Offline \nPlease Subscribe \nAgain
|
|
parentPub --> parentSub #line:blue;line.bold;text:Blue : Notify Internet \nWas Offline \nPlease Subscribe \nAgain
|
|
-proxy1 *..* proxy2 #line:Red;text:Red : Internet Connection \nInterruption
|
|
|
|
-proxy1 == buffer : Store data \nin buffer should \nthe internet connection \nstatus is offline
|
|
|
|
|
|
+' 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 : Receive data \nfrom Publisher
|
|
|
|
|
|
+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
|
|
proxy3 *- SubscriberObs2 #line:Blue;text:Blue : Subcribe to Publisher \nvia new Proxxy or \nexisting Proxy
|
|
-proxy2 *- SubscriberObs2 #line:Blue;text:Blue
|
|
|
|
|
|
+' proxy2 *- SubscriberObs2 #line:Blue;text:Blue
|
|
proxy1 *..* proxy3 #line:Blue;text:Blue : Subscribe to proxy \n to continue receiving \ndata
|
|
proxy1 *..* proxy3 #line:Blue;text:Blue : Subscribe to proxy \n to continue receiving \ndata
|
|
-parentSub -> SubscriberObs2 #line:Orange;text:Orange : Instantiate a \nnew Subscriber upon \nreceiving notification \nfrom Publisher's parent
|
|
|
|
-parentSub <- SubscriberObs1 : Persists data \nreceived from \nPublisher
|
|
|
|
-
|
|
|
|
|
|
+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
|
|
@enduml
|
|
|
|
|
|
/' Briedf description
|
|
/' Briedf description
|
|
Follow the red line first. It represents a normal flow of data/message transfer
|
|
Follow the red line first. It represents a normal flow of data/message transfer
|
|
-during an ideal situation.
|
|
|
|
|
|
+during an ideal situation.
|
|
The blue lines represents when the internet is done and provides direction as to
|
|
The blue lines represents when the internet is done and provides direction as to
|
|
how the components handle the situation.
|
|
how the components handle the situation.
|
|
So here, the the publisher will produce it's messages/payload to the subscriber
|
|
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.
|
|
|
|
|
|
+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
|
|
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.
|
|
|
|
|
|
+same library in order to receive the transmitted data.
|
|
|
|
|
|
-Now, assuming the internet connection is interrupted for whatever reason, then the
|
|
|
|
|
|
+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
|
|
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
|
|
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
|
|
and send it's notification to the subscriber's parents once the internet is back
|