Files
pva2pva/documentation/structs.dot
2015-12-07 22:25:46 -05:00

89 lines
3.8 KiB
Plaintext

digraph {
# PVA server components are red boxes
# PVA client components are blue boxes
# GW components are black ovals
#
# red lines are strong references either '1' (1 to 1) or 'N' (1 to N)
# green lines are strong references which are explicitly broken on some event
# blue lines are weak references
subgraph clusterserver {
label = "Server";
ServerContextImpl [shape=box,color=red];
BlockingServerTCPTransportCodec [shape=box,color=red];
ServerChannelImpl [shape=box,color=red];
ServerChannelRequesterImpl [shape=box,color=red];
ServerChannelImpl [shape=box,color=red];
ServerMonitorRequesterImpl [shape=box,color=red];
## Server Internals
# Really goes through TransportRegistry
ServerContextImpl -> BlockingServerTCPTransportCodec [color=green,style=dashed,label="N"];
BlockingServerTCPTransportCodec -> ServerChannelImpl [color=green,style=dashed,label="N"];
ServerChannelRequesterImpl -> BlockingServerTCPTransportCodec [color=blue,label="1"];
ServerChannelRequesterImpl -> ServerChannelImpl [color=blue,label="1"];
ServerMonitorRequesterImpl -> BlockingServerTCPTransportCodec [color=red,label="1"];
}
## Server to GW
ServerContextImpl -> GWServerChannelProvider [color=red,label="N"];
ServerChannelImpl -> GWChannel [color=green,style=dashed,label="1"];
GWChannel -> ServerChannelRequesterImpl [color=red,label="1"];
MonitorUser -> ServerMonitorRequesterImpl [color=blue,label="1"];
ServerMonitorRequesterImpl -> MonitorUser [color=red,label="1"];
subgraph clustergw {
label = "Gateway";
GWServerChannelProvider;
ChannelCache;
ChannelCacheEntry;
GWChannel;
CRequester;
MonitorCacheEntry;
MonitorUser;
## GW internal
GWServerChannelProvider -> ChannelCache [color=red,label="1"];
GWChannel -> ChannelCacheEntry [color=red,label="1"];
ChannelCache -> ChannelCacheEntry [color=green,style=dashed,label="N"];
ChannelCache -> GWServerChannelProvider [color=blue,label="1"];
ChannelCacheEntry -> ChannelCache [color=blue,label="1"];
CRequester -> ChannelCacheEntry [color=blue,label="1"];
ChannelCacheEntry -> GWChannel [color=blue,label="N"];
ChannelCacheEntry -> MonitorCacheEntry [color=blue,label="N"];
MonitorCacheEntry -> ChannelCacheEntry [color=blue,label="1"];
MonitorCacheEntry -> MonitorUser [color=blue,label="N"];
MonitorUser -> MonitorCacheEntry [color=red,label="1"];
}
## GW to Client
ChannelCache -> ChannelProviderImpl [color=red,label="1"];
ChannelCacheEntry -> InternalChannelImpl [color=red,label="1"];
MonitorCacheEntry -> ChannelMonitorImpl [color=red,label="1"];
InternalChannelImpl -> CRequester [color=red,label="1"];
ChannelMonitorImpl -> MonitorCacheEntry [color=red,style=dashed,label="1"];
MonitorStrategyQueue -> MonitorCacheEntry [color=red,label="1"];
subgraph clusterclient {
label = "Client";
InternalClientContextImpl [shape=box,color=blue];
ChannelProviderImpl [shape=box,color=blue];
BlockingClientTCPTransportCodec [shape=box,color=blue];
InternalChannelImpl [shape=box,color=blue];
ChannelMonitorImpl [shape=box,color=blue];
MonitorStrategyQueue [shape=box,color=blue];
## Client internals
ChannelProviderImpl -> InternalClientContextImpl [color=blue,label="1"];
# Really goes through TransportRegistry
InternalClientContextImpl -> BlockingClientTCPTransportCodec [color=green,style=dashed,label="N"];
BlockingClientTCPTransportCodec -> InternalChannelImpl [color=blue,label="N"];
InternalChannelImpl -> BlockingClientTCPTransportCodec [color=red,label="1"];
InternalChannelImpl -> InternalClientContextImpl [color=red,label="1"];
ChannelMonitorImpl -> MonitorStrategyQueue [color=red,label="1"];
MonitorStrategyQueue -> InternalChannelImpl [color=red,label="1"];
}
}