Restructured untested persistence system.
No longer conforming to C# dictionary format. Caught bug in untested persistence system.
This commit is contained in:
parent
f09a95799f
commit
067c8f5824
@ -9,10 +9,10 @@ namespace GameServiceWarden.Core.Games
|
||||
public class GameServiceManager
|
||||
{
|
||||
private readonly IDictionary<string, GameServiceInfo> running;
|
||||
private readonly IPersistentDictionary<GameServiceInfo> services;
|
||||
private readonly IReadOnlyPersistentDictionary<IReadOnlyDictionary<string, IGameServiceModule>> modules;
|
||||
private readonly IPersistent<GameServiceInfo> services;
|
||||
private readonly IReadOnlyPersistent<IReadOnlyDictionary<string, IGameServiceModule>> modules;
|
||||
|
||||
public GameServiceManager(IPersistentDictionary<GameServiceInfo> services, IReadOnlyPersistentDictionary<IReadOnlyDictionary<string, IGameServiceModule>> modules)
|
||||
public GameServiceManager(IPersistent<GameServiceInfo> services, IReadOnlyPersistent<IReadOnlyDictionary<string, IGameServiceModule>> modules)
|
||||
{
|
||||
this.services = services;
|
||||
this.modules = modules;
|
||||
@ -40,11 +40,9 @@ namespace GameServiceWarden.Core.Games
|
||||
return modules.Keys;
|
||||
}
|
||||
|
||||
public IReadOnlyCollection<string> GetServiceNames()
|
||||
public IEnumerable<string> GetServiceNames()
|
||||
{
|
||||
string[] names = new string[services.Count];
|
||||
services.Keys.CopyTo(names, 0);
|
||||
return names;
|
||||
return services.Keys;
|
||||
}
|
||||
|
||||
public IEnumerable<string> GetServiceOptions(string serviceName)
|
||||
|
@ -8,13 +8,13 @@ using GameServiceWarden.ModuleAPI;
|
||||
|
||||
namespace GameServiceWarden.Core.Persistence
|
||||
{
|
||||
public class GameServiceModuleDictionary : IReadOnlyPersistentDictionary<IReadOnlyDictionary<string, IGameServiceModule>>
|
||||
public class GameServiceModules : IReadOnlyPersistent<IReadOnlyDictionary<string, IGameServiceModule>>
|
||||
{
|
||||
private readonly string mapDirectory;
|
||||
|
||||
private readonly GameServiceModuleLoader loader = new GameServiceModuleLoader();
|
||||
|
||||
public GameServiceModuleDictionary(string mapDirectory)
|
||||
public GameServiceModules(string mapDirectory)
|
||||
{
|
||||
this.mapDirectory = mapDirectory;
|
||||
}
|
14
src/GameServiceWarden.Core/Persistence/IPersistent.cs
Normal file
14
src/GameServiceWarden.Core/Persistence/IPersistent.cs
Normal file
@ -0,0 +1,14 @@
|
||||
using System.Collections.Generic;
|
||||
using GameServiceWarden.Core.Games;
|
||||
|
||||
namespace GameServiceWarden.Core.Persistence
|
||||
{
|
||||
public interface IPersistent<V> : IReadOnlyPersistent<V>
|
||||
{
|
||||
new V this[string key] { get; set; }
|
||||
|
||||
void Add(string key, V value);
|
||||
void Clear();
|
||||
bool Remove(string key);
|
||||
}
|
||||
}
|
@ -1,13 +1,22 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using GameServiceWarden.ModuleAPI;
|
||||
|
||||
namespace GameServiceWarden.Core.Persistence
|
||||
{
|
||||
public interface IPersistentDictionary<V> : IDictionary<string, V>
|
||||
public interface IReadOnlyPersistent<V> : IEnumerable<KeyValuePair<string, V>>
|
||||
{
|
||||
V this[string key] { get; }
|
||||
|
||||
/// <summary>
|
||||
/// The directory for this dictionary to use.
|
||||
/// </summary>
|
||||
string MapDirectory { get; }
|
||||
int Count { get; }
|
||||
IEnumerable<V> Values { get; }
|
||||
IEnumerable<string> Keys { get; }
|
||||
|
||||
bool ContainsKey(string key);
|
||||
|
||||
/// <summary>
|
||||
/// The path to the data representing a specific key.
|
||||
@ -15,5 +24,6 @@ namespace GameServiceWarden.Core.Persistence
|
||||
/// <param name="key">The key to get the path for.</param>
|
||||
/// <returns>A <see cref="string"/> representing the key.</returns>
|
||||
string GetPathForKey(string key);
|
||||
bool TryGetValue(string key, [MaybeNullWhen(false)] out V value);
|
||||
}
|
||||
}
|
@ -1,19 +0,0 @@
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace GameServiceWarden.Core.Persistence
|
||||
{
|
||||
public interface IReadOnlyPersistentDictionary<V> : IReadOnlyDictionary<string, V>
|
||||
{
|
||||
/// <summary>
|
||||
/// The directory for this dictionary to use.
|
||||
/// </summary>
|
||||
string MapDirectory { get; }
|
||||
|
||||
/// <summary>
|
||||
/// The path to the data representing a specific key.
|
||||
/// </summary>
|
||||
/// <param name="key">The key to get the path for.</param>
|
||||
/// <returns>A <see cref="string"/> representing the key.</returns>
|
||||
string GetPathForKey(string key);
|
||||
}
|
||||
}
|
@ -1,6 +1,6 @@
|
||||
<mxfile host="65bd71144e" pages="2">
|
||||
<diagram id="LHR7ubqCPd17_LyHkaH9" name="Structure">
|
||||
<mxGraphModel dx="1113" dy="480" 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="574" dy="229" 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"/>
|
||||
@ -53,7 +53,7 @@
|
||||
<mxCell id="dmd0HlDYcxYugIlahWj0-13" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;sketch=1;" parent="dmd0HlDYcxYugIlahWj0-11" vertex="1">
|
||||
<mxGeometry y="80" width="561" height="8" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="dmd0HlDYcxYugIlahWj0-14" value="+ CreateService(serviceName: string, assemblyName: string, moduleName: string): void + DeleteService(serviceName: string): void + GetModuleNames(): IEnumerable<string> + GetServiceNames(): IReadOnlyCollection<string> + GetServiceOptions(serviceName: string): IEnumerable<string> + GetServiceOptionValue(serviceName: string, optionName: string): IEnumerable<string> + SetServiceOptionValue(serviceName: string, optionName: string, string: value): bool + GetServiceState(serviceName: string): ServiceState + StartService(serviceName: string): void + StopService(serviceName: string): void + ExecuteCommand(serviceName: string, command: string): void + GetServiceConsoleStream(): Stream + ExecuteServiceAction(serviceAction: serviceAction): void" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;sketch=1;" parent="dmd0HlDYcxYugIlahWj0-11" vertex="1">
|
||||
<mxCell id="dmd0HlDYcxYugIlahWj0-14" value="+ CreateService(serviceName: string, assemblyName: string, moduleName: string): void + DeleteService(serviceName: string): void + GetModuleNames(): IEnumerable<string> + GetServiceNames(): IEnumerable<string> + GetServiceOptions(serviceName: string): IEnumerable<string> + GetServiceOptionValue(serviceName: string, optionName: string): IEnumerable<string> + SetServiceOptionValue(serviceName: string, optionName: string, string: value): bool + GetServiceState(serviceName: string): ServiceState + StartService(serviceName: string): void + StopService(serviceName: string): void + ExecuteCommand(serviceName: string, command: string): void + GetServiceConsoleStream(): Stream + ExecuteServiceAction(serviceAction: serviceAction): void" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;sketch=1;" parent="dmd0HlDYcxYugIlahWj0-11" vertex="1">
|
||||
<mxGeometry y="88" width="561" height="212" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="dmd0HlDYcxYugIlahWj0-38" value="<<Interface>> ITextCommand" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=40;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;sketch=1;" parent="1" vertex="1">
|
||||
@ -214,348 +214,348 @@
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
<diagram id="gj0qHRc3eh050ABAey3g" name="Data-Flow">
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxGraphModel dx="1216" dy="740" 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="jVG6p58vlRYGO9X4wXeX-0"/>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxCell id="jVG6p58vlRYGO9X4wXeX-1" parent="jVG6p58vlRYGO9X4wXeX-0"/>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxCell id="28FAlPysTx9DMYvLwa-2-21" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.3333333333333333;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0;entryY=0.75;entryDx=0;entryDy=0;endArrow=open;endFill=0;fillColor=#1ba1e2;strokeColor=#006EAF;sketch=1;" parent="jVG6p58vlRYGO9X4wXeX-1" source="jVG6p58vlRYGO9X4wXeX-2" target="jVG6p58vlRYGO9X4wXeX-3" edge="1">
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
</mxCell>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxCell id="jVG6p58vlRYGO9X4wXeX-2" value="Actor" style="shape=umlActor;verticalLabelPosition=bottom;verticalAlign=top;html=1;outlineConnect=0;sketch=1;" parent="jVG6p58vlRYGO9X4wXeX-1" vertex="1">
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxGeometry x="10" y="300" width="30" height="60" as="geometry"/>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
</mxCell>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxCell id="jVG6p58vlRYGO9X4wXeX-12" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;endArrow=open;endFill=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;fillColor=#1ba1e2;strokeColor=#006EAF;sketch=1;" parent="jVG6p58vlRYGO9X4wXeX-1" source="jVG6p58vlRYGO9X4wXeX-3" target="jVG6p58vlRYGO9X4wXeX-4" edge="1">
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
</mxCell>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxCell id="28FAlPysTx9DMYvLwa-2-22" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0.25;exitDx=0;exitDy=0;entryX=0.75;entryY=0.1;entryDx=0;entryDy=0;entryPerimeter=0;endArrow=open;endFill=0;fillColor=#1ba1e2;strokeColor=#006EAF;sketch=1;" parent="jVG6p58vlRYGO9X4wXeX-1" source="jVG6p58vlRYGO9X4wXeX-3" target="jVG6p58vlRYGO9X4wXeX-2" edge="1">
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
</mxCell>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxCell id="345FJoVc2gbAayMsQlD7-0" value="Use" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.25;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0.75;entryDx=0;entryDy=0;dashed=1;endArrow=open;endFill=0;sketch=1;" parent="jVG6p58vlRYGO9X4wXeX-1" source="jVG6p58vlRYGO9X4wXeX-3" target="jVG6p58vlRYGO9X4wXeX-4" edge="1">
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
</mxCell>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxCell id="345FJoVc2gbAayMsQlD7-6" value="Use" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.25;exitY=0;exitDx=0;exitDy=0;entryX=0;entryY=0.25;entryDx=0;entryDy=0;dashed=1;endArrow=open;endFill=0;sketch=1;" parent="jVG6p58vlRYGO9X4wXeX-1" source="jVG6p58vlRYGO9X4wXeX-3" target="28FAlPysTx9DMYvLwa-2-7" edge="1">
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
</mxCell>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxCell id="jVG6p58vlRYGO9X4wXeX-3" value="Console View" style="whiteSpace=wrap;html=1;sketch=1;" parent="jVG6p58vlRYGO9X4wXeX-1" vertex="1">
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxGeometry x="80" y="300" width="120" height="60" as="geometry"/>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
</mxCell>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxCell id="jVG6p58vlRYGO9X4wXeX-13" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;endArrow=open;endFill=0;fillColor=#1ba1e2;strokeColor=#006EAF;sketch=1;" parent="jVG6p58vlRYGO9X4wXeX-1" source="jVG6p58vlRYGO9X4wXeX-4" target="jVG6p58vlRYGO9X4wXeX-5" edge="1">
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
</mxCell>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxCell id="345FJoVc2gbAayMsQlD7-2" value="Use" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.75;exitDx=0;exitDy=0;entryX=0;entryY=0.75;entryDx=0;entryDy=0;dashed=1;endArrow=open;endFill=0;sketch=1;" parent="jVG6p58vlRYGO9X4wXeX-1" source="jVG6p58vlRYGO9X4wXeX-4" target="jVG6p58vlRYGO9X4wXeX-5" edge="1">
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
</mxCell>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxCell id="jVG6p58vlRYGO9X4wXeX-4" value="string command (request)" style="whiteSpace=wrap;html=1;sketch=1;" parent="jVG6p58vlRYGO9X4wXeX-1" vertex="1">
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxGeometry x="260" y="482.5" width="120" height="60" as="geometry"/>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
</mxCell>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxCell id="jVG6p58vlRYGO9X4wXeX-8" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=1;entryDx=0;entryDy=0;dashed=1;endArrow=block;endFill=0;sketch=1;" parent="jVG6p58vlRYGO9X4wXeX-1" source="jVG6p58vlRYGO9X4wXeX-5" target="jVG6p58vlRYGO9X4wXeX-7" edge="1">
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
</mxCell>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxCell id="28FAlPysTx9DMYvLwa-2-3" value="Use" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.75;exitY=0;exitDx=0;exitDy=0;entryX=0.75;entryY=1;entryDx=0;entryDy=0;endArrow=open;endFill=0;dashed=1;sketch=1;" parent="jVG6p58vlRYGO9X4wXeX-1" source="jVG6p58vlRYGO9X4wXeX-5" target="jVG6p58vlRYGO9X4wXeX-7" edge="1">
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
</mxCell>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxCell id="UY-EM7-1ECCvWtENr50b-18" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;endArrow=open;endFill=0;strokeColor=#006EAF;fillColor=#1ba1e2;sketch=1;" parent="jVG6p58vlRYGO9X4wXeX-1" source="jVG6p58vlRYGO9X4wXeX-5" target="jVG6p58vlRYGO9X4wXeX-9" edge="1">
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
</mxCell>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxCell id="jVG6p58vlRYGO9X4wXeX-5" value="MainController" style="whiteSpace=wrap;html=1;sketch=1;" parent="jVG6p58vlRYGO9X4wXeX-1" vertex="1">
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxGeometry x="420" y="482.5" width="120" height="60" as="geometry"/>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
</mxCell>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxCell id="jVG6p58vlRYGO9X4wXeX-6" value="http://www.plainionist.net/Implementing-Clean-Architecture-Controller-Presenter/" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;sketch=1;" parent="jVG6p58vlRYGO9X4wXeX-1" vertex="1">
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxGeometry y="840" width="480" height="20" as="geometry"/>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
</mxCell>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxCell id="jVG6p58vlRYGO9X4wXeX-7" value="&lt;&lt;Interface&gt;&gt;<br>ICommand" style="whiteSpace=wrap;html=1;sketch=1;" parent="jVG6p58vlRYGO9X4wXeX-1" vertex="1">
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxGeometry x="420" y="372.5" width="120" height="60" as="geometry"/>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
</mxCell>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxCell id="jVG6p58vlRYGO9X4wXeX-10" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;dashed=1;endArrow=block;endFill=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;sketch=1;" parent="jVG6p58vlRYGO9X4wXeX-1" source="jVG6p58vlRYGO9X4wXeX-9" target="jVG6p58vlRYGO9X4wXeX-7" edge="1">
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
</mxCell>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxCell id="UY-EM7-1ECCvWtENr50b-8" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.25;entryDx=0;entryDy=0;endArrow=open;endFill=0;strokeColor=#006EAF;fillColor=#1ba1e2;exitX=1;exitY=0.5;exitDx=0;exitDy=0;sketch=1;" parent="jVG6p58vlRYGO9X4wXeX-1" source="jVG6p58vlRYGO9X4wXeX-9" target="UY-EM7-1ECCvWtENr50b-1" edge="1">
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxGeometry relative="1" as="geometry">
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxPoint x="809.9999999999998" y="512.5000000000002" as="sourcePoint"/>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
</mxGeometry>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
</mxCell>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxCell id="345FJoVc2gbAayMsQlD7-3" value="Use" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.25;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;dashed=1;endArrow=open;endFill=0;sketch=1;" parent="jVG6p58vlRYGO9X4wXeX-1" source="jVG6p58vlRYGO9X4wXeX-9" target="UY-EM7-1ECCvWtENr50b-2" edge="1">
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
</mxCell>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxCell id="345FJoVc2gbAayMsQlD7-4" value="Use" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.75;exitDx=0;exitDy=0;entryX=0;entryY=0.75;entryDx=0;entryDy=0;dashed=1;endArrow=open;endFill=0;sketch=1;" parent="jVG6p58vlRYGO9X4wXeX-1" source="jVG6p58vlRYGO9X4wXeX-9" target="UY-EM7-1ECCvWtENr50b-1" edge="1">
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
</mxCell>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxCell id="jVG6p58vlRYGO9X4wXeX-9" value="ServiceController" style="whiteSpace=wrap;html=1;sketch=1;" parent="jVG6p58vlRYGO9X4wXeX-1" vertex="1">
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxGeometry x="575" y="482.5" width="120" height="60" as="geometry"/>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
</mxCell>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxCell id="UY-EM7-1ECCvWtENr50b-4" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=none;sketch=1;" parent="jVG6p58vlRYGO9X4wXeX-1" source="28FAlPysTx9DMYvLwa-2-1" target="UY-EM7-1ECCvWtENr50b-2" edge="1">
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
</mxCell>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxCell id="UY-EM7-1ECCvWtENr50b-5" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;dashed=1;endArrow=block;endFill=0;strokeColor=#f0f0f0;sketch=1;" parent="jVG6p58vlRYGO9X4wXeX-1" source="28FAlPysTx9DMYvLwa-2-1" target="UY-EM7-1ECCvWtENr50b-2" edge="1">
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
</mxCell>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxCell id="UY-EM7-1ECCvWtENr50b-7" value="Use" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=1.008;entryY=0.625;entryDx=0;entryDy=0;entryPerimeter=0;endArrow=open;endFill=0;strokeColor=#f0f0f0;dashed=1;sketch=1;" parent="jVG6p58vlRYGO9X4wXeX-1" source="28FAlPysTx9DMYvLwa-2-1" target="UY-EM7-1ECCvWtENr50b-1" edge="1">
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxGeometry relative="1" as="geometry">
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<Array as="points">
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxPoint x="960" y="338"/>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxPoint x="960" y="580"/>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
</Array>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
</mxGeometry>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
</mxCell>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxCell id="UY-EM7-1ECCvWtENr50b-16" value="Use" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=1;entryDx=0;entryDy=0;endArrow=open;endFill=0;dashed=1;sketch=1;" parent="jVG6p58vlRYGO9X4wXeX-1" source="28FAlPysTx9DMYvLwa-2-1" target="UY-EM7-1ECCvWtENr50b-11" edge="1">
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
</mxCell>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxCell id="345FJoVc2gbAayMsQlD7-7" value="Use" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=1;entryY=0.25;entryDx=0;entryDy=0;dashed=1;endArrow=open;endFill=0;sketch=1;" parent="jVG6p58vlRYGO9X4wXeX-1" source="28FAlPysTx9DMYvLwa-2-1" target="UY-EM7-1ECCvWtENr50b-10" edge="1">
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxGeometry relative="1" as="geometry">
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<Array as="points">
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxPoint x="960" y="338"/>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxPoint x="960" y="83"/>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
</Array>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
</mxGeometry>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
</mxCell>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxCell id="28FAlPysTx9DMYvLwa-2-1" value="ServiceManager" style="whiteSpace=wrap;html=1;sketch=1;" parent="jVG6p58vlRYGO9X4wXeX-1" vertex="1">
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxGeometry x="800" y="307.5" width="120" height="60" as="geometry"/>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
</mxCell>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxCell id="28FAlPysTx9DMYvLwa-2-9" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;endArrow=open;endFill=0;fillColor=#1ba1e2;strokeColor=#006EAF;sketch=1;" parent="jVG6p58vlRYGO9X4wXeX-1" source="28FAlPysTx9DMYvLwa-2-5" target="tM_Gde3HH8YiZ2frBV5J-0" edge="1">
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
</mxCell>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxCell id="UY-EM7-1ECCvWtENr50b-12" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;endArrow=block;endFill=0;strokeColor=#f0f0f0;dashed=1;exitX=1;exitY=0.75;exitDx=0;exitDy=0;sketch=1;" parent="jVG6p58vlRYGO9X4wXeX-1" source="28FAlPysTx9DMYvLwa-2-5" target="UY-EM7-1ECCvWtENr50b-11" edge="1">
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
</mxCell>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxCell id="UY-EM7-1ECCvWtENr50b-13" value="Use" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.75;entryDx=0;entryDy=0;endArrow=open;endFill=0;strokeColor=#f0f0f0;dashed=1;sketch=1;" parent="jVG6p58vlRYGO9X4wXeX-1" source="28FAlPysTx9DMYvLwa-2-5" target="UY-EM7-1ECCvWtENr50b-10" edge="1">
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
</mxCell>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxCell id="tM_Gde3HH8YiZ2frBV5J-3" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;dashed=1;endArrow=block;endFill=0;sketch=1;" parent="jVG6p58vlRYGO9X4wXeX-1" source="28FAlPysTx9DMYvLwa-2-5" target="tM_Gde3HH8YiZ2frBV5J-1" edge="1">
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
</mxCell>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxCell id="28FAlPysTx9DMYvLwa-2-5" value="ServicePresenter" style="whiteSpace=wrap;html=1;sketch=1;" parent="jVG6p58vlRYGO9X4wXeX-1" vertex="1">
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxGeometry x="575" y="122.5" width="120" height="60" as="geometry"/>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
</mxCell>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxCell id="28FAlPysTx9DMYvLwa-2-8" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;endArrow=open;endFill=0;fillColor=#1ba1e2;strokeColor=#006EAF;sketch=1;" parent="jVG6p58vlRYGO9X4wXeX-1" source="28FAlPysTx9DMYvLwa-2-7" target="jVG6p58vlRYGO9X4wXeX-3" edge="1">
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
</mxCell>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxCell id="tM_Gde3HH8YiZ2frBV5J-5" value="Use" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;dashed=1;endArrow=open;endFill=0;sketch=1;" parent="jVG6p58vlRYGO9X4wXeX-1" source="28FAlPysTx9DMYvLwa-2-7" target="tM_Gde3HH8YiZ2frBV5J-0" edge="1">
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
</mxCell>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxCell id="28FAlPysTx9DMYvLwa-2-7" value="String Output" style="whiteSpace=wrap;html=1;sketch=1;" parent="jVG6p58vlRYGO9X4wXeX-1" vertex="1">
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxGeometry x="260" y="122.5" width="120" height="60" as="geometry"/>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
</mxCell>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxCell id="UY-EM7-1ECCvWtENr50b-1" value="ServiceAction &lt;DS&gt;" style="whiteSpace=wrap;html=1;sketch=1;" parent="jVG6p58vlRYGO9X4wXeX-1" vertex="1">
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxGeometry x="800" y="542.5" width="120" height="60" as="geometry"/>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
</mxCell>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxCell id="UY-EM7-1ECCvWtENr50b-6" value="Use" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;endArrow=open;endFill=0;strokeColor=#f0f0f0;dashed=1;sketch=1;" parent="jVG6p58vlRYGO9X4wXeX-1" source="UY-EM7-1ECCvWtENr50b-2" target="UY-EM7-1ECCvWtENr50b-1" edge="1">
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
</mxCell>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxCell id="UY-EM7-1ECCvWtENr50b-20" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.25;exitDx=0;exitDy=0;entryX=1;entryY=0.75;entryDx=0;entryDy=0;endArrow=open;endFill=0;strokeColor=#006EAF;fillColor=#1ba1e2;sketch=1;" parent="jVG6p58vlRYGO9X4wXeX-1" source="UY-EM7-1ECCvWtENr50b-1" target="28FAlPysTx9DMYvLwa-2-1" edge="1">
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
</mxCell>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxCell id="UY-EM7-1ECCvWtENr50b-2" value="&lt;&lt;Interface&gt;&gt;<br>IServiceManipulator" style="whiteSpace=wrap;html=1;sketch=1;" parent="jVG6p58vlRYGO9X4wXeX-1" vertex="1">
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxGeometry x="800" y="432.5" width="120" height="60" as="geometry"/>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
</mxCell>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxCell id="UY-EM7-1ECCvWtENr50b-22" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=1;entryY=0.25;entryDx=0;entryDy=0;endArrow=open;endFill=0;strokeColor=#006EAF;fillColor=#1ba1e2;sketch=1;" parent="jVG6p58vlRYGO9X4wXeX-1" source="UY-EM7-1ECCvWtENr50b-10" target="28FAlPysTx9DMYvLwa-2-5" edge="1">
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
</mxCell>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxCell id="UY-EM7-1ECCvWtENr50b-10" value="ServicesResult &lt;DS&gt;" style="whiteSpace=wrap;html=1;fillColor=none;sketch=1;" parent="jVG6p58vlRYGO9X4wXeX-1" vertex="1">
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxGeometry x="800" y="67.5" width="120" height="60" as="geometry"/>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
</mxCell>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxCell id="UY-EM7-1ECCvWtENr50b-14" value="Use" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=1;entryDx=0;entryDy=0;endArrow=open;endFill=0;strokeColor=#f0f0f0;dashed=1;sketch=1;" parent="jVG6p58vlRYGO9X4wXeX-1" source="UY-EM7-1ECCvWtENr50b-11" target="UY-EM7-1ECCvWtENr50b-10" edge="1">
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
</mxCell>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxCell id="UY-EM7-1ECCvWtENr50b-21" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.25;exitDx=0;exitDy=0;entryX=1;entryY=0.75;entryDx=0;entryDy=0;endArrow=open;endFill=0;strokeColor=#006EAF;fillColor=#1ba1e2;sketch=1;" parent="jVG6p58vlRYGO9X4wXeX-1" source="28FAlPysTx9DMYvLwa-2-1" target="UY-EM7-1ECCvWtENr50b-10" edge="1">
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
</mxCell>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxCell id="UY-EM7-1ECCvWtENr50b-11" value="&lt;&lt;Interface&gt;&gt;<br>IServicesMonitor" style="whiteSpace=wrap;html=1;fillColor=none;sketch=1;" parent="jVG6p58vlRYGO9X4wXeX-1" vertex="1">
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxGeometry x="800" y="167.5" width="120" height="60" as="geometry"/>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
</mxCell>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxCell id="UY-EM7-1ECCvWtENr50b-70" value="" style="line;strokeWidth=2;direction=south;html=1;fillColor=none;sketch=1;" parent="jVG6p58vlRYGO9X4wXeX-1" vertex="1">
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxGeometry x="220" y="50" width="10" height="570" as="geometry"/>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
</mxCell>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxCell id="UY-EM7-1ECCvWtENr50b-71" value="" style="line;strokeWidth=2;direction=south;html=1;fillColor=none;sketch=1;" parent="jVG6p58vlRYGO9X4wXeX-1" vertex="1">
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxGeometry x="760" y="50" width="10" height="570" as="geometry"/>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
</mxCell>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxCell id="UY-EM7-1ECCvWtENr50b-73" value="Page 191 (Chapter 22) of Clean Architecture" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;sketch=1;" parent="jVG6p58vlRYGO9X4wXeX-1" vertex="1">
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxGeometry y="870" width="480" height="20" as="geometry"/>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
</mxCell>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxCell id="tM_Gde3HH8YiZ2frBV5J-2" 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;dashed=1;endArrow=block;endFill=0;sketch=1;" parent="jVG6p58vlRYGO9X4wXeX-1" source="tM_Gde3HH8YiZ2frBV5J-0" target="tM_Gde3HH8YiZ2frBV5J-1" edge="1">
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
</mxCell>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxCell id="tM_Gde3HH8YiZ2frBV5J-4" value="Use" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.75;exitY=0;exitDx=0;exitDy=0;entryX=0.75;entryY=1;entryDx=0;entryDy=0;dashed=1;endArrow=open;endFill=0;sketch=1;" parent="jVG6p58vlRYGO9X4wXeX-1" source="tM_Gde3HH8YiZ2frBV5J-0" target="tM_Gde3HH8YiZ2frBV5J-1" edge="1">
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
</mxCell>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxCell id="tM_Gde3HH8YiZ2frBV5J-0" value="MainPresenter" style="html=1;dashed=0;whitespace=wrap;sketch=1;" parent="jVG6p58vlRYGO9X4wXeX-1" vertex="1">
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxGeometry x="420" y="122.5" width="110" height="60" as="geometry"/>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
</mxCell>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxCell id="tM_Gde3HH8YiZ2frBV5J-1" value="&lt;&lt;Interface&gt;&gt;<br>IConsoleOutput" style="html=1;dashed=0;whitespace=wrap;sketch=1;" parent="jVG6p58vlRYGO9X4wXeX-1" vertex="1">
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
<mxGeometry x="420" y="20" width="110" height="50" as="geometry"/>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
</mxCell>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
</root>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
</mxGraphModel>
|
||||

 
 
 
 
 
 







|
||||

 
 
 
 
 
 
 








|
||||
</diagram>
|
||||
</mxfile>
|
@ -2,11 +2,12 @@ using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.IO;
|
||||
using GameServiceWarden.Core.Games;
|
||||
using GameServiceWarden.Core.Persistence;
|
||||
|
||||
namespace GameServiceWarden.Core.Tests.Modules
|
||||
{
|
||||
public class FakePersistentDictionary<V> : IPersistentDictionary<V>, IReadOnlyPersistentDictionary<V>
|
||||
public class FakePersistentDictionary<V> : IPersistent<V>
|
||||
{
|
||||
private IDictionary<string, V> backing = new Dictionary<string, V>();
|
||||
public V this[string key] { get { return backing[key]; } set { backing[key] = value; } }
|
||||
@ -21,9 +22,9 @@ namespace GameServiceWarden.Core.Tests.Modules
|
||||
|
||||
public bool IsReadOnly { get { return false; } }
|
||||
|
||||
IEnumerable<string> IReadOnlyDictionary<string, V>.Keys { get { return backing.Keys; } }
|
||||
IEnumerable<V> IReadOnlyPersistent<V>.Values => backing.Values;
|
||||
|
||||
IEnumerable<V> IReadOnlyDictionary<string, V>.Values { get { return backing.Values; } }
|
||||
IEnumerable<string> IReadOnlyPersistent<V>.Keys => backing.Keys;
|
||||
|
||||
public void Add(string key, V value)
|
||||
{
|
||||
@ -35,26 +36,21 @@ namespace GameServiceWarden.Core.Tests.Modules
|
||||
backing.Add(item);
|
||||
}
|
||||
|
||||
public void Add(string key, GameServiceInfo value)
|
||||
{
|
||||
throw new System.NotImplementedException();
|
||||
}
|
||||
|
||||
public void Clear()
|
||||
{
|
||||
backing.Clear();
|
||||
}
|
||||
|
||||
public bool Contains(KeyValuePair<string, V> item)
|
||||
{
|
||||
return backing.Contains(item);
|
||||
}
|
||||
|
||||
public bool ContainsKey(string key)
|
||||
{
|
||||
return backing.ContainsKey(key);
|
||||
}
|
||||
|
||||
public void CopyTo(KeyValuePair<string, V>[] array, int arrayIndex)
|
||||
{
|
||||
backing.CopyTo(array, arrayIndex);
|
||||
}
|
||||
|
||||
public IEnumerator<KeyValuePair<string, V>> GetEnumerator()
|
||||
{
|
||||
return backing.GetEnumerator();
|
||||
|
Reference in New Issue
Block a user