Added vscode assets.

This commit is contained in:
Harrison Deng 2020-12-24 17:21:05 -06:00
parent 6467c178c3
commit ca7221ea42
3 changed files with 87 additions and 18 deletions

27
.vscode/launch.json vendored Normal file
View File

@ -0,0 +1,27 @@
{
// Use IntelliSense to find out which attributes exist for C# debugging
// Use hover for the description of the existing attributes
// For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md
"version": "0.2.0",
"configurations": [
{
"name": ".NET Core Launch (console)",
"type": "coreclr",
"request": "launch",
"preLaunchTask": "build",
// If you have changed target frameworks, make sure to update the program path.
"program": "${workspaceFolder}/src/GameServiceWarden.Host/bin/Debug/netcoreapp3.1/GameServiceWarden.Host.dll",
"args": [],
"cwd": "${workspaceFolder}/src/GameServiceWarden.Host",
// For more information about the 'console' field, see https://aka.ms/VSCode-CS-LaunchJson-Console
"console": "internalConsole",
"stopAtEntry": false
},
{
"name": ".NET Core Attach",
"type": "coreclr",
"request": "attach",
"processId": "${command:pickProcess}"
}
]
}

42
.vscode/tasks.json vendored Normal file
View File

@ -0,0 +1,42 @@
{
"version": "2.0.0",
"tasks": [
{
"label": "build",
"command": "dotnet",
"type": "process",
"args": [
"build",
"${workspaceFolder}/src/GameServiceWarden.Host/GameServiceWarden.Host.csproj",
"/property:GenerateFullPaths=true",
"/consoleloggerparameters:NoSummary"
],
"problemMatcher": "$msCompile"
},
{
"label": "publish",
"command": "dotnet",
"type": "process",
"args": [
"publish",
"${workspaceFolder}/src/GameServiceWarden.Host/GameServiceWarden.Host.csproj",
"/property:GenerateFullPaths=true",
"/consoleloggerparameters:NoSummary"
],
"problemMatcher": "$msCompile"
},
{
"label": "watch",
"command": "dotnet",
"type": "process",
"args": [
"watch",
"run",
"${workspaceFolder}/src/GameServiceWarden.Host/GameServiceWarden.Host.csproj",
"/property:GenerateFullPaths=true",
"/consoleloggerparameters:NoSummary"
],
"problemMatcher": "$msCompile"
}
]
}

View File

