From e9a1c2e2286c2f138a4d92a675cd2adbef88c97e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Peter=20Mal=C3=ADk?=
Date: Sat, 1 Jun 2019 22:58:59 +0200
Subject: [PATCH 01/17] Enhance ClientRating
---
.../Models/Clients/AirTrafficControllerBuilder.cs | 2 +-
.../MalikP.IVAO.Library/Models/Clients/ClientWithRating.cs | 2 ++
.../MalikP.IVAO.Library/Models/Clients/PilotBuilder.cs | 2 +-
3 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Clients/AirTrafficControllerBuilder.cs b/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Clients/AirTrafficControllerBuilder.cs
index 1608cac..69545a9 100644
--- a/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Clients/AirTrafficControllerBuilder.cs
+++ b/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Clients/AirTrafficControllerBuilder.cs
@@ -57,7 +57,7 @@ public static AirTrafficControllerBuilder FromModel(AirTrafficController model)
.WithClientType(model.ClientType)
.WithAdministrativeVersion(model.AdministrativeVersion)
.WithCallsign(model.Callsign)
- .WithClientRating(model.ClientRating)
+ .WithClientRating((int)model.ClientRating)
.WithConnectionTime(model.ConnectionTime)
.WithLocation(model.Location == null ? model.Location : (GPS)model.Location.Clone())
.WithName(model.Name)
diff --git a/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Clients/ClientWithRating.cs b/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Clients/ClientWithRating.cs
index a740a0a..ec1fd13 100644
--- a/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Clients/ClientWithRating.cs
+++ b/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Clients/ClientWithRating.cs
@@ -72,5 +72,7 @@ protected ClientWithRating()
[DataMember]
public TRating Rating { get; private set; }
+
+ public new TRating ClientRating => (TRating)Enum.Parse(typeof(TRating), base.ClientRating.ToString());
}
}
diff --git a/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Clients/PilotBuilder.cs b/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Clients/PilotBuilder.cs
index 02ccf07..be13ef7 100644
--- a/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Clients/PilotBuilder.cs
+++ b/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Clients/PilotBuilder.cs
@@ -56,7 +56,7 @@ public static PilotBuilder FromModel(Pilot model)
.WithClientType(model.ClientType)
.WithAdministrativeVersion(model.AdministrativeVersion)
.WithCallsign(model.Callsign)
- .WithClientRating(model.ClientRating)
+ .WithClientRating((int)model.ClientRating)
.WithConnectionTime(model.ConnectionTime)
.WithLocation(model.Location == null ? model.Location : (GPS)model.Location.Clone())
.WithName(model.Name)
From 472dad919336e6c157129abfdb9537450fd35641 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Peter=20Mal=C3=ADk?=
Date: Sat, 1 Jun 2019 23:11:48 +0200
Subject: [PATCH 02/17] Change server string for Server type
---
.../Models/ClientsATCDataModelTest.cs | 20 +++++++++----------
.../Models/ClientsFollowMeDataModelTest.cs | 20 +++++++++----------
.../Models/ClientsPilotDataModelTest.cs | 20 +++++++++----------
.../Common/Parsers/AbstractClientFactory.cs | 11 +++++++++-
.../Models/Clients/AbstractClientBuilder.cs | 5 +++--
.../Models/Clients/AirTrafficController.cs | 3 ++-
.../Clients/AirTrafficControllerBuilder.cs | 3 ++-
.../Models/Clients/Client.cs | 11 +++++-----
.../Models/Clients/ClientWithRating.cs | 3 ++-
.../Models/Clients/FollowMe.cs | 3 ++-
.../Models/Clients/FollowMeBuilder.cs | 3 ++-
.../Models/Clients/Pilot.cs | 3 ++-
.../Models/Clients/PilotBuilder.cs | 3 ++-
13 files changed, 63 insertions(+), 45 deletions(-)
diff --git a/src/MalikP. IVAO Library/MalikP.IVAO.Library.Test/Models/ClientsATCDataModelTest.cs b/src/MalikP. IVAO Library/MalikP.IVAO.Library.Test/Models/ClientsATCDataModelTest.cs
index 7e194d9..54e1a5c 100644
--- a/src/MalikP. IVAO Library/MalikP.IVAO.Library.Test/Models/ClientsATCDataModelTest.cs
+++ b/src/MalikP. IVAO Library/MalikP.IVAO.Library.Test/Models/ClientsATCDataModelTest.cs
@@ -30,7 +30,7 @@ public void Equals_WhenTwoSameInstancesAreCreated_ThenInstancesAreEqual()
.WithName("name")
.WithProtocol("protocol")
.WithRating(ATCRating.SeniorController)
- .WithServer("server")
+ .WithServer(null)
.WithSoftwareName("IVAC")
.WithSoftwareVersion("1.2.3")
.WithVID("123456")
@@ -66,7 +66,7 @@ public void Equals_WhenTwoDifferentInstancesAreCreated_ThenInstancesAreNotEqual(
.WithName("name")
.WithProtocol("protocol")
.WithRating(ATCRating.SeniorController)
- .WithServer("server")
+ .WithServer(null)
.WithSoftwareName("IVAC")
.WithSoftwareVersion("1.2.3")
.WithVID("123456")
@@ -81,7 +81,7 @@ public void Equals_WhenTwoDifferentInstancesAreCreated_ThenInstancesAreNotEqual(
.WithName("name")
.WithProtocol("protocol")
.WithRating(ATCRating.SeniorController)
- .WithServer("server")
+ .WithServer(null)
.WithSoftwareName("IVAC")
.WithSoftwareVersion("1.2.3")
.WithVID("123456")
@@ -117,7 +117,7 @@ public void GetHashCode_WhenTwoSameInstancesAreCreated_ThenInstanceHashCodesAreE
.WithName("name")
.WithProtocol("protocol")
.WithRating(ATCRating.SeniorController)
- .WithServer("server")
+ .WithServer(null)
.WithSoftwareName("IVAC")
.WithSoftwareVersion("1.2.3")
.WithVID("123456")
@@ -154,7 +154,7 @@ public void GetHashCode_WhenTwoDifferentInstancesAreCreated_ThenInstanceHashCode
.WithName("name")
.WithProtocol("protocol")
.WithRating(ATCRating.SeniorController)
- .WithServer("server")
+ .WithServer(null)
.WithSoftwareName("IVAC")
.WithSoftwareVersion("1.2.3")
.WithVID("123456")
@@ -169,7 +169,7 @@ public void GetHashCode_WhenTwoDifferentInstancesAreCreated_ThenInstanceHashCode
.WithName("name")
.WithProtocol("protocol")
.WithRating(ATCRating.SeniorController)
- .WithServer("server")
+ .WithServer(null)
.WithSoftwareName("IVAC")
.WithSoftwareVersion("1.2.3")
.WithVID("123456")
@@ -206,7 +206,7 @@ public void Equals_WhenInstanceIsDeseraializeAndSerializedBack_ThenInstancesAreE
.WithName("name")
.WithProtocol("protocol")
.WithRating(ATCRating.SeniorController)
- .WithServer("server")
+ .WithServer(null)
.WithSoftwareName("IVAC")
.WithSoftwareVersion("1.2.3")
.WithVID("123456")
@@ -245,7 +245,7 @@ public void GetHashCode_WhenInstanceIsDeseraializeAndSerializedBack_ThenInstance
.WithName("name")
.WithProtocol("protocol")
.WithRating(ATCRating.SeniorController)
- .WithServer("server")
+ .WithServer(null)
.WithSoftwareName("IVAC")
.WithSoftwareVersion("1.2.3")
.WithVID("123456")
@@ -285,7 +285,7 @@ public void Clone_WhenInstanceCloned_ThenInstancesHashCodesAreEqual()
.WithName("name")
.WithProtocol("protocol")
.WithRating(ATCRating.SeniorController)
- .WithServer("server")
+ .WithServer(null)
.WithSoftwareName("IVAC")
.WithSoftwareVersion("1.2.3")
.WithVID("123456")
@@ -324,7 +324,7 @@ public void Clone_WhenInstanceCloned_ThenInstancesAreEqual()
.WithName("name")
.WithProtocol("protocol")
.WithRating(ATCRating.SeniorController)
- .WithServer("server")
+ .WithServer(null)
.WithSoftwareName("IVAC")
.WithSoftwareVersion("1.2.3")
.WithVID("123456")
diff --git a/src/MalikP. IVAO Library/MalikP.IVAO.Library.Test/Models/ClientsFollowMeDataModelTest.cs b/src/MalikP. IVAO Library/MalikP.IVAO.Library.Test/Models/ClientsFollowMeDataModelTest.cs
index 1d33c50..a892c3d 100644
--- a/src/MalikP. IVAO Library/MalikP.IVAO.Library.Test/Models/ClientsFollowMeDataModelTest.cs
+++ b/src/MalikP. IVAO Library/MalikP.IVAO.Library.Test/Models/ClientsFollowMeDataModelTest.cs
@@ -25,7 +25,7 @@ public void Equals_WhenTwoSameInstancesAreCreated_ThenInstancesAreEqual()
.WithLocation(null)
.WithName("name")
.WithProtocol("protocol")
- .WithServer("server")
+ .WithServer(null)
.WithSoftwareName("IVAC")
.WithSoftwareVersion("3.2.1.3")
.WithVID("1234567");
@@ -55,7 +55,7 @@ public void Equals_WhenTwoDifferentInstancesAreCreated_ThenInstancesAreNotEqual(
.WithLocation(null)
.WithName("name")
.WithProtocol("protocol")
- .WithServer("server")
+ .WithServer(null)
.WithSoftwareName("IVAC")
.WithSoftwareVersion("3.2.1.3")
.WithVID("1234567");
@@ -65,7 +65,7 @@ public void Equals_WhenTwoDifferentInstancesAreCreated_ThenInstancesAreNotEqual(
.WithCallsign("LZKZ_FOLLOW")
.WithName("name")
.WithProtocol("protocol")
- .WithServer("server")
+ .WithServer(null)
.WithSoftwareName("IVAC")
.WithSoftwareVersion("3.2.1.3")
.WithVID("1234567");
@@ -95,7 +95,7 @@ public void GetHashCode_WhenTwoSameInstancesAreCreated_ThenInstanceHashCodesAreE
.WithLocation(null)
.WithName("name")
.WithProtocol("protocol")
- .WithServer("server")
+ .WithServer(null)
.WithSoftwareName("IVAC")
.WithSoftwareVersion("3.2.1.3")
.WithVID("1234567");
@@ -126,7 +126,7 @@ public void GetHashCode_WhenTwoDifferentInstancesAreCreated_ThenInstanceHashCode
.WithLocation(null)
.WithName("name")
.WithProtocol("protocol")
- .WithServer("server")
+ .WithServer(null)
.WithSoftwareName("IVAC")
.WithSoftwareVersion("3.2.1.3")
.WithVID("1234567");
@@ -137,7 +137,7 @@ public void GetHashCode_WhenTwoDifferentInstancesAreCreated_ThenInstanceHashCode
.WithLocation(null)
.WithName("name")
.WithProtocol("protocol")
- .WithServer("server")
+ .WithServer(null)
.WithSoftwareName("IVAC")
.WithSoftwareVersion("3.2.1.3")
.WithVID("1234567");
@@ -168,7 +168,7 @@ public void Equals_WhenInstanceIsDeseraializeAndSerializedBack_ThenInstancesAreE
.WithLocation(null)
.WithName("name")
.WithProtocol("protocol")
- .WithServer("server")
+ .WithServer(null)
.WithSoftwareName("IVAC")
.WithSoftwareVersion("3.2.1.3")
.WithVID("1234567");
@@ -201,7 +201,7 @@ public void GetHashCode_WhenInstanceIsDeseraializeAndSerializedBack_ThenInstance
.WithLocation(null)
.WithName("name")
.WithProtocol("protocol")
- .WithServer("server")
+ .WithServer(null)
.WithSoftwareName("IVAC")
.WithSoftwareVersion("3.2.1.3")
.WithVID("1234567");
@@ -235,7 +235,7 @@ public void Clone_WhenInstanceCloned_ThenInstancesHashCodesAreEqual()
.WithLocation(null)
.WithName("name")
.WithProtocol("protocol")
- .WithServer("server")
+ .WithServer(null)
.WithSoftwareName("IVAC")
.WithSoftwareVersion("3.2.1.3")
.WithVID("1234567");
@@ -268,7 +268,7 @@ public void Clone_WhenInstanceCloned_ThenInstancesAreEqual()
.WithLocation(null)
.WithName("name")
.WithProtocol("protocol")
- .WithServer("server")
+ .WithServer(null)
.WithSoftwareName("IVAC")
.WithSoftwareVersion("3.2.1.3")
.WithVID("1234567");
diff --git a/src/MalikP. IVAO Library/MalikP.IVAO.Library.Test/Models/ClientsPilotDataModelTest.cs b/src/MalikP. IVAO Library/MalikP.IVAO.Library.Test/Models/ClientsPilotDataModelTest.cs
index 5d14779..2d66a1d 100644
--- a/src/MalikP. IVAO Library/MalikP.IVAO.Library.Test/Models/ClientsPilotDataModelTest.cs
+++ b/src/MalikP. IVAO Library/MalikP.IVAO.Library.Test/Models/ClientsPilotDataModelTest.cs
@@ -32,7 +32,7 @@ public void Equals_WhenTwoSameInstancesAreCreated_ThenInstancesAreEqual()
.WithPlaneMTL("mtl")
.WithProtocol("protocol")
.WithRating(PilotRating.AirlineTransportPilot)
- .WithServer("server")
+ .WithServer(null)
.WithSoftwareName("sw name")
.WithSoftwareVersion("1.2.3.4")
.WithTransponderCode("7200")
@@ -70,7 +70,7 @@ public void Equals_WhenTwoDifferentInstancesAreCreated_ThenInstancesAreNotEqual(
.WithPlaneMTL("mtl")
.WithProtocol("protocol")
.WithRating(PilotRating.AirlineTransportPilot)
- .WithServer("server")
+ .WithServer(null)
.WithSoftwareName("sw name")
.WithSoftwareVersion("1.2.3.4")
.WithTransponderCode("7200")
@@ -87,7 +87,7 @@ public void Equals_WhenTwoDifferentInstancesAreCreated_ThenInstancesAreNotEqual(
.WithHeading(222)
.WithProtocol("protocol")
.WithRating(PilotRating.AirlineTransportPilot)
- .WithServer("server")
+ .WithServer(null)
.WithSoftwareName("sw name")
.WithSoftwareVersion("1.2.3.4")
.WithTransponderCode("7200")
@@ -125,7 +125,7 @@ public void GetHashCode_WhenTwoSameInstancesAreCreated_ThenInstanceHashCodesAreE
.WithPlaneMTL("mtl")
.WithProtocol("protocol")
.WithRating(PilotRating.AirlineTransportPilot)
- .WithServer("server")
+ .WithServer(null)
.WithSoftwareName("sw name")
.WithSoftwareVersion("1.2.3.4")
.WithTransponderCode("7200")
@@ -164,7 +164,7 @@ public void GetHashCode_WhenTwoDifferentInstancesAreCreated_ThenInstanceHashCode
.WithPlaneMTL("mtl")
.WithProtocol("protocol")
.WithRating(PilotRating.AirlineTransportPilot)
- .WithServer("server")
+ .WithServer(null)
.WithSoftwareName("sw name")
.WithSoftwareVersion("1.2.3.4")
.WithTransponderCode("7200")
@@ -181,7 +181,7 @@ public void GetHashCode_WhenTwoDifferentInstancesAreCreated_ThenInstanceHashCode
.WithHeading(222)
.WithProtocol("protocol")
.WithRating(PilotRating.AirlineTransportPilot)
- .WithServer("server")
+ .WithServer(null)
.WithSoftwareName("sw name")
.WithSoftwareVersion("1.2.3.4")
.WithTransponderCode("7200")
@@ -220,7 +220,7 @@ public void Equals_WhenInstanceIsDeseraializeAndSerializedBack_ThenInstancesAreE
.WithPlaneMTL("mtl")
.WithProtocol("protocol")
.WithRating(PilotRating.AirlineTransportPilot)
- .WithServer("server")
+ .WithServer(null)
.WithSoftwareName("sw name")
.WithSoftwareVersion("1.2.3.4")
.WithTransponderCode("7200")
@@ -261,7 +261,7 @@ public void GetHashCode_WhenInstanceIsDeseraializeAndSerializedBack_ThenInstance
.WithPlaneMTL("mtl")
.WithProtocol("protocol")
.WithRating(PilotRating.AirlineTransportPilot)
- .WithServer("server")
+ .WithServer(null)
.WithSoftwareName("sw name")
.WithSoftwareVersion("1.2.3.4")
.WithTransponderCode("7200")
@@ -303,7 +303,7 @@ public void Clone_WhenInstanceCloned_ThenInstancesHashCodesAreEqual()
.WithPlaneMTL("mtl")
.WithProtocol("protocol")
.WithRating(PilotRating.AirlineTransportPilot)
- .WithServer("server")
+ .WithServer(null)
.WithSoftwareName("sw name")
.WithSoftwareVersion("1.2.3.4")
.WithTransponderCode("7200")
@@ -344,7 +344,7 @@ public void Clone_WhenInstanceCloned_ThenInstancesAreEqual()
.WithPlaneMTL("mtl")
.WithProtocol("protocol")
.WithRating(PilotRating.AirlineTransportPilot)
- .WithServer("server")
+ .WithServer(null)
.WithSoftwareName("sw name")
.WithSoftwareVersion("1.2.3.4")
.WithTransponderCode("7200")
diff --git a/src/MalikP. IVAO Library/MalikP.IVAO.Library/Common/Parsers/AbstractClientFactory.cs b/src/MalikP. IVAO Library/MalikP.IVAO.Library/Common/Parsers/AbstractClientFactory.cs
index bcc62c2..66c2ebc 100644
--- a/src/MalikP. IVAO Library/MalikP.IVAO.Library/Common/Parsers/AbstractClientFactory.cs
+++ b/src/MalikP. IVAO Library/MalikP.IVAO.Library/Common/Parsers/AbstractClientFactory.cs
@@ -32,6 +32,7 @@
using MalikP.IVAO.Library.Common.Parsers.DataExtractors.Client;
using MalikP.IVAO.Library.Models.Clients;
using MalikP.IVAO.Library.Models.Other;
+using MalikP.IVAO.Library.Models.Servers;
namespace MalikP.IVAO.Library.Common.Parsers
{
@@ -69,13 +70,14 @@ protected TBuilder AssignGeneralData(TBuilder builder, string[] rowDat
where TBuilder : AbstractClientBuilder
{
GPS location = GetLocation(rowData);
+ Server server = GetServer(rowData);
return builder
.WithCallsign(rowData[ClientIndex.All.Callsign])
.WithVID(rowData[ClientIndex.All.VID])
.WithName(rowData[ClientIndex.All.Name])
.WithLocation(location)
- .WithServer(rowData[ClientIndex.All.Server])
+ .WithServer(server)
.WithProtocol(rowData[ClientIndex.All.Protocol])
.WithConnectionTime(_ivaoStringService.IVAO_GetDateTime(rowData[ClientIndex.All.ConnectionTime]) ?? DateTime.MinValue)
.WithSoftwareName(rowData[ClientIndex.All.SoftwareName])
@@ -83,5 +85,12 @@ protected TBuilder AssignGeneralData(TBuilder builder, string[] rowDat
.WithAdministrativeVersion((AdministrativeRating)_ivaoStringService.IVAO_GetInt(rowData[ClientIndex.All.AdministrativeVersion]))
.WithClientRating(_ivaoStringService.IVAO_GetInt(rowData[ClientIndex.All.ClientRating]));
}
+
+ private Server GetServer(string[] rowData)
+ {
+ return ServerBuilder.Create()
+ .WithName(rowData[ClientIndex.All.Server])
+ .Build();
+ }
}
}
\ No newline at end of file
diff --git a/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Clients/AbstractClientBuilder.cs b/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Clients/AbstractClientBuilder.cs
index 49339d3..43f9e5f 100644
--- a/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Clients/AbstractClientBuilder.cs
+++ b/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Clients/AbstractClientBuilder.cs
@@ -29,6 +29,7 @@
using MalikP.IVAO.Library.Common.Enums;
using MalikP.IVAO.Library.Models.Other;
+using MalikP.IVAO.Library.Models.Servers;
namespace MalikP.IVAO.Library.Models.Clients
{
@@ -39,7 +40,7 @@ public abstract class AbstractClientBuilder
protected string name;
protected ClientType clientType;
protected GPS location;
- protected string server;
+ protected Server server;
protected string protocol;
protected DateTime connectionTime;
protected string softwareName;
@@ -77,7 +78,7 @@ public TBuilder WithLocation(GPS location)
return GetBuilder();
}
- public TBuilder WithServer(string server)
+ public TBuilder WithServer(Server server)
{
this.server = server;
return GetBuilder();
diff --git a/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Clients/AirTrafficController.cs b/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Clients/AirTrafficController.cs
index e3150a6..f8c70dc 100644
--- a/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Clients/AirTrafficController.cs
+++ b/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Clients/AirTrafficController.cs
@@ -31,6 +31,7 @@
using MalikP.IVAO.Library.Common.Annotation;
using MalikP.IVAO.Library.Common.Enums;
using MalikP.IVAO.Library.Models.Other;
+using MalikP.IVAO.Library.Models.Servers;
namespace MalikP.IVAO.Library.Models.Clients
{
@@ -43,7 +44,7 @@ public AirTrafficController(
string name,
ClientType clientType,
GPS location,
- string server,
+ Server server,
string protocol,
DateTime connectionTime,
string softwareName,
diff --git a/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Clients/AirTrafficControllerBuilder.cs b/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Clients/AirTrafficControllerBuilder.cs
index 69545a9..d11e5c1 100644
--- a/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Clients/AirTrafficControllerBuilder.cs
+++ b/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Clients/AirTrafficControllerBuilder.cs
@@ -29,6 +29,7 @@
using MalikP.IVAO.Library.Common.Enums;
using MalikP.IVAO.Library.Models.Other;
+using MalikP.IVAO.Library.Models.Servers;
namespace MalikP.IVAO.Library.Models.Clients
{
@@ -62,7 +63,7 @@ public static AirTrafficControllerBuilder FromModel(AirTrafficController model)
.WithLocation(model.Location == null ? model.Location : (GPS)model.Location.Clone())
.WithName(model.Name)
.WithProtocol(model.Protocol)
- .WithServer(model.Server)
+ .WithServer(model.Server == null ? null : (Server)model.Server.Clone())
.WithSoftwareName(model.SoftwareName)
.WithSoftwareVersion(model.SoftwareVersion)
.WithVID(model.VID)
diff --git a/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Clients/Client.cs b/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Clients/Client.cs
index ae3d866..8764270 100644
--- a/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Clients/Client.cs
+++ b/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Clients/Client.cs
@@ -31,6 +31,7 @@
using MalikP.IVAO.Library.Common.Annotation;
using MalikP.IVAO.Library.Common.Enums;
using MalikP.IVAO.Library.Models.Other;
+using MalikP.IVAO.Library.Models.Servers;
namespace MalikP.IVAO.Library.Models.Clients
{
@@ -43,7 +44,7 @@ public Client(
string name,
ClientType clientType,
GPS location,
- string server,
+ Server server,
string protocol,
DateTime connectionTime,
string softwareName,
@@ -56,7 +57,7 @@ public Client(
Name = name ?? string.Empty;
ClientType = clientType;
Location = location;
- Server = server ?? string.Empty;
+ Server = server;
Protocol = protocol ?? string.Empty;
ConnectionTime = connectionTime;
SoftwareName = softwareName ?? string.Empty;
@@ -88,7 +89,7 @@ protected Client()
public GPS Location { get; private set; }
[DataMember]
- public string Server { get; private set; }
+ public Server Server { get; private set; }
[DataMember]
public string Protocol { get; private set; }
@@ -132,7 +133,7 @@ public override bool Equals(object obj)
&& string.Equals(casted.Name, Name, StringComparison.InvariantCultureIgnoreCase)
&& Equals(casted.ClientType, ClientType)
&& Equals(casted.Location, Location)
- && string.Equals(casted.Server, Server, StringComparison.InvariantCultureIgnoreCase)
+ && Equals(casted.Server, Server)
&& string.Equals(casted.Protocol, Protocol, StringComparison.InvariantCultureIgnoreCase)
&& Equals(casted.ConnectionTime, ConnectionTime)
&& string.Equals(casted.SoftwareName, SoftwareName, StringComparison.InvariantCultureIgnoreCase)
@@ -151,7 +152,7 @@ public override int GetHashCode()
+ (Name.ToUpper().GetHashCode() * 3)
+ (ClientType.GetHashCode() * 3)
+ (GetItemHashCode(Location) * 3)
- + (Server.ToUpper().GetHashCode() * 3)
+ + (GetItemHashCode(Server) * 3)
+ (Protocol.ToUpper().GetHashCode() * 3)
+ (ConnectionTime.GetHashCode() * 3)
+ (SoftwareName.ToUpper().GetHashCode() * 3)
diff --git a/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Clients/ClientWithRating.cs b/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Clients/ClientWithRating.cs
index ec1fd13..0c3054f 100644
--- a/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Clients/ClientWithRating.cs
+++ b/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Clients/ClientWithRating.cs
@@ -30,6 +30,7 @@
using MalikP.IVAO.Library.Common.Enums;
using MalikP.IVAO.Library.Models.Other;
+using MalikP.IVAO.Library.Models.Servers;
namespace MalikP.IVAO.Library.Models.Clients
{
@@ -42,7 +43,7 @@ public ClientWithRating(
string name,
ClientType clientType,
GPS location,
- string server,
+ Server server,
string protocol,
DateTime connectionTime,
string softwareName,
diff --git a/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Clients/FollowMe.cs b/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Clients/FollowMe.cs
index 2750992..f4b6b3a 100644
--- a/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Clients/FollowMe.cs
+++ b/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Clients/FollowMe.cs
@@ -30,6 +30,7 @@
using MalikP.IVAO.Library.Common.Enums;
using MalikP.IVAO.Library.Models.Other;
+using MalikP.IVAO.Library.Models.Servers;
namespace MalikP.IVAO.Library.Models.Clients
{
@@ -42,7 +43,7 @@ public FollowMe(
string name,
ClientType clientType,
GPS location,
- string server,
+ Server server,
string protocol,
DateTime connectionTime,
string softwareName,
diff --git a/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Clients/FollowMeBuilder.cs b/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Clients/FollowMeBuilder.cs
index b1ed461..372d3e0 100644
--- a/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Clients/FollowMeBuilder.cs
+++ b/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Clients/FollowMeBuilder.cs
@@ -27,6 +27,7 @@
using MalikP.IVAO.Library.Common.Enums;
using MalikP.IVAO.Library.Models.Other;
+using MalikP.IVAO.Library.Models.Servers;
namespace MalikP.IVAO.Library.Models.Clients
{
@@ -52,7 +53,7 @@ public static FollowMeBuilder FromModel(FollowMe model)
.WithLocation(model.Location == null ? model.Location : (GPS)model.Location.Clone())
.WithName(model.Name)
.WithProtocol(model.Protocol)
- .WithServer(model.Server)
+ .WithServer(model.Server == null ? null : (Server)model.Server.Clone())
.WithSoftwareName(model.SoftwareName)
.WithSoftwareVersion(model.SoftwareVersion)
.WithVID(model.VID);
diff --git a/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Clients/Pilot.cs b/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Clients/Pilot.cs
index 13eb9ee..6f67d73 100644
--- a/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Clients/Pilot.cs
+++ b/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Clients/Pilot.cs
@@ -31,6 +31,7 @@
using MalikP.IVAO.Library.Common.Annotation;
using MalikP.IVAO.Library.Common.Enums;
using MalikP.IVAO.Library.Models.Other;
+using MalikP.IVAO.Library.Models.Servers;
namespace MalikP.IVAO.Library.Models.Clients
{
@@ -43,7 +44,7 @@ public Pilot(
string name,
ClientType clientType,
GPS location,
- string server,
+ Server server,
string protocol,
DateTime connectionTime,
string softwareName,
diff --git a/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Clients/PilotBuilder.cs b/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Clients/PilotBuilder.cs
index be13ef7..617fdac 100644
--- a/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Clients/PilotBuilder.cs
+++ b/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Clients/PilotBuilder.cs
@@ -27,6 +27,7 @@
using MalikP.IVAO.Library.Common.Enums;
using MalikP.IVAO.Library.Models.Other;
+using MalikP.IVAO.Library.Models.Servers;
namespace MalikP.IVAO.Library.Models.Clients
{
@@ -61,7 +62,7 @@ public static PilotBuilder FromModel(Pilot model)
.WithLocation(model.Location == null ? model.Location : (GPS)model.Location.Clone())
.WithName(model.Name)
.WithProtocol(model.Protocol)
- .WithServer(model.Server)
+ .WithServer(model.Server == null ? null : (Server)model.Server.Clone())
.WithSoftwareName(model.SoftwareName)
.WithSoftwareVersion(model.SoftwareVersion)
.WithVID(model.VID)
From 93b880993b9d942dc34a7089c96a42633d823927 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Peter=20Mal=C3=ADk?=
Date: Sat, 1 Jun 2019 23:23:09 +0200
Subject: [PATCH 03/17] Add ip address type
---
.../Common/Parsers/ServerParser.cs | 4 ++--
.../Models/Servers/Server.cs | 17 ++++++++++++-----
.../Models/Servers/ServerBuilder.cs | 13 ++++++++++---
3 files changed, 24 insertions(+), 10 deletions(-)
diff --git a/src/MalikP. IVAO Library/MalikP.IVAO.Library/Common/Parsers/ServerParser.cs b/src/MalikP. IVAO Library/MalikP.IVAO.Library/Common/Parsers/ServerParser.cs
index b2fa879..c9a286a 100644
--- a/src/MalikP. IVAO Library/MalikP.IVAO.Library/Common/Parsers/ServerParser.cs
+++ b/src/MalikP. IVAO Library/MalikP.IVAO.Library/Common/Parsers/ServerParser.cs
@@ -26,7 +26,7 @@
// SOFTWARE.
using System;
-
+using System.Net;
using MalikP.IVAO.Library.Common.Indexes;
using MalikP.IVAO.Library.Common.Selector;
using MalikP.IVAO.Library.Models.Servers;
@@ -56,7 +56,7 @@ protected override Server CreateItem(string data)
return ServerBuilder.Create()
.WithHostname(dataItems[ServerIndex.Hostname])
- .WithIP(dataItems[ServerIndex.IP])
+ .WithIP(IPAddress.Parse(dataItems[ServerIndex.IP]))
.WithLocation(dataItems[ServerIndex.Location])
.WithName(dataItems[ServerIndex.Name])
.WithConnectionsAllowed(Convert.ToBoolean(Convert.ToInt16(dataItems[ServerIndex.ConnectionsAllowed])))
diff --git a/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Servers/Server.cs b/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Servers/Server.cs
index 1195834..c0fe9be 100644
--- a/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Servers/Server.cs
+++ b/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Servers/Server.cs
@@ -26,6 +26,7 @@
// SOFTWARE.
using System;
+using System.Net;
using System.Runtime.Serialization;
namespace MalikP.IVAO.Library.Models.Servers
@@ -35,14 +36,14 @@ public sealed class Server : AbstractIvaoModel
{
public Server(
string hostname,
- string ip,
+ IPAddress ip,
string location,
string name,
bool connectionsAllowed,
int maximumConnections)
{
Hostname = hostname ?? string.Empty;
- IP = ip ?? string.Empty;
+ IP = ip;
Location = location ?? string.Empty;
Name = name ?? string.Empty;
ConnectionsAllowed = connectionsAllowed;
@@ -56,8 +57,14 @@ private Server()
[DataMember]
public string Hostname { get; private set; }
+ public IPAddress IP { get; private set; }
+
[DataMember]
- public string IP { get; private set; }
+ private string IPAddressIntenal
+ {
+ get { return IP.ToString(); }
+ set { IP = IPAddress.Parse(value); }
+ }
[DataMember]
public string Location { get; private set; }
@@ -91,7 +98,7 @@ public override bool Equals(object obj)
return base.Equals(obj)
&& string.Equals(casted.Hostname, Hostname, StringComparison.InvariantCultureIgnoreCase)
- && string.Equals(casted.IP, IP, StringComparison.InvariantCultureIgnoreCase)
+ && Equals(casted.IP, IP)
&& Equals(casted.ConnectionsAllowed, ConnectionsAllowed)
&& Equals(casted.MaximumConnections, MaximumConnections)
&& string.Equals(casted.Name, Name, StringComparison.InvariantCultureIgnoreCase)
@@ -104,7 +111,7 @@ public override int GetHashCode()
{
return base.GetHashCode()
+ (Hostname.ToUpper().GetHashCode() * 3)
- + (IP.ToUpper().GetHashCode() * 3)
+ + (IP.GetHashCode() * 3)
+ (ConnectionsAllowed.GetHashCode() * 3)
+ (MaximumConnections.GetHashCode() * 3)
+ (Name.ToUpper().GetHashCode() * 3)
diff --git a/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Servers/ServerBuilder.cs b/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Servers/ServerBuilder.cs
index 222a672..294266f 100644
--- a/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Servers/ServerBuilder.cs
+++ b/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Servers/ServerBuilder.cs
@@ -25,12 +25,14 @@
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
+using System.Net;
+
namespace MalikP.IVAO.Library.Models.Servers
{
public sealed class ServerBuilder
{
private string _hostname;
- private string _ip;
+ private IPAddress _ip;
private string _location;
private string _name;
private bool _connectionsAllowed;
@@ -50,7 +52,7 @@ public static ServerBuilder FromModel(Server model)
return new ServerBuilder()
.WithConnectionsAllowed(model.ConnectionsAllowed)
.WithHostname(model.Hostname)
- .WithIP(model.IP)
+ .WithIP(model.IP == null ? null : IPAddress.Parse(model.IP.ToString()))
.WithLocation(model.Location)
.WithMaximumConnections(model.MaximumConnections)
.WithName(model.Name);
@@ -62,12 +64,17 @@ public ServerBuilder WithHostname(string hostname)
return this;
}
- public ServerBuilder WithIP(string ip)
+ public ServerBuilder WithIP(IPAddress ip)
{
_ip = ip;
return this;
}
+ public ServerBuilder WithIP(string ip)
+ {
+ return WithIP(IPAddress.Parse(ip));
+ }
+
public ServerBuilder WithLocation(string location)
{
_location = location;
From 6ba8bd9bfef5a8af5040bedbe437fb35eb66656e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Peter=20Mal=C3=ADk?=
Date: Sat, 1 Jun 2019 23:58:43 +0200
Subject: [PATCH 04/17] Add enhancers to enahnce simple server to enhanced
server
---
.../MalikP.IVAO.Library.App/Program.cs | 9 +++
.../Enhancers/AbstractServerEnhancer.cs | 51 +++++++++++++++
.../AirTrafficControllerServerEnhancer.cs | 62 ++++++++++++++++++
.../Enhancers/FollowMeServerEnhancer.cs | 62 ++++++++++++++++++
.../IAirTrafficControllerServerEnhancer.cs | 35 +++++++++++
.../Common/Enhancers/IDataEnhancer.cs | 42 +++++++++++++
.../Enhancers/IFollowMeServerEnhancer.cs | 35 +++++++++++
.../Common/Enhancers/IPilotServerEnhancer.cs | 35 +++++++++++
.../Common/Enhancers/PilotServerEnhancer.cs | 63 +++++++++++++++++++
.../Common/Parsers/AbstractClientFactory.cs | 2 +-
.../Models/Servers/Server.cs | 2 +-
11 files changed, 396 insertions(+), 2 deletions(-)
create mode 100644 src/MalikP. IVAO Library/MalikP.IVAO.Library/Common/Enhancers/AbstractServerEnhancer.cs
create mode 100644 src/MalikP. IVAO Library/MalikP.IVAO.Library/Common/Enhancers/AirTrafficControllerServerEnhancer.cs
create mode 100644 src/MalikP. IVAO Library/MalikP.IVAO.Library/Common/Enhancers/FollowMeServerEnhancer.cs
create mode 100644 src/MalikP. IVAO Library/MalikP.IVAO.Library/Common/Enhancers/IAirTrafficControllerServerEnhancer.cs
create mode 100644 src/MalikP. IVAO Library/MalikP.IVAO.Library/Common/Enhancers/IDataEnhancer.cs
create mode 100644 src/MalikP. IVAO Library/MalikP.IVAO.Library/Common/Enhancers/IFollowMeServerEnhancer.cs
create mode 100644 src/MalikP. IVAO Library/MalikP.IVAO.Library/Common/Enhancers/IPilotServerEnhancer.cs
create mode 100644 src/MalikP. IVAO Library/MalikP.IVAO.Library/Common/Enhancers/PilotServerEnhancer.cs
diff --git a/src/MalikP. IVAO Library/MalikP.IVAO.Library.App/Program.cs b/src/MalikP. IVAO Library/MalikP.IVAO.Library.App/Program.cs
index 0d68495..6d4a668 100644
--- a/src/MalikP. IVAO Library/MalikP.IVAO.Library.App/Program.cs
+++ b/src/MalikP. IVAO Library/MalikP.IVAO.Library.App/Program.cs
@@ -7,6 +7,7 @@
using System.Xml;
using MalikP.IVAO.Library.Common;
+using MalikP.IVAO.Library.Common.Enhancers;
using MalikP.IVAO.Library.Common.Parsers;
using MalikP.IVAO.Library.Common.Selector;
using MalikP.IVAO.Library.Data.Source;
@@ -60,6 +61,14 @@ public static void Main(string[] args)
List pilotDataModels = pilotClientsDataProvider.GetData().ToList();
List followMeDataModels = followMeClientsDataProvider.GetData().ToList();
+ IAirTrafficControllerServerEnhancer atcServerEnhancer = new AirTrafficControllerServerEnhancer(serversDataProvider);
+ IPilotServerEnhancer pilotServerEnhancer = new PilotServerEnhancer(serversDataProvider);
+ IFollowMeServerEnhancer followMeServerEnhancer = new FollowMeServerEnhancer(serversDataProvider);
+
+ atcDataModels = atcDataModels.Select(atcServerEnhancer.Enhance).Cast().ToList();
+ pilotDataModels = pilotDataModels.Select(pilotServerEnhancer.Enhance).Cast().ToList();
+ followMeDataModels = followMeDataModels.Select(followMeServerEnhancer.Enhance).Cast().ToList();
+
Client item = pilotDataModels.First();
TrySerialize(item);
diff --git a/src/MalikP. IVAO Library/MalikP.IVAO.Library/Common/Enhancers/AbstractServerEnhancer.cs b/src/MalikP. IVAO Library/MalikP.IVAO.Library/Common/Enhancers/AbstractServerEnhancer.cs
new file mode 100644
index 0000000..fea98a7
--- /dev/null
+++ b/src/MalikP. IVAO Library/MalikP.IVAO.Library/Common/Enhancers/AbstractServerEnhancer.cs
@@ -0,0 +1,51 @@
+// MIT License
+//
+// Copyright (c) 2019 Peter Malik. (MalikP.)
+//
+// File: AbstractServerEnhancer.cs
+// Company: MalikP.
+//
+// Repository: https://github.com/peterM/IVAO-Library
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in all
+// copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+// SOFTWARE.
+
+using MalikP.IVAO.Library.Models;
+using MalikP.IVAO.Library.Models.Clients;
+using MalikP.IVAO.Library.Providers;
+
+namespace MalikP.IVAO.Library.Common.Enhancers
+{
+ public abstract class AbstractServerEnhancer : IDataEnhancer
+ where TClientModel : Client
+ {
+ protected AbstractServerEnhancer(IServersProvider serversProvider)
+ {
+ ServersProvider = serversProvider;
+ }
+
+ protected IServersProvider ServersProvider { get; }
+
+ public abstract TClientModel Enhance(TClientModel modelToEnhance);
+
+ public IModel Enhance(IModel modelToEnhance)
+ {
+ return Enhance((TClientModel)modelToEnhance);
+ }
+ }
+}
diff --git a/src/MalikP. IVAO Library/MalikP.IVAO.Library/Common/Enhancers/AirTrafficControllerServerEnhancer.cs b/src/MalikP. IVAO Library/MalikP.IVAO.Library/Common/Enhancers/AirTrafficControllerServerEnhancer.cs
new file mode 100644
index 0000000..c86746e
--- /dev/null
+++ b/src/MalikP. IVAO Library/MalikP.IVAO.Library/Common/Enhancers/AirTrafficControllerServerEnhancer.cs
@@ -0,0 +1,62 @@
+// MIT License
+//
+// Copyright (c) 2019 Peter Malik. (MalikP.)
+//
+// File: AirTrafficControllerServerEnhancer.cs
+// Company: MalikP.
+//
+// Repository: https://github.com/peterM/IVAO-Library
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in all
+// copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+// SOFTWARE.
+
+using System.Linq;
+using MalikP.IVAO.Library.Models.Clients;
+using MalikP.IVAO.Library.Models.Servers;
+using MalikP.IVAO.Library.Providers;
+
+namespace MalikP.IVAO.Library.Common.Enhancers
+{
+ public class AirTrafficControllerServerEnhancer : AbstractServerEnhancer, IAirTrafficControllerServerEnhancer
+ {
+ public AirTrafficControllerServerEnhancer(IServersProvider serversProvider)
+ : base(serversProvider)
+ {
+ }
+
+ public override AirTrafficController Enhance(AirTrafficController modelToEnhance)
+ {
+ if (modelToEnhance.Server == null)
+ {
+ return modelToEnhance;
+ }
+
+ Server server = ServersProvider.GetData()
+ .FirstOrDefault(d => d.Hostname == modelToEnhance.Server.Hostname);
+
+ if (server == null)
+ {
+ return modelToEnhance;
+ }
+
+ return AirTrafficControllerBuilder.FromModel(modelToEnhance)
+ .WithServer((Server)server.Clone())
+ .Build();
+ }
+ }
+}
diff --git a/src/MalikP. IVAO Library/MalikP.IVAO.Library/Common/Enhancers/FollowMeServerEnhancer.cs b/src/MalikP. IVAO Library/MalikP.IVAO.Library/Common/Enhancers/FollowMeServerEnhancer.cs
new file mode 100644
index 0000000..29eb298
--- /dev/null
+++ b/src/MalikP. IVAO Library/MalikP.IVAO.Library/Common/Enhancers/FollowMeServerEnhancer.cs
@@ -0,0 +1,62 @@
+// MIT License
+//
+// Copyright (c) 2019 Peter Malik. (MalikP.)
+//
+// File: FollowMeServerEnhancer.cs
+// Company: MalikP.
+//
+// Repository: https://github.com/peterM/IVAO-Library
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in all
+// copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+// SOFTWARE.
+
+using System.Linq;
+using MalikP.IVAO.Library.Models.Clients;
+using MalikP.IVAO.Library.Models.Servers;
+using MalikP.IVAO.Library.Providers;
+
+namespace MalikP.IVAO.Library.Common.Enhancers
+{
+ public class FollowMeServerEnhancer : AbstractServerEnhancer, IFollowMeServerEnhancer
+ {
+ public FollowMeServerEnhancer(IServersProvider serversProvider)
+ : base(serversProvider)
+ {
+ }
+
+ public override FollowMe Enhance(FollowMe modelToEnhance)
+ {
+ if (modelToEnhance.Server == null)
+ {
+ return modelToEnhance;
+ }
+
+ Server server = ServersProvider.GetData()
+ .FirstOrDefault(d => d.Hostname == modelToEnhance.Server.Hostname);
+
+ if (server == null)
+ {
+ return modelToEnhance;
+ }
+
+ return FollowMeBuilder.FromModel(modelToEnhance)
+ .WithServer((Server)server.Clone())
+ .Build();
+ }
+ }
+}
diff --git a/src/MalikP. IVAO Library/MalikP.IVAO.Library/Common/Enhancers/IAirTrafficControllerServerEnhancer.cs b/src/MalikP. IVAO Library/MalikP.IVAO.Library/Common/Enhancers/IAirTrafficControllerServerEnhancer.cs
new file mode 100644
index 0000000..d1f54f6
--- /dev/null
+++ b/src/MalikP. IVAO Library/MalikP.IVAO.Library/Common/Enhancers/IAirTrafficControllerServerEnhancer.cs
@@ -0,0 +1,35 @@
+// MIT License
+//
+// Copyright (c) 2019 Peter Malik. (MalikP.)
+//
+// File: IAirTrafficControllerServerEnhancer.cs
+// Company: MalikP.
+//
+// Repository: https://github.com/peterM/IVAO-Library
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in all
+// copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+// SOFTWARE.
+
+using MalikP.IVAO.Library.Models.Clients;
+
+namespace MalikP.IVAO.Library.Common.Enhancers
+{
+ public interface IAirTrafficControllerServerEnhancer : IDataEnhancer
+ {
+ }
+}
diff --git a/src/MalikP. IVAO Library/MalikP.IVAO.Library/Common/Enhancers/IDataEnhancer.cs b/src/MalikP. IVAO Library/MalikP.IVAO.Library/Common/Enhancers/IDataEnhancer.cs
new file mode 100644
index 0000000..56a4a54
--- /dev/null
+++ b/src/MalikP. IVAO Library/MalikP.IVAO.Library/Common/Enhancers/IDataEnhancer.cs
@@ -0,0 +1,42 @@
+// MIT License
+//
+// Copyright (c) 2019 Peter Malik. (MalikP.)
+//
+// File: IDataEnhancer.cs
+// Company: MalikP.
+//
+// Repository: https://github.com/peterM/IVAO-Library
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in all
+// copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+// SOFTWARE.
+
+using MalikP.IVAO.Library.Models;
+
+namespace MalikP.IVAO.Library.Common.Enhancers
+{
+ public interface IDataEnhancer
+ {
+ IModel Enhance(IModel modelToEnhance);
+ }
+
+ public interface IDataEnhancer : IDataEnhancer
+ where TModelToEnhance : IModel
+ {
+ TModelToEnhance Enhance(TModelToEnhance modelToEnhance);
+ }
+}
diff --git a/src/MalikP. IVAO Library/MalikP.IVAO.Library/Common/Enhancers/IFollowMeServerEnhancer.cs b/src/MalikP. IVAO Library/MalikP.IVAO.Library/Common/Enhancers/IFollowMeServerEnhancer.cs
new file mode 100644
index 0000000..c669965
--- /dev/null
+++ b/src/MalikP. IVAO Library/MalikP.IVAO.Library/Common/Enhancers/IFollowMeServerEnhancer.cs
@@ -0,0 +1,35 @@
+// MIT License
+//
+// Copyright (c) 2019 Peter Malik. (MalikP.)
+//
+// File: IFollowMeServerEnhancer.cs
+// Company: MalikP.
+//
+// Repository: https://github.com/peterM/IVAO-Library
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in all
+// copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+// SOFTWARE.
+
+using MalikP.IVAO.Library.Models.Clients;
+
+namespace MalikP.IVAO.Library.Common.Enhancers
+{
+ public interface IFollowMeServerEnhancer : IDataEnhancer
+ {
+ }
+}
diff --git a/src/MalikP. IVAO Library/MalikP.IVAO.Library/Common/Enhancers/IPilotServerEnhancer.cs b/src/MalikP. IVAO Library/MalikP.IVAO.Library/Common/Enhancers/IPilotServerEnhancer.cs
new file mode 100644
index 0000000..6c493c0
--- /dev/null
+++ b/src/MalikP. IVAO Library/MalikP.IVAO.Library/Common/Enhancers/IPilotServerEnhancer.cs
@@ -0,0 +1,35 @@
+// MIT License
+//
+// Copyright (c) 2019 Peter Malik. (MalikP.)
+//
+// File: IPilotServerEnhancer.cs
+// Company: MalikP.
+//
+// Repository: https://github.com/peterM/IVAO-Library
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in all
+// copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+// SOFTWARE.
+
+using MalikP.IVAO.Library.Models.Clients;
+
+namespace MalikP.IVAO.Library.Common.Enhancers
+{
+ public interface IPilotServerEnhancer : IDataEnhancer
+ {
+ }
+}
diff --git a/src/MalikP. IVAO Library/MalikP.IVAO.Library/Common/Enhancers/PilotServerEnhancer.cs b/src/MalikP. IVAO Library/MalikP.IVAO.Library/Common/Enhancers/PilotServerEnhancer.cs
new file mode 100644
index 0000000..d2a7498
--- /dev/null
+++ b/src/MalikP. IVAO Library/MalikP.IVAO.Library/Common/Enhancers/PilotServerEnhancer.cs
@@ -0,0 +1,63 @@
+// MIT License
+//
+// Copyright (c) 2019 Peter Malik. (MalikP.)
+//
+// File: PilotServerEnhancer.cs
+// Company: MalikP.
+//
+// Repository: https://github.com/peterM/IVAO-Library
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in all
+// copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+// SOFTWARE.
+
+using System.Linq;
+
+using MalikP.IVAO.Library.Models.Clients;
+using MalikP.IVAO.Library.Models.Servers;
+using MalikP.IVAO.Library.Providers;
+
+namespace MalikP.IVAO.Library.Common.Enhancers
+{
+ public class PilotServerEnhancer : AbstractServerEnhancer, IPilotServerEnhancer
+ {
+ public PilotServerEnhancer(IServersProvider serversProvider)
+ : base(serversProvider)
+ {
+ }
+
+ public override Pilot Enhance(Pilot modelToEnhance)
+ {
+ if (modelToEnhance.Server == null)
+ {
+ return modelToEnhance;
+ }
+
+ Server server = ServersProvider.GetData()
+ .FirstOrDefault(d => d.Hostname == modelToEnhance.Server.Hostname);
+
+ if (server == null)
+ {
+ return modelToEnhance;
+ }
+
+ return PilotBuilder.FromModel(modelToEnhance)
+ .WithServer((Server)server.Clone())
+ .Build();
+ }
+ }
+}
diff --git a/src/MalikP. IVAO Library/MalikP.IVAO.Library/Common/Parsers/AbstractClientFactory.cs b/src/MalikP. IVAO Library/MalikP.IVAO.Library/Common/Parsers/AbstractClientFactory.cs
index 66c2ebc..aed2346 100644
--- a/src/MalikP. IVAO Library/MalikP.IVAO.Library/Common/Parsers/AbstractClientFactory.cs
+++ b/src/MalikP. IVAO Library/MalikP.IVAO.Library/Common/Parsers/AbstractClientFactory.cs
@@ -89,7 +89,7 @@ protected TBuilder AssignGeneralData(TBuilder builder, string[] rowDat
private Server GetServer(string[] rowData)
{
return ServerBuilder.Create()
- .WithName(rowData[ClientIndex.All.Server])
+ .WithHostname(rowData[ClientIndex.All.Server])
.Build();
}
}
diff --git a/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Servers/Server.cs b/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Servers/Server.cs
index c0fe9be..d73d97d 100644
--- a/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Servers/Server.cs
+++ b/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Servers/Server.cs
@@ -62,7 +62,7 @@ private Server()
[DataMember]
private string IPAddressIntenal
{
- get { return IP.ToString(); }
+ get { return IP == null ? string.Empty : IP.ToString(); }
set { IP = IPAddress.Parse(value); }
}
From 24525353ffa8598683702d7082a9c92bf4cffd40 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Peter=20Mal=C3=ADk?=
Date: Sun, 2 Jun 2019 00:01:17 +0200
Subject: [PATCH 05/17] Version 0.8.6
---
.../MalikP.IVAO.Library/MalikP.IVAO.Library.csproj | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/MalikP. IVAO Library/MalikP.IVAO.Library/MalikP.IVAO.Library.csproj b/src/MalikP. IVAO Library/MalikP.IVAO.Library/MalikP.IVAO.Library.csproj
index df404fa..29d4abc 100644
--- a/src/MalikP. IVAO Library/MalikP.IVAO.Library/MalikP.IVAO.Library.csproj
+++ b/src/MalikP. IVAO Library/MalikP.IVAO.Library/MalikP.IVAO.Library.csproj
@@ -3,7 +3,7 @@
netstandard2.1;netstandard2.0;net472;net471;net47;net462;net461;net46;net452;net451;net45
MalikP.IVAO.Library
- 0.8.5
+ 0.8.6
Peter Malik (MalikP.)
Peter Malik (MalikP.)
MalikP. IVAO Library
From 1dbdbf8d7463990c0969d251bea0ffed2a038fa6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Peter=20Mal=C3=ADk?=
Date: Sun, 2 Jun 2019 00:13:46 +0200
Subject: [PATCH 06/17] Add known types
---
src/MalikP. IVAO Library/MalikP.IVAO.Library.App/Program.cs | 3 +++
.../MalikP.IVAO.Library/Models/Clients/Client.cs | 4 ++++
2 files changed, 7 insertions(+)
diff --git a/src/MalikP. IVAO Library/MalikP.IVAO.Library.App/Program.cs b/src/MalikP. IVAO Library/MalikP.IVAO.Library.App/Program.cs
index 6d4a668..256761a 100644
--- a/src/MalikP. IVAO Library/MalikP.IVAO.Library.App/Program.cs
+++ b/src/MalikP. IVAO Library/MalikP.IVAO.Library.App/Program.cs
@@ -71,6 +71,9 @@ public static void Main(string[] args)
Client item = pilotDataModels.First();
+ IModelCloner modelCloner = new ModelCloner();
+ Client m = modelCloner.Clone(pilotDataModels[0]);
+
TrySerialize(item);
}
diff --git a/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Clients/Client.cs b/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Clients/Client.cs
index 8764270..d2d429a 100644
--- a/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Clients/Client.cs
+++ b/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Clients/Client.cs
@@ -36,6 +36,10 @@
namespace MalikP.IVAO.Library.Models.Clients
{
[DataContract]
+ [KnownType(typeof(AirTrafficController))]
+ [KnownType(typeof(Pilot))]
+ [KnownType(typeof(FollowMe))]
+ [KnownType(typeof(ClientWithRating<>))]
public abstract class Client : AbstractIvaoModel
{
public Client(
From 84a85bbfbcc099821f33fe500e9ca4004d595b43 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Peter=20Mal=C3=ADk?=
Date: Sun, 2 Jun 2019 00:22:37 +0200
Subject: [PATCH 07/17] Add operators ==, != to models
---
.../MalikP.IVAO.Library/Models/AbstractIvaoModel.cs | 10 ++++++++++
.../MalikP.IVAO.Library/Models/Airports/Airport.cs | 10 ++++++++++
.../Models/Clients/AirTrafficController.cs | 10 ++++++++++
.../MalikP.IVAO.Library/Models/Clients/Client.cs | 10 ++++++++++
.../MalikP.IVAO.Library/Models/Clients/FollowMe.cs | 10 ++++++++++
.../MalikP.IVAO.Library/Models/Clients/Pilot.cs | 10 ++++++++++
.../MalikP.IVAO.Library/Models/General/GeneralData.cs | 10 ++++++++++
.../MalikP.IVAO.Library/Models/Other/Aerodrome.cs | 10 ++++++++++
.../MalikP.IVAO.Library/Models/Other/FlightPlan.cs | 10 ++++++++++
.../MalikP.IVAO.Library/Models/Other/GPS.cs | 10 ++++++++++
.../MalikP.IVAO.Library/Models/Servers/Server.cs | 10 ++++++++++
11 files changed, 110 insertions(+)
diff --git a/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/AbstractIvaoModel.cs b/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/AbstractIvaoModel.cs
index 9ada301..b9f9bda 100644
--- a/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/AbstractIvaoModel.cs
+++ b/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/AbstractIvaoModel.cs
@@ -73,5 +73,15 @@ protected int GetItemHashCode(object item)
return item.GetHashCode();
}
}
+
+ public static bool operator !=(AbstractIvaoModel instance1, AbstractIvaoModel instance2)
+ {
+ return !instance1.Equals(instance2);
+ }
+
+ public static bool operator ==(AbstractIvaoModel instance1, AbstractIvaoModel instance2)
+ {
+ return instance1.Equals(instance2);
+ }
}
}
diff --git a/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Airports/Airport.cs b/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Airports/Airport.cs
index 7d29eff..9819ae7 100644
--- a/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Airports/Airport.cs
+++ b/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Airports/Airport.cs
@@ -87,5 +87,15 @@ public override object Clone()
}
public static AirportBuilder Builder => AirportBuilder.Create();
+
+ public static bool operator !=(Airport instance1, Airport instance2)
+ {
+ return !instance1.Equals(instance2);
+ }
+
+ public static bool operator ==(Airport instance1, Airport instance2)
+ {
+ return instance1.Equals(instance2);
+ }
}
}
diff --git a/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Clients/AirTrafficController.cs b/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Clients/AirTrafficController.cs
index f8c70dc..25bdb5b 100644
--- a/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Clients/AirTrafficController.cs
+++ b/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Clients/AirTrafficController.cs
@@ -147,5 +147,15 @@ public override object Clone()
}
public static AirTrafficControllerBuilder Builder => AirTrafficControllerBuilder.Create();
+
+ public static bool operator !=(AirTrafficController instance1, AirTrafficController instance2)
+ {
+ return !instance1.Equals(instance2);
+ }
+
+ public static bool operator ==(AirTrafficController instance1, AirTrafficController instance2)
+ {
+ return instance1.Equals(instance2);
+ }
}
}
diff --git a/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Clients/Client.cs b/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Clients/Client.cs
index d2d429a..51c2537 100644
--- a/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Clients/Client.cs
+++ b/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Clients/Client.cs
@@ -165,5 +165,15 @@ public override int GetHashCode()
+ (ClientRating.GetHashCode() * 3) * 17;
}
}
+
+ public static bool operator !=(Client instance1, Client instance2)
+ {
+ return !instance1.Equals(instance2);
+ }
+
+ public static bool operator ==(Client instance1, Client instance2)
+ {
+ return instance1.Equals(instance2);
+ }
}
}
\ No newline at end of file
diff --git a/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Clients/FollowMe.cs b/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Clients/FollowMe.cs
index f4b6b3a..85b28e8 100644
--- a/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Clients/FollowMe.cs
+++ b/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Clients/FollowMe.cs
@@ -105,5 +105,15 @@ public override object Clone()
}
public static FollowMeBuilder Builder => FollowMeBuilder.Create();
+
+ public static bool operator !=(FollowMe instance1, FollowMe instance2)
+ {
+ return !instance1.Equals(instance2);
+ }
+
+ public static bool operator ==(FollowMe instance1, FollowMe instance2)
+ {
+ return instance1.Equals(instance2);
+ }
}
}
diff --git a/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Clients/Pilot.cs b/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Clients/Pilot.cs
index 6f67d73..f520941 100644
--- a/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Clients/Pilot.cs
+++ b/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Clients/Pilot.cs
@@ -159,5 +159,15 @@ public override object Clone()
}
public static PilotBuilder Builder => PilotBuilder.Create();
+
+ public static bool operator !=(Pilot instance1, Pilot instance2)
+ {
+ return !instance1.Equals(instance2);
+ }
+
+ public static bool operator ==(Pilot instance1, Pilot instance2)
+ {
+ return instance1.Equals(instance2);
+ }
}
}
diff --git a/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/General/GeneralData.cs b/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/General/GeneralData.cs
index 776f0ea..5683b27 100644
--- a/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/General/GeneralData.cs
+++ b/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/General/GeneralData.cs
@@ -119,5 +119,15 @@ public override object Clone()
}
public static GeneralDataBuilder Builder => GeneralDataBuilder.Create();
+
+ public static bool operator !=(GeneralData instance1, GeneralData instance2)
+ {
+ return !instance1.Equals(instance2);
+ }
+
+ public static bool operator ==(GeneralData instance1, GeneralData instance2)
+ {
+ return instance1.Equals(instance2);
+ }
}
}
\ No newline at end of file
diff --git a/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Other/Aerodrome.cs b/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Other/Aerodrome.cs
index 118c456..977c72e 100644
--- a/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Other/Aerodrome.cs
+++ b/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Other/Aerodrome.cs
@@ -80,5 +80,15 @@ public override int GetHashCode()
return ICAO.ToUpper().GetHashCode() * 3 * 17;
}
}
+
+ public static bool operator !=(Aerodrome instance1, Aerodrome instance2)
+ {
+ return !instance1.Equals(instance2);
+ }
+
+ public static bool operator ==(Aerodrome instance1, Aerodrome instance2)
+ {
+ return instance1.Equals(instance2);
+ }
}
}
diff --git a/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Other/FlightPlan.cs b/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Other/FlightPlan.cs
index 2883b16..9f5111d 100644
--- a/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Other/FlightPlan.cs
+++ b/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Other/FlightPlan.cs
@@ -211,5 +211,15 @@ public object Clone()
}
public static FlightPlanBuilder Builder => FlightPlanBuilder.Create();
+
+ public static bool operator !=(FlightPlan instance1, FlightPlan instance2)
+ {
+ return !instance1.Equals(instance2);
+ }
+
+ public static bool operator ==(FlightPlan instance1, FlightPlan instance2)
+ {
+ return instance1.Equals(instance2);
+ }
}
}
diff --git a/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Other/GPS.cs b/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Other/GPS.cs
index 9556641..c8423d0 100644
--- a/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Other/GPS.cs
+++ b/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Other/GPS.cs
@@ -101,5 +101,15 @@ public object Clone()
}
public static GPSBuilder Builder => GPSBuilder.Create();
+
+ public static bool operator !=(GPS instance1, GPS instance2)
+ {
+ return !instance1.Equals(instance2);
+ }
+
+ public static bool operator ==(GPS instance1, GPS instance2)
+ {
+ return instance1.Equals(instance2);
+ }
}
}
diff --git a/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Servers/Server.cs b/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Servers/Server.cs
index d73d97d..6c6f9d6 100644
--- a/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Servers/Server.cs
+++ b/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Servers/Server.cs
@@ -126,5 +126,15 @@ public override object Clone()
}
public static ServerBuilder Builder => ServerBuilder.Create();
+
+ public static bool operator !=(Server instance1, Server instance2)
+ {
+ return !instance1.Equals(instance2);
+ }
+
+ public static bool operator ==(Server instance1, Server instance2)
+ {
+ return instance1.Equals(instance2);
+ }
}
}
From 050fd6dc26aeef100d6cfc010c32129f7306e507 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Peter=20Mal=C3=ADk?=
Date: Sun, 2 Jun 2019 00:28:23 +0200
Subject: [PATCH 08/17] Improve operator implementation
---
.../MalikP.IVAO.Library/Models/AbstractIvaoModel.cs | 4 ++--
.../MalikP.IVAO.Library/Models/Airports/Airport.cs | 4 ++--
.../Models/Clients/AirTrafficController.cs | 4 ++--
.../MalikP.IVAO.Library/Models/Clients/Client.cs | 4 ++--
.../MalikP.IVAO.Library/Models/Clients/FollowMe.cs | 4 ++--
.../MalikP.IVAO.Library/Models/Clients/Pilot.cs | 4 ++--
.../MalikP.IVAO.Library/Models/General/GeneralData.cs | 4 ++--
.../MalikP.IVAO.Library/Models/Other/Aerodrome.cs | 4 ++--
.../MalikP.IVAO.Library/Models/Other/FlightPlan.cs | 4 ++--
.../MalikP.IVAO.Library/Models/Other/GPS.cs | 4 ++--
.../MalikP.IVAO.Library/Models/Servers/Server.cs | 4 ++--
11 files changed, 22 insertions(+), 22 deletions(-)
diff --git a/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/AbstractIvaoModel.cs b/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/AbstractIvaoModel.cs
index b9f9bda..b76eb08 100644
--- a/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/AbstractIvaoModel.cs
+++ b/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/AbstractIvaoModel.cs
@@ -76,12 +76,12 @@ protected int GetItemHashCode(object item)
public static bool operator !=(AbstractIvaoModel instance1, AbstractIvaoModel instance2)
{
- return !instance1.Equals(instance2);
+ return !Equals(instance1, instance2);
}
public static bool operator ==(AbstractIvaoModel instance1, AbstractIvaoModel instance2)
{
- return instance1.Equals(instance2);
+ return Equals(instance1, instance2);
}
}
}
diff --git a/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Airports/Airport.cs b/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Airports/Airport.cs
index 9819ae7..00c07f8 100644
--- a/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Airports/Airport.cs
+++ b/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Airports/Airport.cs
@@ -90,12 +90,12 @@ public override object Clone()
public static bool operator !=(Airport instance1, Airport instance2)
{
- return !instance1.Equals(instance2);
+ return !Equals(instance1, instance2);
}
public static bool operator ==(Airport instance1, Airport instance2)
{
- return instance1.Equals(instance2);
+ return Equals(instance1, instance2);
}
}
}
diff --git a/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Clients/AirTrafficController.cs b/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Clients/AirTrafficController.cs
index 25bdb5b..f0c77e0 100644
--- a/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Clients/AirTrafficController.cs
+++ b/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Clients/AirTrafficController.cs
@@ -150,12 +150,12 @@ public override object Clone()
public static bool operator !=(AirTrafficController instance1, AirTrafficController instance2)
{
- return !instance1.Equals(instance2);
+ return !Equals(instance1, instance2);
}
public static bool operator ==(AirTrafficController instance1, AirTrafficController instance2)
{
- return instance1.Equals(instance2);
+ return Equals(instance1, instance2);
}
}
}
diff --git a/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Clients/Client.cs b/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Clients/Client.cs
index 51c2537..e319188 100644
--- a/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Clients/Client.cs
+++ b/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Clients/Client.cs
@@ -168,12 +168,12 @@ public override int GetHashCode()
public static bool operator !=(Client instance1, Client instance2)
{
- return !instance1.Equals(instance2);
+ return !Equals(instance1, instance2);
}
public static bool operator ==(Client instance1, Client instance2)
{
- return instance1.Equals(instance2);
+ return Equals(instance1, instance2);
}
}
}
\ No newline at end of file
diff --git a/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Clients/FollowMe.cs b/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Clients/FollowMe.cs
index 85b28e8..bc472dc 100644
--- a/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Clients/FollowMe.cs
+++ b/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Clients/FollowMe.cs
@@ -108,12 +108,12 @@ public override object Clone()
public static bool operator !=(FollowMe instance1, FollowMe instance2)
{
- return !instance1.Equals(instance2);
+ return !Equals(instance1, instance2);
}
public static bool operator ==(FollowMe instance1, FollowMe instance2)
{
- return instance1.Equals(instance2);
+ return Equals(instance1, instance2);
}
}
}
diff --git a/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Clients/Pilot.cs b/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Clients/Pilot.cs
index f520941..3837558 100644
--- a/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Clients/Pilot.cs
+++ b/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Clients/Pilot.cs
@@ -162,12 +162,12 @@ public override object Clone()
public static bool operator !=(Pilot instance1, Pilot instance2)
{
- return !instance1.Equals(instance2);
+ return !Equals(instance1, instance2);
}
public static bool operator ==(Pilot instance1, Pilot instance2)
{
- return instance1.Equals(instance2);
+ return Equals(instance1, instance2);
}
}
}
diff --git a/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/General/GeneralData.cs b/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/General/GeneralData.cs
index 5683b27..cbd98e9 100644
--- a/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/General/GeneralData.cs
+++ b/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/General/GeneralData.cs
@@ -122,12 +122,12 @@ public override object Clone()
public static bool operator !=(GeneralData instance1, GeneralData instance2)
{
- return !instance1.Equals(instance2);
+ return !Equals(instance1, instance2);
}
public static bool operator ==(GeneralData instance1, GeneralData instance2)
{
- return instance1.Equals(instance2);
+ return Equals(instance1, instance2);
}
}
}
\ No newline at end of file
diff --git a/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Other/Aerodrome.cs b/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Other/Aerodrome.cs
index 977c72e..3473c68 100644
--- a/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Other/Aerodrome.cs
+++ b/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Other/Aerodrome.cs
@@ -83,12 +83,12 @@ public override int GetHashCode()
public static bool operator !=(Aerodrome instance1, Aerodrome instance2)
{
- return !instance1.Equals(instance2);
+ return !Equals(instance1, instance2);
}
public static bool operator ==(Aerodrome instance1, Aerodrome instance2)
{
- return instance1.Equals(instance2);
+ return Equals(instance1, instance2);
}
}
}
diff --git a/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Other/FlightPlan.cs b/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Other/FlightPlan.cs
index 9f5111d..e921651 100644
--- a/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Other/FlightPlan.cs
+++ b/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Other/FlightPlan.cs
@@ -214,12 +214,12 @@ public object Clone()
public static bool operator !=(FlightPlan instance1, FlightPlan instance2)
{
- return !instance1.Equals(instance2);
+ return !Equals(instance1, instance2);
}
public static bool operator ==(FlightPlan instance1, FlightPlan instance2)
{
- return instance1.Equals(instance2);
+ return Equals(instance1, instance2);
}
}
}
diff --git a/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Other/GPS.cs b/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Other/GPS.cs
index c8423d0..ba2b21c 100644
--- a/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Other/GPS.cs
+++ b/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Other/GPS.cs
@@ -104,12 +104,12 @@ public object Clone()
public static bool operator !=(GPS instance1, GPS instance2)
{
- return !instance1.Equals(instance2);
+ return !Equals(instance1, instance2);
}
public static bool operator ==(GPS instance1, GPS instance2)
{
- return instance1.Equals(instance2);
+ return Equals(instance1, instance2);
}
}
}
diff --git a/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Servers/Server.cs b/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Servers/Server.cs
index 6c6f9d6..582279d 100644
--- a/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Servers/Server.cs
+++ b/src/MalikP. IVAO Library/MalikP.IVAO.Library/Models/Servers/Server.cs
@@ -129,12 +129,12 @@ public override object Clone()
public static bool operator !=(Server instance1, Server instance2)
{
- return !instance1.Equals(instance2);
+ return !Equals(instance1, instance2);
}
public static bool operator ==(Server instance1, Server instance2)
{
- return instance1.Equals(instance2);
+ return Equals(instance1, instance2);
}
}
}
From 96107708a0551cc25146414fb675157293bafc2d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Peter=20Mal=C3=ADk?=
Date: Sun, 2 Jun 2019 00:33:23 +0200
Subject: [PATCH 09/17] Remove unused and duplicated code
---
.../MalikP.IVAO.Library.App/Program.cs | 19 -------------------
1 file changed, 19 deletions(-)
diff --git a/src/MalikP. IVAO Library/MalikP.IVAO.Library.App/Program.cs b/src/MalikP. IVAO Library/MalikP.IVAO.Library.App/Program.cs
index 256761a..446ce6f 100644
--- a/src/MalikP. IVAO Library/MalikP.IVAO.Library.App/Program.cs
+++ b/src/MalikP. IVAO Library/MalikP.IVAO.Library.App/Program.cs
@@ -73,25 +73,6 @@ public static void Main(string[] args)
IModelCloner modelCloner = new ModelCloner();
Client m = modelCloner.Clone(pilotDataModels[0]);
-
- TrySerialize(item);
- }
-
- private static void TrySerialize(Client item)
- {
- using (MemoryStream ms = new MemoryStream())
- {
- DataContractSerializer ser = new DataContractSerializer(typeof(Pilot));
- ser.WriteObject(ms, item);
-
- byte[] d = ms.ToArray();
- string s = Encoding.UTF8.GetString(d);
-
- ms.Position = 0;
-
- XmlDictionaryReader reader = XmlDictionaryReader.CreateTextReader(ms, new XmlDictionaryReaderQuotas());
- object deserializedPerson = ser.ReadObject(reader, true);
- }
}
private static string GetPath()
From daa57c8a1a54adaa3a0c52a4c222b75eb2769293 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Peter=20Mal=C3=ADk?=
Date: Sun, 2 Jun 2019 00:46:54 +0200
Subject: [PATCH 10/17] Add IoC Extensions
---
.../MalikP. IVAO Library.sln | 8 +++-
.../MalikP.IVAO.Library.App/Program.cs | 1 +
.../IvaoIocExtensions.cs | 46 +++++++++++++++++++
.../MalikP.IVAO.Library.IoC.csproj | 15 ++++++
4 files changed, 69 insertions(+), 1 deletion(-)
create mode 100644 src/MalikP. IVAO Library/MalikP.IVAO.Library.IoC/IvaoIocExtensions.cs
create mode 100644 src/MalikP. IVAO Library/MalikP.IVAO.Library.IoC/MalikP.IVAO.Library.IoC.csproj
diff --git a/src/MalikP. IVAO Library/MalikP. IVAO Library.sln b/src/MalikP. IVAO Library/MalikP. IVAO Library.sln
index 58993c1..5a25e13 100644
--- a/src/MalikP. IVAO Library/MalikP. IVAO Library.sln
+++ b/src/MalikP. IVAO Library/MalikP. IVAO Library.sln
@@ -7,7 +7,9 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MalikP.IVAO.Library.App", "
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MalikP.IVAO.Library", "MalikP.IVAO.Library\MalikP.IVAO.Library.csproj", "{95BCECFF-D358-4FD8-BC81-3DF6C04DC8A2}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MalikP.IVAO.Library.Test", "MalikP.IVAO.Library.Test\MalikP.IVAO.Library.Test.csproj", "{6939AC5E-4B9B-40B3-8044-437D0E20102F}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MalikP.IVAO.Library.Test", "MalikP.IVAO.Library.Test\MalikP.IVAO.Library.Test.csproj", "{6939AC5E-4B9B-40B3-8044-437D0E20102F}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MalikP.IVAO.Library.IoC", "MalikP.IVAO.Library.IoC\MalikP.IVAO.Library.IoC.csproj", "{35EADA32-399B-4DB5-BBAD-773603F127A9}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -27,6 +29,10 @@ Global
{6939AC5E-4B9B-40B3-8044-437D0E20102F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6939AC5E-4B9B-40B3-8044-437D0E20102F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{6939AC5E-4B9B-40B3-8044-437D0E20102F}.Release|Any CPU.Build.0 = Release|Any CPU
+ {35EADA32-399B-4DB5-BBAD-773603F127A9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {35EADA32-399B-4DB5-BBAD-773603F127A9}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {35EADA32-399B-4DB5-BBAD-773603F127A9}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {35EADA32-399B-4DB5-BBAD-773603F127A9}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/src/MalikP. IVAO Library/MalikP.IVAO.Library.App/Program.cs b/src/MalikP. IVAO Library/MalikP.IVAO.Library.App/Program.cs
index 446ce6f..7d4465a 100644
--- a/src/MalikP. IVAO Library/MalikP.IVAO.Library.App/Program.cs
+++ b/src/MalikP. IVAO Library/MalikP.IVAO.Library.App/Program.cs
@@ -38,6 +38,7 @@ public static void Main(string[] args)
ICachedIVAOWhazzupDataSource dataSource = new CachedIVAOWhazzupDataSource(nonCachedLocalGZippedDataSource);
IParserFactory parserFactory = new ParserFactory();
+
IGeneralSelector generalSelector = new GeneralSelector();
IClientsSelector clientsSelector = new ClientsSelector();
IServersSelector serverSelector = new ServersSelector();
diff --git a/src/MalikP. IVAO Library/MalikP.IVAO.Library.IoC/IvaoIocExtensions.cs b/src/MalikP. IVAO Library/MalikP.IVAO.Library.IoC/IvaoIocExtensions.cs
new file mode 100644
index 0000000..a1493f8
--- /dev/null
+++ b/src/MalikP. IVAO Library/MalikP.IVAO.Library.IoC/IvaoIocExtensions.cs
@@ -0,0 +1,46 @@
+using MalikP.IVAO.Library.Common;
+using MalikP.IVAO.Library.Common.Enhancers;
+using MalikP.IVAO.Library.Common.Parsers;
+using MalikP.IVAO.Library.Common.Selector;
+using MalikP.IVAO.Library.Data.Source;
+using MalikP.IVAO.Library.Providers;
+
+namespace MalikP.IoC
+{
+ public static class IvaoIocExtensions
+ {
+ public static IIoC AddIVAOServices(this IIoC ioc)
+ {
+ ioc.Register();
+
+ //ioc.Register();
+ //ioc.Register();
+ //ioc.Register();
+ //ioc.Register();
+
+ ioc.Register();
+
+ ioc.Register();
+ ioc.Register();
+ ioc.Register();
+ ioc.Register();
+
+ ioc.Register();
+ ioc.Register();
+ ioc.Register();
+ ioc.Register();
+
+ ioc.Register();
+ ioc.Register();
+ ioc.Register();
+
+ ioc.Register();
+ ioc.Register();
+ ioc.Register();
+
+ ioc.Register();
+
+ return ioc;
+ }
+ }
+}
diff --git a/src/MalikP. IVAO Library/MalikP.IVAO.Library.IoC/MalikP.IVAO.Library.IoC.csproj b/src/MalikP. IVAO Library/MalikP.IVAO.Library.IoC/MalikP.IVAO.Library.IoC.csproj
new file mode 100644
index 0000000..e88a6dc
--- /dev/null
+++ b/src/MalikP. IVAO Library/MalikP.IVAO.Library.IoC/MalikP.IVAO.Library.IoC.csproj
@@ -0,0 +1,15 @@
+
+
+
+ netstandard2.0
+
+
+
+
+
+
+
+
+
+
+
From 74e603d48bac0abc330e004078ae3517ac2ed2d2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Peter=20Mal=C3=ADk?=
Date: Sun, 2 Jun 2019 01:20:28 +0200
Subject: [PATCH 11/17] Add ioc
---
.../MalikP.IVAO.Library.App.csproj | 5 ++
.../MalikP.IVAO.Library.App/Program.cs | 65 +++++++++++++++++-
.../MalikP.IVAO.Library.IoC/IVAOLibrary.ico | Bin 0 -> 321875 bytes
.../IvaoIocExtensions.cs | 8 ++-
.../MalikP.IVAO.Library.IoC.csproj | 34 +++++++--
.../IAirTrafficControllersProvider.cs | 2 +-
.../Providers/IFollowMesProvider.cs | 2 +-
.../Providers/IPilotsProvider.cs | 2 +-
8 files changed, 107 insertions(+), 11 deletions(-)
create mode 100644 src/MalikP. IVAO Library/MalikP.IVAO.Library.IoC/IVAOLibrary.ico
diff --git a/src/MalikP. IVAO Library/MalikP.IVAO.Library.App/MalikP.IVAO.Library.App.csproj b/src/MalikP. IVAO Library/MalikP.IVAO.Library.App/MalikP.IVAO.Library.App.csproj
index b00e50a..a9243d2 100644
--- a/src/MalikP. IVAO Library/MalikP.IVAO.Library.App/MalikP.IVAO.Library.App.csproj
+++ b/src/MalikP. IVAO Library/MalikP.IVAO.Library.App/MalikP.IVAO.Library.App.csproj
@@ -6,6 +6,11 @@
+
+
+
+
+
diff --git a/src/MalikP. IVAO Library/MalikP.IVAO.Library.App/Program.cs b/src/MalikP. IVAO Library/MalikP.IVAO.Library.App/Program.cs
index 7d4465a..4c38522 100644
--- a/src/MalikP. IVAO Library/MalikP.IVAO.Library.App/Program.cs
+++ b/src/MalikP. IVAO Library/MalikP.IVAO.Library.App/Program.cs
@@ -2,10 +2,9 @@
using System.IO;
using System.Linq;
using System.Reflection;
-using System.Runtime.Serialization;
-using System.Text;
-using System.Xml;
+using MalikP.IoC;
+using MalikP.IoC.Factories;
using MalikP.IVAO.Library.Common;
using MalikP.IVAO.Library.Common.Enhancers;
using MalikP.IVAO.Library.Common.Parsers;
@@ -27,6 +26,66 @@ internal static class Program
public static void Main(string[] args)
{
string path = GetPath();
+
+ OptionIoC(path);
+
+ OptionDirect(path);
+ }
+
+ private static void OptionIoC(string path)
+ {
+ IIoC ioc = Locator.GetContainer(new AdvancedContainerFactory());
+ ioc.AddIVAOServices();
+ ioc.Register()
+ .Extend()
+ .WithSpecific(path);
+
+ ioc.Register(d => new CachedIVAOWhazzupDataSource(d.Resolve()));
+
+ ICachedIVAOWhazzupDataSource dataSource = ioc.Resolve();
+
+ //IIVAOWhazzupDataSource nonCachedWebDataSource = new WebIVAOWhazzupDataSource("http://api.ivao.aero/getdata/whazzup/whazzup.txt");
+ //IIVAOWhazzupDataSource nonCachedWebGZippedDataSource = new WebGZippedIVAOWhazzupDataSource("http://api.ivao.aero/getdata/whazzup/whazzup.txt.gz", compression);
+
+ //IIVAOWhazzupDataSource nonCachedLocalDataSource = new LocalIVAOWhazzupDataSource(path);
+ //IIVAOWhazzupDataSource nonCachedLocalGZippedDataSource = new LocalGZippedIVAOWhazzupDataSource(path, compression);
+
+ IGeneralDataProvider generalDataProvider = ioc.Resolve();
+ IClientsProvider clientsDataProvider = ioc.Resolve();
+ IServersProvider serversDataProvider = ioc.Resolve();
+ IAirportsProvider airportsDataProvider = ioc.Resolve();
+
+ IClientsProvider atcClientsDataProvider = ioc.Resolve();
+ IClientsProvider pilotClientsDataProvider = ioc.Resolve();
+ IClientsProvider followMeClientsDataProvider = ioc.Resolve();
+
+ IEnumerable providers = ioc.ResolveAll();
+
+ List generalDataModels = generalDataProvider.GetData().ToList();
+ List clientDataModels = clientsDataProvider.GetData().ToList();
+ List serversDataModels = serversDataProvider.GetData().ToList();
+ List airportsDataModels = airportsDataProvider.GetData().ToList();
+
+ List atcDataModels = atcClientsDataProvider.GetData().ToList();
+ List pilotDataModels = pilotClientsDataProvider.GetData().ToList();
+ List followMeDataModels = followMeClientsDataProvider.GetData().ToList();
+
+ IAirTrafficControllerServerEnhancer atcServerEnhancer = ioc.Resolve();
+ IPilotServerEnhancer pilotServerEnhancer = ioc.Resolve();
+ IFollowMeServerEnhancer followMeServerEnhancer = ioc.Resolve();
+
+ atcDataModels = atcDataModels.Select(atcServerEnhancer.Enhance).Cast().ToList();
+ pilotDataModels = pilotDataModels.Select(pilotServerEnhancer.Enhance).Cast().ToList();
+ followMeDataModels = followMeDataModels.Select(followMeServerEnhancer.Enhance).Cast().ToList();
+
+ Client item = pilotDataModels.First();
+
+ IModelCloner modelCloner = ioc.Resolve();
+ Client m = modelCloner.Clone(pilotDataModels[0]);
+ }
+
+ private static void OptionDirect(string path)
+ {
IGZipCompression compression = new GZipCompression();
IIVAOWhazzupDataSource nonCachedWebDataSource = new WebIVAOWhazzupDataSource("http://api.ivao.aero/getdata/whazzup/whazzup.txt");
diff --git a/src/MalikP. IVAO Library/MalikP.IVAO.Library.IoC/IVAOLibrary.ico b/src/MalikP. IVAO Library/MalikP.IVAO.Library.IoC/IVAOLibrary.ico
new file mode 100644
index 0000000000000000000000000000000000000000..a7ba0590c0427148da49fc2e1fddea19f9f93a31
GIT binary patch
literal 321875
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