forked from FAForever/downlords-faf-client
-
Notifications
You must be signed in to change notification settings - Fork 0
/
architecture.drawio
140 lines (140 loc) · 15.1 KB
/
architecture.drawio
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
<mxfile host="app.diagrams.net" modified="2021-09-12T11:35:51.210Z" agent="5.0 (Windows)" etag="4Jc4NPJgMnDiGyrNQxOp" version="15.1.4" type="github">
<diagram id="prtHgNgQTEPvFCAcTncT" name="Page-1">
<mxGraphModel dx="489" dy="1948" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="dNxyNK7c78bLwvsdeMH5-19" value="<div>FAF Client Application</div>" style="swimlane;html=1;childLayout=stackLayout;resizeParent=1;resizeParentMax=0;horizontal=0;startSize=20;horizontalStack=0;" parent="1" vertex="1">
<mxGeometry x="52" y="40" width="740" height="530" as="geometry" />
</mxCell>
<mxCell id="dNxyNK7c78bLwvsdeMH5-27" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;dashed=1;endArrow=none;endFill=0;" parent="dNxyNK7c78bLwvsdeMH5-19" source="dNxyNK7c78bLwvsdeMH5-24" target="dNxyNK7c78bLwvsdeMH5-26" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="dNxyNK7c78bLwvsdeMH5-31" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=classic;endFill=1;" parent="dNxyNK7c78bLwvsdeMH5-19" target="dNxyNK7c78bLwvsdeMH5-30" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="300" y="160" as="sourcePoint" />
</mxGeometry>
</mxCell>
<mxCell id="dNxyNK7c78bLwvsdeMH5-35" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=classic;endFill=1;" parent="dNxyNK7c78bLwvsdeMH5-19" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="300" y="200" as="sourcePoint" />
<mxPoint x="406" y="350" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="dNxyNK7c78bLwvsdeMH5-38" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=classic;endFill=1;" parent="dNxyNK7c78bLwvsdeMH5-19" source="dNxyNK7c78bLwvsdeMH5-26" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="180" y="340" />
<mxPoint x="400" y="340" />
</Array>
<mxPoint x="400.0344827586207" y="309.9655172413792" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="dNxyNK7c78bLwvsdeMH5-20" value="Communication Layer" style="swimlane;html=1;startSize=20;horizontal=0;swimlaneFillColor=#66B2FF;" parent="dNxyNK7c78bLwvsdeMH5-19" vertex="1">
<mxGeometry x="20" width="720" height="150" as="geometry" />
</mxCell>
<mxCell id="dNxyNK7c78bLwvsdeMH5-24" value="FafApiAccessor" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Helvetica;fontSize=12;fontColor=#000000;align=center;" parent="dNxyNK7c78bLwvsdeMH5-20" vertex="1">
<mxGeometry x="330" y="40" width="120" height="60" as="geometry" />
</mxCell>
<mxCell id="dNxyNK7c78bLwvsdeMH5-30" value="FafServerAccessor" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Helvetica;fontSize=12;fontColor=#000000;align=center;" parent="dNxyNK7c78bLwvsdeMH5-20" vertex="1">
<mxGeometry x="460" y="40" width="120" height="60" as="geometry" />
</mxCell>
<mxCell id="G9QZ7itRbb39A--PqmDq-13" value="<div align="left">Accessors know how to talk to a specific <br>server and what functions it offers.</div><div align="left"><br></div><div align="left">For instance, FafApiAccessor accesses the FAF REST API over HTTP whereas FafServerAccessor accesses the FAF server over a proprietary protocol.<br></div>" style="shape=note;whiteSpace=wrap;html=1;backgroundOutline=1;darkOpacity=0.05;fillColor=#FFFFFF;align=left;" vertex="1" parent="dNxyNK7c78bLwvsdeMH5-20">
<mxGeometry x="30" y="10" width="280" height="130" as="geometry" />
</mxCell>
<mxCell id="dNxyNK7c78bLwvsdeMH5-21" value="<div>Service Layer</div>" style="swimlane;html=1;startSize=20;horizontal=0;swimlaneFillColor=#FF9999;" parent="dNxyNK7c78bLwvsdeMH5-19" vertex="1">
<mxGeometry x="20" y="150" width="720" height="190" as="geometry" />
</mxCell>
<mxCell id="dNxyNK7c78bLwvsdeMH5-26" value="GameService" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Helvetica;fontSize=12;fontColor=#000000;align=center;" parent="dNxyNK7c78bLwvsdeMH5-21" vertex="1">
<mxGeometry x="335" y="80" width="110" height="60" as="geometry" />
</mxCell>
<mxCell id="G9QZ7itRbb39A--PqmDq-4" value="PlayerService" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Helvetica;fontSize=12;fontColor=#000000;align=center;" vertex="1" parent="dNxyNK7c78bLwvsdeMH5-21">
<mxGeometry x="465" y="80" width="110" height="60" as="geometry" />
</mxCell>
<mxCell id="G9QZ7itRbb39A--PqmDq-5" value="PreferenceService" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Helvetica;fontSize=12;fontColor=#000000;align=center;" vertex="1" parent="dNxyNK7c78bLwvsdeMH5-21">
<mxGeometry x="593" y="80" width="110" height="60" as="geometry" />
</mxCell>
<mxCell id="G9QZ7itRbb39A--PqmDq-14" value="<div align="left">Services provide functionality for exactly one domain. For every domain, there is a service.</div><div align="left"><br></div><div align="left">For the domain "maps" there is a MapService<br>For the domain "players" there is a Player Service<br>For the domain "games" there is a Game Service<br>and so on</div><div align="left"><br></div><div align="left">Services may depend on other services, however, cyclic dependency should be avoided (If MapService depends on Player Service, Player Service should not depend on MapService)<br></div>" style="shape=note;whiteSpace=wrap;html=1;backgroundOutline=1;darkOpacity=0.05;fillColor=#FFFFFF;align=left;" vertex="1" parent="dNxyNK7c78bLwvsdeMH5-21">
<mxGeometry x="30" y="5" width="280" height="180" as="geometry" />
</mxCell>
<mxCell id="dNxyNK7c78bLwvsdeMH5-22" value="<div>UI Layer</div>" style="swimlane;html=1;startSize=20;horizontal=0;swimlaneFillColor=#66FF66;fillColor=#FFFFFF;" parent="dNxyNK7c78bLwvsdeMH5-19" vertex="1">
<mxGeometry x="20" y="340" width="720" height="190" as="geometry" />
</mxCell>
<mxCell id="G9QZ7itRbb39A--PqmDq-7" value="ChatTabController" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Helvetica;fontSize=12;fontColor=#000000;align=center;" vertex="1" parent="dNxyNK7c78bLwvsdeMH5-22">
<mxGeometry x="593.5" y="35" width="110" height="60" as="geometry" />
</mxCell>
<mxCell id="G9QZ7itRbb39A--PqmDq-20" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="dNxyNK7c78bLwvsdeMH5-22" source="G9QZ7itRbb39A--PqmDq-9" target="G9QZ7itRbb39A--PqmDq-19">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="G9QZ7itRbb39A--PqmDq-9" value="games.fxml" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Helvetica;fontSize=12;fontColor=#000000;align=center;" vertex="1" parent="dNxyNK7c78bLwvsdeMH5-22">
<mxGeometry x="332.5" y="120" width="110" height="55" as="geometry" />
</mxCell>
<mxCell id="G9QZ7itRbb39A--PqmDq-21" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="dNxyNK7c78bLwvsdeMH5-22" source="G9QZ7itRbb39A--PqmDq-10" target="G9QZ7itRbb39A--PqmDq-18">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="522" y="120" />
<mxPoint x="521" y="120" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="G9QZ7itRbb39A--PqmDq-10" value="chat.fxml" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Helvetica;fontSize=12;fontColor=#000000;align=center;" vertex="1" parent="dNxyNK7c78bLwvsdeMH5-22">
<mxGeometry x="466.5" y="120" width="110" height="55" as="geometry" />
</mxCell>
<mxCell id="G9QZ7itRbb39A--PqmDq-22" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="dNxyNK7c78bLwvsdeMH5-22" source="G9QZ7itRbb39A--PqmDq-11" target="G9QZ7itRbb39A--PqmDq-7">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="G9QZ7itRbb39A--PqmDq-11" value="chat_tab.fxml" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Helvetica;fontSize=12;fontColor=#000000;align=center;" vertex="1" parent="dNxyNK7c78bLwvsdeMH5-22">
<mxGeometry x="593.5" y="120" width="110" height="55" as="geometry" />
</mxCell>
<mxCell id="G9QZ7itRbb39A--PqmDq-15" value="<div align="left">Controllers (as in MVC) control Ul elements (defined in an FXML file) and call services. Services must never depend on controllers, a controller may depend on more than one<br>service</div><div align="left"><br>A controller may depend on child controllers, but cyclic dependencies should be avoided. For instance: News Controller depends on NewsItemController<br></div>" style="shape=note;whiteSpace=wrap;html=1;backgroundOutline=1;darkOpacity=0.05;fillColor=#FFFFFF;align=left;" vertex="1" parent="dNxyNK7c78bLwvsdeMH5-22">
<mxGeometry x="30" y="10" width="280" height="165" as="geometry" />
</mxCell>
<mxCell id="G9QZ7itRbb39A--PqmDq-18" value="ChatController" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Helvetica;fontSize=12;fontColor=#000000;align=center;" vertex="1" parent="dNxyNK7c78bLwvsdeMH5-22">
<mxGeometry x="465.5" y="35" width="110" height="60" as="geometry" />
</mxCell>
<mxCell id="G9QZ7itRbb39A--PqmDq-19" value="GamesController" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Helvetica;fontSize=12;fontColor=#000000;align=center;" vertex="1" parent="dNxyNK7c78bLwvsdeMH5-22">
<mxGeometry x="334.5" y="35" width="110" height="60" as="geometry" />
</mxCell>
<mxCell id="G9QZ7itRbb39A--PqmDq-23" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="dNxyNK7c78bLwvsdeMH5-19" source="G9QZ7itRbb39A--PqmDq-19" target="dNxyNK7c78bLwvsdeMH5-26">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="G9QZ7itRbb39A--PqmDq-24" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;rounded=1;" edge="1" parent="dNxyNK7c78bLwvsdeMH5-19" source="G9QZ7itRbb39A--PqmDq-19" target="G9QZ7itRbb39A--PqmDq-4">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="G9QZ7itRbb39A--PqmDq-30" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="dNxyNK7c78bLwvsdeMH5-19" source="G9QZ7itRbb39A--PqmDq-4" target="dNxyNK7c78bLwvsdeMH5-30">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="G9QZ7itRbb39A--PqmDq-33" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" edge="1" parent="dNxyNK7c78bLwvsdeMH5-19" source="G9QZ7itRbb39A--PqmDq-18" target="G9QZ7itRbb39A--PqmDq-4">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="G9QZ7itRbb39A--PqmDq-34" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="dNxyNK7c78bLwvsdeMH5-19" source="G9QZ7itRbb39A--PqmDq-7" target="G9QZ7itRbb39A--PqmDq-5">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="G9QZ7itRbb39A--PqmDq-35" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" edge="1" parent="dNxyNK7c78bLwvsdeMH5-19" source="G9QZ7itRbb39A--PqmDq-18" target="G9QZ7itRbb39A--PqmDq-5">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="G9QZ7itRbb39A--PqmDq-36" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="dNxyNK7c78bLwvsdeMH5-19" source="dNxyNK7c78bLwvsdeMH5-26" target="dNxyNK7c78bLwvsdeMH5-30">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="G9QZ7itRbb39A--PqmDq-39" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="dNxyNK7c78bLwvsdeMH5-19" source="G9QZ7itRbb39A--PqmDq-4" target="dNxyNK7c78bLwvsdeMH5-24">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="G9QZ7itRbb39A--PqmDq-40" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="dNxyNK7c78bLwvsdeMH5-19" source="G9QZ7itRbb39A--PqmDq-7" target="G9QZ7itRbb39A--PqmDq-4">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="G9QZ7itRbb39A--PqmDq-2" value="FAF Rest API" style="ellipse;shape=cloud;whiteSpace=wrap;html=1;fillColor=#FFFFFF;" vertex="1" parent="1">
<mxGeometry x="379" y="-60" width="150" height="80" as="geometry" />
</mxCell>
<mxCell id="G9QZ7itRbb39A--PqmDq-3" value="FAF Lobby Server" style="ellipse;shape=cloud;whiteSpace=wrap;html=1;fillColor=#FFFFFF;" vertex="1" parent="1">
<mxGeometry x="510" y="-60" width="150" height="80" as="geometry" />
</mxCell>
<mxCell id="G9QZ7itRbb39A--PqmDq-31" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.55;entryY=0.95;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="dNxyNK7c78bLwvsdeMH5-24" target="G9QZ7itRbb39A--PqmDq-2">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="G9QZ7itRbb39A--PqmDq-32" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.55;entryY=0.95;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="dNxyNK7c78bLwvsdeMH5-30" target="G9QZ7itRbb39A--PqmDq-3">
<mxGeometry relative="1" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>