@ -1,55 +1,55 @@
<mxfile host="65bd71144e" modified="2020-12-24T22:32:37.030Z" agent="5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Code/1.52.1 Chrome/83.0.4103.122 Electron/9.3.5 Safari/537.36" etag="XRoGvs6ajEFQR45Yu_qq" version="13.10.0" type="embed">
<mxfile host="65bd71144e" modified="2020-12-24T22:37:11.750Z" agent="5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Code/1.52.1 Chrome/83.0.4103.122 Electron/9.3.5 Safari/537.36" etag="I0usdzu5wRPewA4HBn-M" version="13.10.0" type="embed">
<diagram id="LHR7ubqCPd17_LyHkaH9" name="Structure">
<mxGraphModel dx="1009" dy="418" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
<mxGraphModel dx="895" dy="510" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
<root>
<mxCell id="0"/>
<mxCell id="1" parent="0"/>
<mxCell id="v9q6W0nyI9kZyF3peKlB-5" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=1;entryDx=0;entryDy=0;jumpStyle=none;dashed=1;endArrow=block;endFill=0;exitX=1;exitY=0;exitDx=0;exitDy=0;" parent="1" source="v9q6W0nyI9kZyF3peKlB-1" target="v9q6W0nyI9kZyF3peKlB-4" edge="1">
<mxCell id="v9q6W0nyI9kZyF3peKlB-5" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=1;entryDx=0;entryDy=0;jumpStyle=none;dashed=1;endArrow=block;endFill=0;exitX=1;exitY=0;exitDx=0;exitDy=0;sketch=1;curved=1;" parent="1" source="v9q6W0nyI9kZyF3peKlB-1" target="v9q6W0nyI9kZyF3peKlB-4" edge="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="v9q6W0nyI9kZyF3peKlB-1" value="&lt;table border=&quot;1&quot; width=&quot;100%&quot; cellpadding=&quot;4&quot; style=&quot;width: 100% ; height: 100% ; border-collapse: collapse&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th align=&quot;center&quot;&gt;ServiceInfo (entity)&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;center&quot;&gt;- serviceName: string&lt;br&gt;- controlLock: object&lt;br&gt;- state: ServiceState&lt;br&gt;- service: IGameService&lt;br&gt;- serviceConsoleStream: Stream&lt;br&gt;- moduleName: string&lt;br&gt;- assemblyName: string&lt;br&gt;- Dictionary&amp;lt;string, IConfigurable&amp;gt;&lt;br&gt;- disposed: bool&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;center&quot;&gt;+ Start(): void&lt;br&gt;+ Stop(): void&lt;br&gt;+ GetConfigurables(): IReadOnlyDictionary&amp;lt;string, IConfigurable&amp;gt;&lt;br&gt;+ GetServiceState(): ServiceState&lt;br&gt;+ getModuleName(): string&lt;br&gt;+ GetassemblyName(): string&lt;br&gt;+ SetServiceName(name: string): void // Implemented as property&lt;br&gt;+ GetServiceName(): string // Implemented as property&lt;br&gt;+ GetServiceConsoleStream(): Stream // Implemented as property&lt;br&gt;- OnServiceStateChange(curr: ServiceState,&amp;nbsp;prev: ServiceState): void&lt;br&gt;# Dispose(disposing: bool): void&lt;br&gt;+ Dispose(): void&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;" style="text;html=1;fillColor=none;overflow=fill;strokeColor=#f0f0f0;" parent="1" vertex="1">
<mxCell id="v9q6W0nyI9kZyF3peKlB-1" value="&lt;table border=&quot;1&quot; width=&quot;100%&quot; cellpadding=&quot;4&quot; style=&quot;width: 100% ; height: 100% ; border-collapse: collapse&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th align=&quot;center&quot;&gt;ServiceInfo (entity)&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;center&quot;&gt;- serviceName: string&lt;br&gt;- controlLock: object&lt;br&gt;- state: ServiceState&lt;br&gt;- service: IGameService&lt;br&gt;- serviceConsoleStream: Stream&lt;br&gt;- moduleName: string&lt;br&gt;- assemblyName: string&lt;br&gt;- Dictionary&amp;lt;string, IConfigurable&amp;gt;&lt;br&gt;- disposed: bool&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;center&quot;&gt;+ Start(): void&lt;br&gt;+ Stop(): void&lt;br&gt;+ GetConfigurables(): IReadOnlyDictionary&amp;lt;string, IConfigurable&amp;gt;&lt;br&gt;+ GetServiceState(): ServiceState&lt;br&gt;+ getModuleName(): string&lt;br&gt;+ GetassemblyName(): string&lt;br&gt;+ SetServiceName(name: string): void // Implemented as property&lt;br&gt;+ GetServiceName(): string // Implemented as property&lt;br&gt;+ GetServiceConsoleStream(): Stream // Implemented as property&lt;br&gt;- OnServiceStateChange(curr: ServiceState,&amp;nbsp;prev: ServiceState): void&lt;br&gt;# Dispose(disposing: bool): void&lt;br&gt;+ Dispose(): void&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;" style="text;html=1;fillColor=none;overflow=fill;strokeColor=#f0f0f0;sketch=1;" parent="1" vertex="1">
<mxGeometry x="950" y="950" width="400" height="410" as="geometry"/>
</mxCell>
<mxCell id="6" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;fontStyle=1" parent="1" source="v9q6W0nyI9kZyF3peKlB-2" target="v9q6W0nyI9kZyF3peKlB-1" edge="1">
<mxCell id="6" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;fontStyle=1;sketch=1;curved=1;" parent="1" source="v9q6W0nyI9kZyF3peKlB-2" target="v9q6W0nyI9kZyF3peKlB-1" edge="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="v9q6W0nyI9kZyF3peKlB-2" value="&lt;table border=&quot;1&quot; width=&quot;100%&quot; cellpadding=&quot;4&quot; style=&quot;width: 100% ; height: 100% ; border-collapse: collapse&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th align=&quot;center&quot;&gt;ServiceManager (Use-case)&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;center&quot;&gt;- services: Dictionary&amp;lt;string, Service&amp;gt;&lt;br&gt;- modules: Dictionary&amp;lt;string, Dictionary&amp;lt;string, IGameServiceModule&amp;gt;&amp;gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;center&quot;&gt;+ AddModule(assemblyName: string, module: IGameServiceModule): void&lt;br&gt;+ RemoveModule(assemblyName: string, moduleName string): void&lt;br&gt;+ CreateService(serviceName: string, assemblyName: string, moduleName: string): void&lt;br&gt;+ GetServiceNames(): IReadOnlyCollection&amp;lt;string&amp;gt;&lt;br&gt;+ GetServiceOptions(serviceName: string): IEnumerable&amp;lt;string&amp;gt;&lt;br&gt;+ SetServiceOptionValue(serviceName: string, optionName: string, string: value): bool&lt;br&gt;+ StartService(serviceName: string): void&lt;br&gt;+ StopService(serviceName: string): void&lt;br&gt;+ ExecuteCommand(serviceName: string, command: string): void&lt;br&gt;+ GetServiceConsoleStream(): Stream&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;" style="text;html=1;fillColor=none;overflow=fill;strokeColor=#f0f0f0;" parent="1" vertex="1">
<mxCell id="v9q6W0nyI9kZyF3peKlB-2" value="&lt;table border=&quot;1&quot; width=&quot;100%&quot; cellpadding=&quot;4&quot; style=&quot;width: 100% ; height: 100% ; border-collapse: collapse&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th align=&quot;center&quot;&gt;ServiceManager (Use-case)&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;center&quot;&gt;- services: Dictionary&amp;lt;string, Service&amp;gt;&lt;br&gt;- modules: Dictionary&amp;lt;string, Dictionary&amp;lt;string, IGameServiceModule&amp;gt;&amp;gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;center&quot;&gt;+ AddModule(assemblyName: string, module: IGameServiceModule): void&lt;br&gt;+ RemoveModule(assemblyName: string, moduleName string): void&lt;br&gt;+ CreateService(serviceName: string, assemblyName: string, moduleName: string): void&lt;br&gt;+ GetServiceNames(): IReadOnlyCollection&amp;lt;string&amp;gt;&lt;br&gt;+ GetServiceOptions(serviceName: string): IEnumerable&amp;lt;string&amp;gt;&lt;br&gt;+ SetServiceOptionValue(serviceName: string, optionName: string, string: value): bool&lt;br&gt;+ StartService(serviceName: string): void&lt;br&gt;+ StopService(serviceName: string): void&lt;br&gt;+ ExecuteCommand(serviceName: string, command: string): void&lt;br&gt;+ GetServiceConsoleStream(): Stream&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;" style="text;html=1;fillColor=none;overflow=fill;strokeColor=#f0f0f0;sketch=1;" parent="1" vertex="1">
<mxGeometry x="640" y="610" width="490" height="280" as="geometry"/>
</mxCell>
<mxCell id="v9q6W0nyI9kZyF3peKlB-4" value="IDisposable" style="shape=ext;double=1;rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxCell id="v9q6W0nyI9kZyF3peKlB-4" value="IDisposable" style="shape=ext;double=1;whiteSpace=wrap;html=1;sketch=1;" parent="1" vertex="1">
<mxGeometry x="1410" y="820" width="120" height="80" as="geometry"/>
</mxCell>
<mxCell id="v9q6W0nyI9kZyF3peKlB-13" value="&lt;table border=&quot;1&quot; width=&quot;100%&quot; cellpadding=&quot;4&quot; style=&quot;width: 100% ; height: 100% ; border-collapse: collapse&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th align=&quot;center&quot;&gt;ModuleLoader (Gateway)&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;center&quot;&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;center&quot;&gt;- InstantiateServiceables(assembly: Assembly): void&lt;br&gt;- LoadAssembly(path: string): void&lt;br&gt;+ LoadModules(path: string): IEnumerable&amp;lt;IGameServiceModule&amp;gt;&lt;br&gt;+ LoadAllModules(path: string[]): IEnumerable&amp;lt;IGameServiceModule&amp;gt;&lt;br&gt;+ LoadAllModules(path: IEnumerable&amp;lt;string&amp;gt;): IEnumerable&amp;lt;IGameServiceModule&amp;gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;" style="text;html=1;fillColor=none;overflow=fill;strokeColor=#f0f0f0;" parent="1" vertex="1">
<mxCell id="v9q6W0nyI9kZyF3peKlB-13" value="&lt;table border=&quot;1&quot; width=&quot;100%&quot; cellpadding=&quot;4&quot; style=&quot;width: 100% ; height: 100% ; border-collapse: collapse&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th align=&quot;center&quot;&gt;ModuleLoader (Gateway)&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;center&quot;&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;center&quot;&gt;- InstantiateServiceables(assembly: Assembly): void&lt;br&gt;- LoadAssembly(path: string): void&lt;br&gt;+ LoadModules(path: string): IEnumerable&amp;lt;IGameServiceModule&amp;gt;&lt;br&gt;+ LoadAllModules(path: string[]): IEnumerable&amp;lt;IGameServiceModule&amp;gt;&lt;br&gt;+ LoadAllModules(path: IEnumerable&amp;lt;string&amp;gt;): IEnumerable&amp;lt;IGameServiceModule&amp;gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;" style="text;html=1;fillColor=none;overflow=fill;strokeColor=#f0f0f0;sketch=1;" parent="1" vertex="1">
<mxGeometry x="110" y="280" width="490" height="250" as="geometry"/>
</mxCell>
<mxCell id="titdvn9p0HDrujjw1N2D-4" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.75;exitY=0;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;dashed=1;endArrow=block;endFill=0;" parent="1" source="v9q6W0nyI9kZyF3peKlB-16" target="v9q6W0nyI9kZyF3peKlB-27" edge="1">
<mxCell id="titdvn9p0HDrujjw1N2D-4" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.75;exitY=0;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;dashed=1;endArrow=block;endFill=0;sketch=1;curved=1;" parent="1" source="v9q6W0nyI9kZyF3peKlB-16" target="v9q6W0nyI9kZyF3peKlB-27" edge="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="2" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="v9q6W0nyI9kZyF3peKlB-16" target="v9q6W0nyI9kZyF3peKlB-2" edge="1">
<mxCell id="2" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;sketch=1;curved=1;" parent="1" source="v9q6W0nyI9kZyF3peKlB-16" target="v9q6W0nyI9kZyF3peKlB-2" edge="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="3" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="v9q6W0nyI9kZyF3peKlB-16" target="v9q6W0nyI9kZyF3peKlB-13" edge="1">
<mxCell id="3" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;sketch=1;curved=1;" parent="1" source="v9q6W0nyI9kZyF3peKlB-16" target="v9q6W0nyI9kZyF3peKlB-13" edge="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="4" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0.75;exitDx=0;exitDy=0;entryX=1;entryY=0.25;entryDx=0;entryDy=0;" parent="1" source="v9q6W0nyI9kZyF3peKlB-16" target="v9q6W0nyI9kZyF3peKlB-23" edge="1">
<mxCell id="4" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0.75;exitDx=0;exitDy=0;entryX=1;entryY=0.25;entryDx=0;entryDy=0;sketch=1;curved=1;" parent="1" source="v9q6W0nyI9kZyF3peKlB-16" target="v9q6W0nyI9kZyF3peKlB-23" edge="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="v9q6W0nyI9kZyF3peKlB-16" value="&lt;table border=&quot;1&quot; width=&quot;100%&quot; cellpadding=&quot;4&quot; style=&quot;width: 100% ; height: 100% ; border-collapse: collapse&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th align=&quot;center&quot;&gt;ServiceController (Controller)&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;center&quot;&gt;- moduleLoader: ModuleLoader&lt;br&gt;- serviceManager: serviceManager&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;center&quot;&gt;+ LoadModulesInDirectory(directory: string): void&lt;br&gt;+ SaveServices(serviceDataDir: string): void&lt;br&gt;+ LoadServices(serviceDataDir: string): void&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;" style="text;html=1;fillColor=none;overflow=fill;strokeColor=#f0f0f0;" parent="1" vertex="1">
<mxCell id="v9q6W0nyI9kZyF3peKlB-16" value="&lt;table border=&quot;1&quot; width=&quot;100%&quot; cellpadding=&quot;4&quot; style=&quot;width: 100% ; height: 100% ; border-collapse: collapse&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th align=&quot;center&quot;&gt;ServiceController (Controller)&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;center&quot;&gt;- moduleLoader: ModuleLoader&lt;br&gt;- serviceManager: serviceManager&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;center&quot;&gt;+ LoadModulesInDirectory(directory: string): void&lt;br&gt;+ SaveServices(serviceDataDir: string): void&lt;br&gt;+ LoadServices(serviceDataDir: string): void&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;" style="text;html=1;fillColor=none;overflow=fill;strokeColor=#f0f0f0;sketch=1;" parent="1" vertex="1">
<mxGeometry x="640" y="280" width="432.5" height="250" as="geometry"/>
</mxCell>
<mxCell id="v9q6W0nyI9kZyF3peKlB-23" value="&lt;table border=&quot;1&quot; width=&quot;100%&quot; cellpadding=&quot;4&quot; style=&quot;width: 100% ; height: 100% ; border-collapse: collapse&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th align=&quot;center&quot;&gt;ServiceGateway (Gateway)&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;center&quot;&gt;- dataDirectory: string&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;center&quot;&gt;+ SaveService(name: string, assemblyName: string, moduleName: string): void&lt;br&gt;+ GetServiceName(path: string): string&lt;br&gt;+ GetServiceModuleName(path: string): string&lt;br&gt;+ GetAllServiceInfoPaths() IEnumerable&amp;lt;string&amp;gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;" style="text;html=1;fillColor=none;overflow=fill;strokeColor=#f0f0f0;" parent="1" vertex="1">
<mxCell id="v9q6W0nyI9kZyF3peKlB-23" value="&lt;table border=&quot;1&quot; width=&quot;100%&quot; cellpadding=&quot;4&quot; style=&quot;width: 100% ; height: 100% ; border-collapse: collapse&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th align=&quot;center&quot;&gt;ServiceGateway (Gateway)&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;center&quot;&gt;- dataDirectory: string&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;center&quot;&gt;+ SaveService(name: string, assemblyName: string, moduleName: string): void&lt;br&gt;+ GetServiceName(path: string): string&lt;br&gt;+ GetServiceModuleName(path: string): string&lt;br&gt;+ GetAllServiceInfoPaths() IEnumerable&amp;lt;string&amp;gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;" style="text;html=1;fillColor=none;overflow=fill;strokeColor=#f0f0f0;sketch=1;" parent="1" vertex="1">
<mxGeometry x="110" y="545" width="490" height="230" as="geometry"/>
</mxCell>
<mxCell id="v9q6W0nyI9kZyF3peKlB-27" value="&lt;table border=&quot;1&quot; width=&quot;100%&quot; cellpadding=&quot;4&quot; style=&quot;width: 100% ; height: 100% ; border-collapse: collapse&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th align=&quot;center&quot;&gt;ICommandable &amp;lt;I&amp;gt;&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;center&quot;&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;center&quot;&gt;+ GetPrefix(): string&lt;br&gt;+ Validate(string input): bool&lt;br&gt;+ Execute(string input): void&lt;br&gt;+ Help(): string&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;" style="text;html=1;fillColor=none;overflow=fill;strokeColor=#f0f0f0;" parent="1" vertex="1">
<mxCell id="v9q6W0nyI9kZyF3peKlB-27" value="&lt;table border=&quot;1&quot; width=&quot;100%&quot; cellpadding=&quot;4&quot; style=&quot;width: 100% ; height: 100% ; border-collapse: collapse&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th align=&quot;center&quot;&gt;ICommandable &amp;lt;I&amp;gt;&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;center&quot;&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;center&quot;&gt;+ GetPrefix(): string&lt;br&gt;+ Validate(string input): bool&lt;br&gt;+ Execute(string input): void&lt;br&gt;+ Help(): string&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;" style="text;html=1;fillColor=none;overflow=fill;strokeColor=#f0f0f0;sketch=1;" parent="1" vertex="1">
<mxGeometry x="900" y="50" width="250" height="170" as="geometry"/>
</mxCell>
<mxCell id="titdvn9p0HDrujjw1N2D-5" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0;exitDx=0;exitDy=0;entryX=0.75;entryY=1;entryDx=0;entryDy=0;dashed=1;endArrow=block;endFill=0;" parent="1" source="titdvn9p0HDrujjw1N2D-1" target="v9q6W0nyI9kZyF3peKlB-27" edge="1">
<mxCell id="titdvn9p0HDrujjw1N2D-5" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0;exitDx=0;exitDy=0;entryX=0.75;entryY=1;entryDx=0;entryDy=0;dashed=1;endArrow=block;endFill=0;sketch=1;curved=1;" parent="1" source="titdvn9p0HDrujjw1N2D-1" target="v9q6W0nyI9kZyF3peKlB-27" edge="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="HWr5KmjBEDiam6OlhXxB-2" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.25;exitY=0;exitDx=0;exitDy=0;entryX=1;entryY=1;entryDx=0;entryDy=0;endArrow=open;endFill=0;" parent="1" source="titdvn9p0HDrujjw1N2D-1" target="v9q6W0nyI9kZyF3peKlB-27" edge="1">
<mxCell id="HWr5KmjBEDiam6OlhXxB-2" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.25;exitY=0;exitDx=0;exitDy=0;entryX=1;entryY=1;entryDx=0;entryDy=0;endArrow=open;endFill=0;sketch=1;curved=1;" parent="1" source="titdvn9p0HDrujjw1N2D-1" target="v9q6W0nyI9kZyF3peKlB-27" edge="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="titdvn9p0HDrujjw1N2D-1" value="&lt;table border=&quot;1&quot; width=&quot;100%&quot; cellpadding=&quot;4&quot; style=&quot;width: 100% ; height: 100% ; border-collapse: collapse&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th align=&quot;center&quot;&gt;CommandFork (Controller)&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;center&quot;&gt;- commands: Dictionary&amp;lt;string, ICommandable&amp;gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;center&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;" style="text;html=1;fillColor=none;overflow=fill;strokeColor=#f0f0f0;" parent="1" vertex="1">
<mxCell id="titdvn9p0HDrujjw1N2D-1" value="&lt;table border=&quot;1&quot; width=&quot;100%&quot; cellpadding=&quot;4&quot; style=&quot;width: 100% ; height: 100% ; border-collapse: collapse&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th align=&quot;center&quot;&gt;CommandFork (Controller)&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;center&quot;&gt;- commands: Dictionary&amp;lt;string, ICommandable&amp;gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;center&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;" style="text;html=1;fillColor=none;overflow=fill;strokeColor=#f0f0f0;sketch=1;" parent="1" vertex="1">
<mxGeometry x="1120" y="280" width="280" height="140" as="geometry"/>
</mxCell>
</root>