Porównaj commity

...

3 Commity

Autor SHA1 Wiadomość Data
dl2alf 0982b2d34f
Merge pull request #15 from dl2alf/V1.4
V1.4
2022-08-27 14:16:31 +02:00
dl2alf a32eb15ff5 V1.4.1.0 2022-08-27 14:13:47 +02:00
dl2alf 81f655791d
Merge pull request #2 from dl2alf/master
Merge V1.3.3.6 with V1.4.x
2022-01-03 10:51:02 +01:00
3525 zmienionych plików z 521060 dodań i 3709 usunięć

Wyświetl plik

@ -92,13 +92,7 @@
<ApplicationIcon>Resources\WizardHat.ico</ApplicationIcon>
</PropertyGroup>
<ItemGroup>
<Reference Include="Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\..\packages\Newtonsoft.Json.12.0.3\lib\net40\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Data.SQLite, Version=1.0.113.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=MSIL">
<HintPath>..\..\packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.113.3\lib\net40\System.Data.SQLite.dll</HintPath>
</Reference>
<Reference Include="System.Design" />
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
@ -192,7 +186,6 @@
<EmbeddedResource Include="ThemedTableLayoutPanel.bmp" />
</ItemGroup>
<ItemGroup>
<None Include="packages.config" />
<None Include="Resources\WizardHat.ico" />
<None Include="Resources\BackBtnStrip.png" />
<None Include="Resources\BackBtnStrip2.png" />
@ -246,11 +239,4 @@
<MSBuild Condition=" $(TargetFrameworkVersion.Replace(&quot;v&quot;,&quot;&quot;)) == 2.0 " Projects="$(MSBuildProjectFile)" Properties="TargetFrameworkVersion=v3.5" RunEachTargetSeparately="true" />
<MSBuild Condition=" $(TargetFrameworkVersion.Replace(&quot;v&quot;,&quot;&quot;)) == 3.5 " Projects="$(MSBuildProjectFile)" Properties="TargetFrameworkVersion=v4.0" RunEachTargetSeparately="true" />
</Target>
<Import Project="..\..\packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.113.3\build\net40\Stub.System.Data.SQLite.Core.NetFramework.targets" Condition="Exists('..\..\packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.113.3\build\net40\Stub.System.Data.SQLite.Core.NetFramework.targets')" />
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>
<ErrorText>Dieses Projekt verweist auf mindestens ein NuGet-Paket, das auf diesem Computer fehlt. Verwenden Sie die Wiederherstellung von NuGet-Paketen, um die fehlenden Dateien herunterzuladen. Weitere Informationen finden Sie unter "http://go.microsoft.com/fwlink/?LinkID=322105". Die fehlende Datei ist "{0}".</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('..\..\packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.113.3\build\net40\Stub.System.Data.SQLite.Core.NetFramework.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.113.3\build\net40\Stub.System.Data.SQLite.Core.NetFramework.targets'))" />
</Target>
</Project>

Wyświetl plik

@ -1,6 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Newtonsoft.Json" version="12.0.3" targetFramework="net40" />
<package id="Stub.System.Data.SQLite.Core.NetFramework" version="1.0.113.3" targetFramework="net40" />
<package id="System.Data.SQLite.Core" version="1.0.113.7" targetFramework="net40" />
</packages>

Wyświetl plik

@ -32,13 +32,13 @@
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.12.0.3\lib\net40\Newtonsoft.Json.dll</HintPath>
<Reference Include="Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.13.0.1\lib\net40\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Data.SQLite, Version=1.0.113.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=MSIL">
<HintPath>..\packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.113.3\lib\net40\System.Data.SQLite.dll</HintPath>
<Reference Include="System.Data.SQLite, Version=1.0.112.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=MSIL">
<HintPath>..\packages\System.Data.SQLite.Core.1.0.112.0\lib\net40\System.Data.SQLite.dll</HintPath>
</Reference>
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml.Linq" />
@ -93,12 +93,12 @@
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Import Project="..\packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.113.3\build\net40\Stub.System.Data.SQLite.Core.NetFramework.targets" Condition="Exists('..\packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.113.3\build\net40\Stub.System.Data.SQLite.Core.NetFramework.targets')" />
<Import Project="..\packages\System.Data.SQLite.Core.1.0.112.0\build\net40\System.Data.SQLite.Core.targets" Condition="Exists('..\packages\System.Data.SQLite.Core.1.0.112.0\build\net40\System.Data.SQLite.Core.targets')" />
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>
<ErrorText>Dieses Projekt verweist auf mindestens ein NuGet-Paket, das auf diesem Computer fehlt. Verwenden Sie die Wiederherstellung von NuGet-Paketen, um die fehlenden Dateien herunterzuladen. Weitere Informationen finden Sie unter "http://go.microsoft.com/fwlink/?LinkID=322105". Die fehlende Datei ist "{0}".</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('..\packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.113.3\build\net40\Stub.System.Data.SQLite.Core.NetFramework.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.113.3\build\net40\Stub.System.Data.SQLite.Core.NetFramework.targets'))" />
<Error Condition="!Exists('..\packages\System.Data.SQLite.Core.1.0.112.0\build\net40\System.Data.SQLite.Core.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\System.Data.SQLite.Core.1.0.112.0\build\net40\System.Data.SQLite.Core.targets'))" />
</Target>
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.

Wyświetl plik

@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Newtonsoft.Json" version="12.0.3" targetFramework="net40" />
<package id="Stub.System.Data.SQLite.Core.NetFramework" version="1.0.113.3" targetFramework="net40" />
<package id="System.Data.SQLite.Core" version="1.0.113.7" targetFramework="net40" />
<package id="Newtonsoft.Json" version="13.0.1" targetFramework="net40" />
<package id="System.Data.SQLite.Core" version="1.0.112.0" targetFramework="net40" />
</packages>

Wyświetl plik

@ -32,13 +32,13 @@
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.12.0.3\lib\net40\Newtonsoft.Json.dll</HintPath>
<Reference Include="Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.13.0.1\lib\net40\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Data.SQLite, Version=1.0.113.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=MSIL">
<HintPath>..\packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.113.3\lib\net40\System.Data.SQLite.dll</HintPath>
<Reference Include="System.Data.SQLite, Version=1.0.112.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=MSIL">
<HintPath>..\packages\System.Data.SQLite.Core.1.0.112.0\lib\net40\System.Data.SQLite.dll</HintPath>
</Reference>
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml.Linq" />
@ -96,12 +96,12 @@
</None>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Import Project="..\packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.113.3\build\net40\Stub.System.Data.SQLite.Core.NetFramework.targets" Condition="Exists('..\packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.113.3\build\net40\Stub.System.Data.SQLite.Core.NetFramework.targets')" />
<Import Project="..\packages\System.Data.SQLite.Core.1.0.112.0\build\net40\System.Data.SQLite.Core.targets" Condition="Exists('..\packages\System.Data.SQLite.Core.1.0.112.0\build\net40\System.Data.SQLite.Core.targets')" />
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>
<ErrorText>Dieses Projekt verweist auf mindestens ein NuGet-Paket, das auf diesem Computer fehlt. Verwenden Sie die Wiederherstellung von NuGet-Paketen, um die fehlenden Dateien herunterzuladen. Weitere Informationen finden Sie unter "http://go.microsoft.com/fwlink/?LinkID=322105". Die fehlende Datei ist "{0}".</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('..\packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.113.3\build\net40\Stub.System.Data.SQLite.Core.NetFramework.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.113.3\build\net40\Stub.System.Data.SQLite.Core.NetFramework.targets'))" />
<Error Condition="!Exists('..\packages\System.Data.SQLite.Core.1.0.112.0\build\net40\System.Data.SQLite.Core.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\System.Data.SQLite.Core.1.0.112.0\build\net40\System.Data.SQLite.Core.targets'))" />
</Target>
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.

Wyświetl plik

@ -62,7 +62,7 @@ namespace AirScout.Aircrafts
else if (((status & DOWNLOADFILESTATUS.NEWER) > 0) || ((status & DOWNLOADFILESTATUS.NOTNEWER) > 0))
{
string json = "";
using (StreamReader sr = new StreamReader(filename))
using (StreamReader sr = new StreamReader(filename.Replace(".zip", ".json")))
json = sr.ReadToEnd();
List<AirScout.Aircrafts.AircraftDesignator> ads = AircraftData.Database.AircraftFromJSON(json);
// check for invalid entries
@ -111,7 +111,7 @@ namespace AirScout.Aircrafts
else if (((status & DOWNLOADFILESTATUS.NEWER) > 0) || ((status & DOWNLOADFILESTATUS.NOTNEWER) > 0))
{
string json = "";
using (StreamReader sr = new StreamReader(filename))
using (StreamReader sr = new StreamReader(filename.Replace(".zip", ".json")))
json = sr.ReadToEnd();
List<AirScout.Aircrafts.AircraftTypeDesignator> tds = AircraftData.Database.AircraftTypeFromJSON(json);
// check for empty database
@ -150,7 +150,7 @@ namespace AirScout.Aircrafts
else if (((status & DOWNLOADFILESTATUS.NEWER) > 0) || ((status & DOWNLOADFILESTATUS.NOTNEWER) > 0))
{
string json = "";
using (StreamReader sr = new StreamReader(filename))
using (StreamReader sr = new StreamReader(filename.Replace(".zip", ".json")))
json = sr.ReadToEnd();
List<AirScout.Aircrafts.AircraftRegistrationDesignator> rds = AircraftData.Database.AircraftRegistrationFromJSON(json);
// check for empty database
@ -189,7 +189,7 @@ namespace AirScout.Aircrafts
else if (((status & DOWNLOADFILESTATUS.NEWER) > 0) || ((status & DOWNLOADFILESTATUS.NOTNEWER) > 0))
{
string json = "";
using (StreamReader sr = new StreamReader(filename))
using (StreamReader sr = new StreamReader(filename.Replace(".zip", ".json")))
json = sr.ReadToEnd();
List<AirScout.Aircrafts.AirportDesignator> pds = AircraftData.Database.AirportFromJSON(json);
// check for empty database
@ -228,7 +228,7 @@ namespace AirScout.Aircrafts
else if (((status & DOWNLOADFILESTATUS.NEWER) > 0) || ((status & DOWNLOADFILESTATUS.NOTNEWER) > 0))
{
string json = "";
using (StreamReader sr = new StreamReader(filename))
using (StreamReader sr = new StreamReader(filename.Replace(".zip", ".json")))
json = sr.ReadToEnd();
List<AirScout.Aircrafts.AirlineDesignator> lds = AircraftData.Database.AirlineFromJSON(json);
// check for empty database
@ -302,27 +302,27 @@ namespace AirScout.Aircrafts
this.ReportProgress(1, AircraftData.Database.GetDBStatus());
// update aircraft database
this.ReportProgress(0, "Updating aircraft types from web database...");
if (!ReadAircraftTypesFromURL(Properties.Settings.Default.Aircrafts_UpdateURL + "AircraftTypes.json", Path.Combine(TmpDirectory, "AircraftTypes.json")))
if (!ReadAircraftTypesFromURL(Properties.Settings.Default.Aircrafts_UpdateURL + "AircraftTypes.zip", Path.Combine(TmpDirectory, "AircraftTypes.zip")))
errors++;
if (this.CancellationPending)
break;
this.ReportProgress(0, "Updating airports from web database...");
if (!ReadAirportsFromURL(Properties.Settings.Default.Aircrafts_UpdateURL + "Airports.json", Path.Combine(TmpDirectory, "Airports.json")))
if (!ReadAirportsFromURL(Properties.Settings.Default.Aircrafts_UpdateURL + "Airports.zip", Path.Combine(TmpDirectory, "Airports.zip")))
errors++;
if (this.CancellationPending)
break;
this.ReportProgress(0, "Updating aircrafts from web database...");
if (!ReadAircraftsFromURL(Properties.Settings.Default.Aircrafts_UpdateURL + "Aircrafts.json", Path.Combine(TmpDirectory, "Aircrafts.json")))
if (!ReadAircraftsFromURL(Properties.Settings.Default.Aircrafts_UpdateURL + "Aircrafts.zip", Path.Combine(TmpDirectory, "Aircrafts.zip")))
errors++;
if (this.CancellationPending)
break;
this.ReportProgress(0, "Updating aircraft registrations from web database...");
if (!ReadAircraftRegistrationsFromURL(Properties.Settings.Default.Aircrafts_UpdateURL + "AircraftRegistrations.json", Path.Combine(TmpDirectory, "AircraftRegistrations.json")))
if (!ReadAircraftRegistrationsFromURL(Properties.Settings.Default.Aircrafts_UpdateURL + "AircraftRegistrations.zip", Path.Combine(TmpDirectory, "AircraftRegistrations.zip")))
errors++;
if (this.CancellationPending)
break;
this.ReportProgress(0, "Updating airlines from web database...");
if (!ReadAirlinesFromURL(Properties.Settings.Default.Aircrafts_UpdateURL + "Airlines.json", Path.Combine(TmpDirectory, "Airlines.json")))
if (!ReadAirlinesFromURL(Properties.Settings.Default.Aircrafts_UpdateURL + "Airlines.zip", Path.Combine(TmpDirectory, "Airlines.zip")))
errors++;
st.Stop();

Wyświetl plik

@ -0,0 +1,370 @@

using System;
using System.ComponentModel;
using System.Windows.Forms;
using System.Net;
using System.IO;
using System.Threading;
using System.Diagnostics;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Globalization;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using ScoutBase;
using ScoutBase.Core;
using System.Data.SQLite;
using System.Text;
namespace AirScout.Aircrafts
{
#region AircraftDatabaseUpdater
public class AircraftDatabaseUpdaterStartOptions
{
public string Name;
public string InstanceID;
public string SessionKey;
public string GetKeyURL;
public BACKGROUNDUPDATERSTARTOPTIONS Options;
}
// Background worker for aircraft database update
[DefaultPropertyAttribute("Name")]
public class AircraftDatabaseUpdater : BackgroundWorker
{
AircraftDatabaseUpdaterStartOptions StartOptions;
string Password;
public AircraftDatabaseUpdater() : base()
{
this.WorkerReportsProgress = true;
this.WorkerSupportsCancellation = true;
}
private bool ReadAircraftsFromURL(string url, string filename)
{
try
{
AutoDecompressionWebClient cl = new AutoDecompressionWebClient();
DOWNLOADFILESTATUS status = cl.DownloadFileIfNewer(url, filename, true, true, Password);
if (((status & DOWNLOADFILESTATUS.ERROR) > 0) && ((status & DOWNLOADFILESTATUS.ERROR) > 0))
{
this.ReportProgress(-1, "Error while downloading and extracting " + filename);
return false;
}
else if (((status & DOWNLOADFILESTATUS.NEWER) > 0) || ((status & DOWNLOADFILESTATUS.NOTNEWER) > 0))
{
string json = "";
using (StreamReader sr = new StreamReader(filename))
json = sr.ReadToEnd();
List<AirScout.Aircrafts.AircraftDesignator> ads = AircraftData.Database.AircraftFromJSON(json);
// check for invalid entries
foreach (AircraftDesignator ad in ads)
{
if (String.IsNullOrEmpty(ad.Call))
ad.Call = "[unknown]";
if (String.IsNullOrEmpty(ad.Reg))
ad.Reg = "[unknown]";
if (String.IsNullOrEmpty(ad.TypeCode))
ad.TypeCode = "[unknown]";
}
// check for empty database
if (AircraftData.Database.AircraftCount() == 0)
{
// do bulk insert
AircraftData.Database.AircraftBulkInsert(ads);
}
else
{
// do bulk update
AircraftData.Database.AircraftBulkInsertOrUpdateIfNewer(ads);
}
return true;
}
}
catch (Exception ex)
{
// Error loading database
this.ReportProgress(-1, "[" + url + "]: " + ex.ToString());
}
return false;
}
private bool ReadAircraftTypesFromURL(string url, string filename)
{
try
{
AutoDecompressionWebClient cl = new AutoDecompressionWebClient();
DOWNLOADFILESTATUS status = cl.DownloadFileIfNewer(url, filename, true, true, Password);
if (((status & DOWNLOADFILESTATUS.ERROR) > 0) && ((status & DOWNLOADFILESTATUS.ERROR) > 0))
{
this.ReportProgress(-1, "Error while downloading and extracting " + filename);
return false;
}
else if (((status & DOWNLOADFILESTATUS.NEWER) > 0) || ((status & DOWNLOADFILESTATUS.NOTNEWER) > 0))
{
string json = "";
using (StreamReader sr = new StreamReader(filename))
json = sr.ReadToEnd();
List<AirScout.Aircrafts.AircraftTypeDesignator> tds = AircraftData.Database.AircraftTypeFromJSON(json);
// check for empty database
if (AircraftData.Database.AircraftTypeCount() == 0)
{
// do bulk insert
AircraftData.Database.AircraftTypeBulkInsert(tds);
}
else
{
// do bulk update
AircraftData.Database.AircraftTypeBulkInsertOrUpdateIfNewer(tds);
}
return true;
}
}
catch (Exception ex)
{
// Error loading database
this.ReportProgress(-1, "[" + url + "]: " + ex.ToString());
}
return false;
}
private bool ReadAircraftRegistrationsFromURL(string url, string filename)
{
try
{
AutoDecompressionWebClient cl = new AutoDecompressionWebClient();
DOWNLOADFILESTATUS status = cl.DownloadFileIfNewer(url, filename, true, true, Password);
if (((status & DOWNLOADFILESTATUS.ERROR) > 0) && ((status & DOWNLOADFILESTATUS.ERROR) > 0))
{
this.ReportProgress(-1, "Error while downloading and extracting " + filename);
return false;
}
else if (((status & DOWNLOADFILESTATUS.NEWER) > 0) || ((status & DOWNLOADFILESTATUS.NOTNEWER) > 0))
{
string json = "";
using (StreamReader sr = new StreamReader(filename))
json = sr.ReadToEnd();
List<AirScout.Aircrafts.AircraftRegistrationDesignator> rds = AircraftData.Database.AircraftRegistrationFromJSON(json);
// check for empty database
if (AircraftData.Database.AircraftRegistrationCount() == 0)
{
// do bulk insert
AircraftData.Database.AircraftRegistrationBulkInsert(rds);
}
else
{
// do bulk update
AircraftData.Database.AircraftRegistrationBulkInsertOrUpdateIfNewer(rds);
}
return true;
}
}
catch (Exception ex)
{
// Error loading database
this.ReportProgress(-1, "[" + url + "]: " + ex.ToString());
}
return false;
}
private bool ReadAirportsFromURL(string url, string filename)
{
try
{
AutoDecompressionWebClient cl = new AutoDecompressionWebClient();
DOWNLOADFILESTATUS status = cl.DownloadFileIfNewer(url, filename, true, true, Password);
if (((status & DOWNLOADFILESTATUS.ERROR) > 0) && ((status & DOWNLOADFILESTATUS.ERROR) > 0))
{
this.ReportProgress(-1, "Error while downloading and extracting " + filename);
return false;
}
else if (((status & DOWNLOADFILESTATUS.NEWER) > 0) || ((status & DOWNLOADFILESTATUS.NOTNEWER) > 0))
{
string json = "";
using (StreamReader sr = new StreamReader(filename))
json = sr.ReadToEnd();
List<AirScout.Aircrafts.AirportDesignator> pds = AircraftData.Database.AirportFromJSON(json);
// check for empty database
if (AircraftData.Database.AirportCount() == 0)
{
// do bulk insert
AircraftData.Database.AirportBulkInsert(pds);
}
else
{
// do bulk update
AircraftData.Database.AirportBulkInsertOrUpdateIfNewer(pds);
}
return true;
}
}
catch (Exception ex)
{
// Error loading database
this.ReportProgress(-1, "[" + url + "]: " + ex.ToString());
}
return false;
}
private bool ReadAirlinesFromURL(string url, string filename)
{
try
{
AutoDecompressionWebClient cl = new AutoDecompressionWebClient();
DOWNLOADFILESTATUS status = cl.DownloadFileIfNewer(url, filename, true, true, Password);
if (((status & DOWNLOADFILESTATUS.ERROR) > 0) && ((status & DOWNLOADFILESTATUS.ERROR) > 0))
{
this.ReportProgress(-1, "Error while downloading and extracting " + filename);
return false;
}
else if (((status & DOWNLOADFILESTATUS.NEWER) > 0) || ((status & DOWNLOADFILESTATUS.NOTNEWER) > 0))
{
string json = "";
using (StreamReader sr = new StreamReader(filename))
json = sr.ReadToEnd();
List<AirScout.Aircrafts.AirlineDesignator> lds = AircraftData.Database.AirlineFromJSON(json);
// check for empty database
if (AircraftData.Database.AirlineCount() == 0)
{
// do bulk insert
AircraftData.Database.AirlineBulkInsert(lds);
}
else
{
// do bulk update
AircraftData.Database.AirlineBulkInsertOrUpdateIfNewer(lds);
}
return true;
}
}
catch (Exception ex)
{
// Error loading database
this.ReportProgress(-1, "[" + url + "]: " + ex.ToString());
}
return false;
}
protected override void OnDoWork(DoWorkEventArgs e)
{
StartOptions = (AircraftDatabaseUpdaterStartOptions)e.Argument;
this.ReportProgress(0, StartOptions.Name + "started.");
// name the thread for debugging
if (String.IsNullOrEmpty(Thread.CurrentThread.Name))
Thread.CurrentThread.Name = nameof(AircraftDatabaseUpdater);
// get update interval
// get current AirScout password phrase for Unzip from website
try
{
WebClient client = new WebClient();
string result = client.DownloadString(StartOptions.GetKeyURL +
"?id=" + StartOptions.InstanceID +
"&key=zip");
if (!result.StartsWith("Error:"))
{
result = result.Trim('\"');
Password = Encryption.OpenSSLDecrypt(result, StartOptions.SessionKey);
}
}
catch (Exception ex)
{
this.ReportProgress(-1, ex.ToString());
}
int interval = (int)Properties.Settings.Default.Database_BackgroundUpdate_Period * 60;
do
{
try
{
int errors = 0;
// check if any kind of update is enabled
if ((StartOptions.Options == BACKGROUNDUPDATERSTARTOPTIONS.RUNONCE) || (StartOptions.Options == BACKGROUNDUPDATERSTARTOPTIONS.RUNPERIODICALLY))
{
this.ReportProgress(0, "Updating database...");
// get temp directory
string TmpDirectory = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), Application.CompanyName, Application.ProductName, "Tmp").TrimEnd(Path.DirectorySeparatorChar);
if (!Directory.Exists(TmpDirectory))
Directory.CreateDirectory(TmpDirectory);
// reset database status
AircraftData.Database.SetDBStatus(DATABASESTATUS.UNDEFINED);
this.ReportProgress(1, AircraftData.Database.GetDBStatus());
Stopwatch st = new Stopwatch();
st.Start();
AircraftData.Database.SetDBStatus(DATABASESTATUS.UPDATING);
this.ReportProgress(1, AircraftData.Database.GetDBStatus());
// update aircraft database
this.ReportProgress(0, "Updating aircraft types from web database...");
if (!ReadAircraftTypesFromURL(Properties.Settings.Default.Aircrafts_UpdateURL + "AircraftTypes.json", Path.Combine(TmpDirectory, "AircraftTypes.json")))
errors++;
if (this.CancellationPending)
break;
this.ReportProgress(0, "Updating airports from web database...");
if (!ReadAirportsFromURL(Properties.Settings.Default.Aircrafts_UpdateURL + "Airports.json", Path.Combine(TmpDirectory, "Airports.json")))
errors++;
if (this.CancellationPending)
break;
this.ReportProgress(0, "Updating aircrafts from web database...");
if (!ReadAircraftsFromURL(Properties.Settings.Default.Aircrafts_UpdateURL + "Aircrafts.json", Path.Combine(TmpDirectory, "Aircrafts.json")))
errors++;
if (this.CancellationPending)
break;
this.ReportProgress(0, "Updating aircraft registrations from web database...");
if (!ReadAircraftRegistrationsFromURL(Properties.Settings.Default.Aircrafts_UpdateURL + "AircraftRegistrations.json", Path.Combine(TmpDirectory, "AircraftRegistrations.json")))
errors++;
if (this.CancellationPending)
break;
this.ReportProgress(0, "Updating airlines from web database...");
if (!ReadAirlinesFromURL(Properties.Settings.Default.Aircrafts_UpdateURL + "Airlines.json", Path.Combine(TmpDirectory, "Airlines.json")))
errors++;
st.Stop();
// display status
if (errors == 0)
{
AircraftData.Database.SetDBStatus(DATABASESTATUS.UPTODATE);
this.ReportProgress(1, AircraftData.Database.GetDBStatus());
this.ReportProgress(0, " Aircraft database update completed: " + st.Elapsed.ToString(@"hh\:mm\:ss"));
}
else
{
AircraftData.Database.SetDBStatus(DATABASESTATUS.ERROR);
this.ReportProgress(1, AircraftData.Database.GetDBStatus());
this.ReportProgress(0, " Aircraft database update completed with errors[" + errors.ToString() + "]: " + st.Elapsed.ToString(@"hh\:mm\:ss"));
}
// sleep when running periodically
if (StartOptions.Options == BACKGROUNDUPDATERSTARTOPTIONS.RUNPERIODICALLY)
{
int i = 0;
while (!this.CancellationPending && (i < interval))
{
Thread.Sleep(1000);
i++;
}
}
}
}
catch (Exception ex)
{
this.ReportProgress(-1, ex.ToString());
}
}
while (!this.CancellationPending && (StartOptions.Options == BACKGROUNDUPDATERSTARTOPTIONS.RUNPERIODICALLY));
if (this.CancellationPending)
this.ReportProgress(0, StartOptions.Name + " cancelled.");
else
this.ReportProgress(0, StartOptions.Name + " finished.");
}
#endregion
}
}

Wyświetl plik

@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Newtonsoft.Json" version="12.0.3" targetFramework="net40" />
<package id="Stub.System.Data.SQLite.Core.NetFramework" version="1.0.113.3" targetFramework="net40" />
<package id="System.Data.SQLite.Core" version="1.0.113.7" targetFramework="net40" />
<package id="Newtonsoft.Json" version="13.0.1" targetFramework="net40" />
<package id="System.Data.SQLite.Core" version="1.0.112.0" targetFramework="net40" />
</packages>

Wyświetl plik

@ -12,6 +12,8 @@
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<Deterministic>true</Deterministic>
<NuGetPackageImportStamp>
</NuGetPackageImportStamp>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>

Wyświetl plik

@ -32,13 +32,13 @@
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.12.0.3\lib\net40\Newtonsoft.Json.dll</HintPath>
<Reference Include="Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.13.0.1\lib\net40\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Data.SQLite, Version=1.0.113.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=MSIL">
<HintPath>..\packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.113.3\lib\net40\System.Data.SQLite.dll</HintPath>
<Reference Include="System.Data.SQLite, Version=1.0.112.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=MSIL">
<HintPath>..\packages\System.Data.SQLite.Core.1.0.112.0\lib\net40\System.Data.SQLite.dll</HintPath>
</Reference>
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
@ -51,6 +51,7 @@
<Compile Include="Enums.cs" />
<Compile Include="PlaneCategory.cs" />
<Compile Include="PlaneInfo.cs" />
<Compile Include="PlaneJSON.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
@ -73,12 +74,12 @@
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Import Project="..\packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.113.3\build\net40\Stub.System.Data.SQLite.Core.NetFramework.targets" Condition="Exists('..\packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.113.3\build\net40\Stub.System.Data.SQLite.Core.NetFramework.targets')" />
<Import Project="..\packages\System.Data.SQLite.Core.1.0.112.0\build\net40\System.Data.SQLite.Core.targets" Condition="Exists('..\packages\System.Data.SQLite.Core.1.0.112.0\build\net40\System.Data.SQLite.Core.targets')" />
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>
<ErrorText>Dieses Projekt verweist auf mindestens ein NuGet-Paket, das auf diesem Computer fehlt. Verwenden Sie die Wiederherstellung von NuGet-Paketen, um die fehlenden Dateien herunterzuladen. Weitere Informationen finden Sie unter "http://go.microsoft.com/fwlink/?LinkID=322105". Die fehlende Datei ist "{0}".</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('..\packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.113.3\build\net40\Stub.System.Data.SQLite.Core.NetFramework.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.113.3\build\net40\Stub.System.Data.SQLite.Core.NetFramework.targets'))" />
<Error Condition="!Exists('..\packages\System.Data.SQLite.Core.1.0.112.0\build\net40\System.Data.SQLite.Core.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\System.Data.SQLite.Core.1.0.112.0\build\net40\System.Data.SQLite.Core.targets'))" />
</Target>
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.

Wyświetl plik

@ -1,4 +1,5 @@
using ScoutBase.Core;
using Newtonsoft.Json.Linq;
using ScoutBase.Core;
using System;
using System.Collections.Generic;
using System.Data;
@ -149,5 +150,20 @@ namespace AirScout.Core
}
}
}
public static BandSettings FromJSON(JArray ar)
{
BandSettings settings = new BandSettings(true);
for (int i = 0; i < ar.Count; i++)
{
JToken row = ar.ElementAt(i);
for (int j = 0; j < row.Count(); j++)
{
object col = row[settings.Columns[j].ColumnName];
settings.Rows[i][j] = col;
}
}
return settings;
}
}
}

Wyświetl plik

@ -0,0 +1,153 @@
using ScoutBase.Core;
using System;
using System.Collections.Generic;
using System.Data;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Text;
namespace AirScout.Core
{
public class BandSetting
{
public double K_Factor;
public double F1_Clearance;
public double GroundClearance;
public double MaxDistance;
public double MaxSquint;
public double MaxElevation;
public BandSetting()
{
K_Factor = 1.33;
F1_Clearance = 0.6;
GroundClearance = 0;
MaxDistance = 10;
MaxSquint = double.MaxValue;
MaxElevation = double.MaxValue;
}
}
[Serializable]
public class BandSettings : DataTable
{
public BandSettings() : base("BANDSETTINGS")
{
this.Columns.Add("BAND");
this.Columns.Add("K-FACTOR", typeof(double));
this.Columns.Add("F1-CLEARANCE", typeof(double));
this.Columns.Add("GROUNDCLEARANCE", typeof(double));
this.Columns.Add("MAXDISTANCE", typeof(double));
this.Columns.Add("MAXSQUINT", typeof(double));
this.Columns.Add("MAXELEVATION", typeof(double));
DataColumn[] keys = new DataColumn[1];
keys[0] = this.Columns["BAND"];
this.PrimaryKey = keys;
}
public BandSettings(bool generatedefault) : base("BANDSETTINGS")
{
this.Columns.Add("BAND");
this.Columns.Add("K-FACTOR", typeof(double));
this.Columns.Add("F1-CLEARANCE", typeof(double));
this.Columns.Add("GROUNDCLEARANCE", typeof(double));
this.Columns.Add("MAXDISTANCE", typeof(double));
this.Columns.Add("MAXSQUINT", typeof(double));
this.Columns.Add("MAXELEVATION", typeof(double));
DataColumn[] keys = new DataColumn[1];
keys[0] = this.Columns["BAND"];
this.PrimaryKey = keys;
if (generatedefault)
GenerateDefault();
}
private void GenerateDefault()
{
if (this.Rows.Count > 0)
return;
// generate default rows
BAND[] bands = Bands.GetValuesExceptNoneAndAll();
foreach (BAND band in bands)
{
if (band != BAND.BNONE)
{
DataRow row;
row = this.NewRow();
row["BAND"] = Bands.GetStringValue(band);
row["GROUNDCLEARANCE"] = Properties.Settings.Default.Path_Default_Ground_Clearance;
row["MAXDISTANCE"] = Properties.Settings.Default.Path_Default_Max_Distance;
row["MAXSQUINT"] = Properties.Settings.Default.Path_Default_Max_Squint;
row["MAXELEVATION"] = Properties.Settings.Default.Path_Default_Max_Elevation;
// adjust values starting with V1.3.0.4
switch (band)
{
case BAND.B50M:
{
row["K-FACTOR"] = 1.6;
row["F1-CLEARANCE"] = 0.1;
break;
}
case BAND.B70M:
{
row["K-FACTOR"] = 1.6;
row["F1-CLEARANCE"] = 0.1;
break;
}
case BAND.B144M:
{
row["K-FACTOR"] = 1.5;
row["F1-CLEARANCE"] = 0.2;
break;
}
case BAND.B432M:
{
row["K-FACTOR"] = 1.4;
row["F1-CLEARANCE"] = 0.4;
break;
}
default:
{
row["K-FACTOR"] = Properties.Settings.Default.Path_Default_K_Factor;
row["F1-CLEARANCE"] = Properties.Settings.Default.Path_Default_F1_Clearance;
break;
}
}
this.Rows.Add(row);
}
}
}
public BandSetting this[BAND band]
{
get
{
DataRow row = this.Rows.Find(Bands.GetStringValue(band));
if (row != null)
{
BandSetting setting = new BandSetting();
try
{
// fill in the values from the bandsettings table
setting.K_Factor = (double)row["K-FACTOR"];
setting.F1_Clearance = (double)row["F1-CLEARANCE"];
setting.GroundClearance = (double)row["GROUNDCLEARANCE"];
setting.MaxDistance = (double)row["MAXDISTANCE"];
setting.MaxSquint = (double)row["MAXSQUINT"];
setting.MaxElevation = (double)row["MAXELEVATION"];
}
catch
{
}
return setting;
}
else
{
BandSetting setting = new BandSetting();
return setting;
}
}
}
}
}

Wyświetl plik

@ -0,0 +1,104 @@
using System;
using System.Collections.Generic;
using System.Collections;
using System.Linq;
using System.Text;
using System.Threading;
using System.ComponentModel;
using System.Globalization;
using System.Net;
using System.IO;
using System.Text.RegularExpressions;
using System.Data;
using ScoutBase.Core;
using System.Reflection;
namespace AirScout.Core
{
// holds the complete aircraft info for JSON serialization
public class PlaneJSON
{
public string Hex { get; set; }
public string Call { get; set; }
public double? Lat { get; set; }
public double? Lon { get; set; }
public double? Alt { get; set; }
public double? Track { get; set; }
public double? Speed { get; set; }
public string Type { get; set; }
public int? Category { get; set; }
public string Manufacturer { get; set; }
public string Model { get; set; }
public string Reg { get; set; }
public int? Time { get; set; }
public PlaneJSON()
{
Time = SupportFunctions.DateTimeToUNIXTime(DateTime.UtcNow);
Call = "";
Reg = "";
Hex = "";
Lat = 0;
Lon = 0;
Alt = 0;
Track = 0;
Speed = 0;
Type = "";
Manufacturer = "";
Model = "";
Category = (int)PLANECATEGORY.NONE;
}
public PlaneJSON(string hex, string call, double lat, double lon, double alt, double track, double speed, string type, PLANECATEGORY category, string manufacturer, string model, string reg, DateTime time)
{
Hex = hex;
Call = call;
Lat = lat;
Lon = lon;
Alt = alt;
Track = track;
Speed = speed;
Type = type;
Category = (int)category;
Manufacturer = manufacturer;
Model = model;
Reg = reg;
Time = SupportFunctions.DateTimeToUNIXTime(time.ToUniversalTime());
}
public override string ToString()
{
string s = "";
PropertyInfo[] properties = this.GetType().GetProperties();
foreach (PropertyInfo p in properties)
{
if (p.PropertyType.Name.ToUpper() == "STRING")
{
string v = (string)p.GetValue(this, null);
if (v == null)
v = "[null]";
else if (v.Length == 0)
v = "[empty]";
s = s + p.Name + ": " + v + "\n";
}
else if (p.PropertyType.Name.ToUpper() == "DATETIME")
{
DateTime dt = (DateTime)p.GetValue(this, null);
s = s + p.Name + ": " + dt.ToString("yyyy-MM-dd HH:mm:ss") + "\n";
}
else
{
object o = p.GetValue(this, null);
if (o == null)
s = s + p.Name + ": " + "[null]" + "\n";
else
s = s + p.Name + ": " + o.ToString() + "\n";
}
}
return s;
}
}
}

Wyświetl plik

@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Newtonsoft.Json" version="12.0.3" targetFramework="net40" />
<package id="Stub.System.Data.SQLite.Core.NetFramework" version="1.0.113.3" targetFramework="net40" />
<package id="System.Data.SQLite.Core" version="1.0.113.7" targetFramework="net40" />
<package id="Newtonsoft.Json" version="13.0.1" targetFramework="net40" />
<package id="System.Data.SQLite.Core" version="1.0.112.0" targetFramework="net40" />
</packages>

Wyświetl plik

@ -5,11 +5,11 @@
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{D953C82D-5881-4F5C-8335-1C54114BE28B}</ProjectGuid>
<ProjectGuid>{692CAF08-26D0-4D41-9CAC-BDA8D8BE6125}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>AirScout.PlaneFeeds.Plugin.RB24</RootNamespace>
<AssemblyName>AirScout.PlaneFeeds.Plugin.RB24</AssemblyName>
<RootNamespace>AirScout.PlaneFeeds.Plugin.AirScoutServer</RootNamespace>
<AssemblyName>AirScout.PlaneFeeds.Plugin.AirScoutServer</AssemblyName>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<Deterministic>true</Deterministic>
@ -49,7 +49,7 @@
</ItemGroup>
<ItemGroup>
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="RB24.cs" />
<Compile Include="AirScoutServer.cs" />
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
@ -57,6 +57,10 @@
</Compile>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\AirScout.Core\AirScout.Core.csproj">
<Project>{41b66be4-6086-4ae3-be31-c81ee6b10154}</Project>
<Name>AirScout.Core</Name>
</ProjectReference>
<ProjectReference Include="..\AirScout.PlaneFeeds.Plugin\AirScout.PlaneFeeds.Plugin.csproj">
<Project>{36945dbd-96c8-41e7-9168-f83c42e67af3}</Project>
<Name>AirScout.PlaneFeeds.Plugin</Name>

Wyświetl plik

@ -15,11 +15,12 @@ using System.Collections;
using System.Xml.Serialization;
using System.Xml.Linq;
using Newtonsoft.Json;
using AirScout.Core;
namespace AirScout.PlaneFeeds.Plugin.PlaneFinder
namespace AirScout.PlaneFeeds.Plugin.AirScoutServer
{
public class PlanefinderSettings
public class AirScoutServerSettings
{
[Browsable(false)]
[DefaultValue("")]
@ -36,7 +37,7 @@ namespace AirScout.PlaneFeeds.Plugin.PlaneFinder
[Browsable(true)]
[CategoryAttribute("Web Feed")]
[DescriptionAttribute("Base URL for website.")]
[DefaultValue("http://droidapp.pinkfroot.com/APPAPIDROID/v7/planeUpdateFAA.php?routetype=IATA&FAA=1&bounds=%MAXLAT%,%MINLAT%,%MINLON%,%MAXLON%")]
[DefaultValue("http://localhost:9880/planes.json")]
public string URL { get; set; }
[Browsable(true)]
@ -47,7 +48,7 @@ namespace AirScout.PlaneFeeds.Plugin.PlaneFinder
public int Timeout { get; set; }
public PlanefinderSettings()
public AirScoutServerSettings()
{
Default();
Load(true);
@ -174,15 +175,15 @@ namespace AirScout.PlaneFeeds.Plugin.PlaneFinder
[Export(typeof(IPlaneFeedPlugin))]
[ExportMetadata("Name", "PlaneFeedPlugin")]
public class PlaneFinderPlugin : IPlaneFeedPlugin
public class AirScoutServerPlugin : IPlaneFeedPlugin
{
private PlanefinderSettings Settings = new PlanefinderSettings();
private AirScoutServerSettings Settings = new AirScoutServerSettings();
public string Name
{
get
{
return "[WebFeed] www.planefinder.net";
return "[WebFeed] AirScout Server";
}
}
@ -190,9 +191,14 @@ namespace AirScout.PlaneFeeds.Plugin.PlaneFinder
{
get
{
return "Web feed from www.planefinder.net\n" +
"See https://planefinder.net/\n\n" +
"(c)AirScout(www.airscout.eu)";
return "Web feed from AirScout Server\n" +
"See http://www.airscout.eu\n\n" +
"(c)AirScout(www.airscout.eu)\n\n" +
"Use this feed to get data from\n" +
"another AirScout instance\n" +
"AirScout web server in future)\n\n" +
"Replace <localhost> with the right\n" +
"IP address.";
}
}
@ -232,13 +238,7 @@ namespace AirScout.PlaneFeeds.Plugin.PlaneFinder
{
get
{
return "This plane feed might fetch data from an Internet server via Deep Link\n" +
"technology(see http://en.wikipedia.org/wiki/Deep_link)\n." +
"The use is probably not intended by the website owners and could be changed in URL and data format frequently and without further notice.\n" +
"Furthermore, it might cause legal issues in some countries.\n" +
"By clicking on \"Accept\" you understand that you are\n\n" +
"DOING THAT ON YOUR OWN RISK\n\n" +
"The auhor of this software will not be responsible in any case.";
return "";
}
}
@ -289,6 +289,17 @@ namespace AirScout.PlaneFeeds.Plugin.PlaneFinder
// nothing to do
}
private DateTime UNIXTimeToDateTime(int ut)
{
if (ut == int.MinValue)
return DateTime.MinValue;
else if (ut == int.MaxValue)
return DateTime.MaxValue;
DateTime dt = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
return dt.AddSeconds(ut);
}
public PlaneFeedPluginPlaneInfoList GetPlanes(PlaneFeedPluginArgs args)
{
// intialize variables
@ -336,55 +347,27 @@ namespace AirScout.PlaneFeeds.Plugin.PlaneFinder
// JavaScriptSerializer js = new JavaScriptSerializer();
// dynamic root = js.Deserialize<dynamic>(json);
dynamic root = JsonConvert.DeserializeObject(json);
Console.WriteLine("[" + this.GetType().Name + "]: Created object from JSON is " + root.GetType().ToString());
// analyze json string for planes data
// get the planes position list
Console.WriteLine("[" + this.GetType().Name + "]: Getting root of planes list");
var aclist = root["planes"];
Console.WriteLine("[" + this.GetType().Name + "]: Created root object is " + aclist.GetType().ToString());
foreach (var ac in aclist)
List<PlaneJSON> aclist = JsonConvert.DeserializeObject <List<PlaneJSON>>(json);
Console.WriteLine("[" + this.GetType().Name + "]: Created object from JSON is " + aclist.GetType().ToString());
// analyze json string for planes data
foreach (PlaneJSON ac in aclist)
{
try
{
// different handling of reading JSON between Windows (Array) & Linux (ArrayList)
// access to data values itself is the same
int len = 0;
len = ac.Value.Count;
// skip if too few fields in record
if (len < 13)
continue;
PlaneFeedPluginPlaneInfo plane = new PlaneFeedPluginPlaneInfo();
// get hex first
plane.Hex = ac.Name.Trim().Replace("\"","");
// get position
plane.Lat = ReadPropertyDouble(ac, 4);
plane.Lon = ReadPropertyDouble(ac, 5);
// get altitude
plane.Alt = ReadPropertyDouble(ac, 6);
// get callsign
plane.Call = ReadPropertyString(ac, 5);
// get registration
plane.Reg = ReadPropertyString(ac, 2);
// get track
plane.Track = ReadPropertyDouble(ac, 7);
// get speed
plane.Speed = ReadPropertyDouble(ac, 8);
// get position timestamp
long l = ReadPropertyLong(ac,9);
if (l != long.MinValue)
{
DateTime timestamp = new System.DateTime(1970, 1, 1, 0, 0, 0, 0);
timestamp = timestamp.AddSeconds(l);
plane.Time = timestamp;
}
else
{
// skip plane if no valid timestamp found
continue;
}
// get type info
plane.Type = ReadPropertyString(ac, 0);
plane.Hex = !String.IsNullOrEmpty(ac.Hex)? ac.Hex : "";
plane.Call = !String.IsNullOrEmpty(ac.Call) ? ac.Call : "";
plane.Lat = (ac.Lat != null) ? (double)ac.Lat : double.NaN;
plane.Lon = (ac.Lon != null) ? (double)ac.Lon : double.NaN;
plane.Alt = (ac.Alt != null) ? (double)ac.Alt : double.NaN;
plane.Track = (ac.Track != null) ? (double)ac.Track : double.NaN;
plane.Speed = (ac.Speed != null) ? (double)ac.Speed : double.NaN;
plane.Type = !String.IsNullOrEmpty(ac.Type) ? ac.Type : "";
plane.Category = (ac.Category != null) ? (int)ac.Category : 0;
plane.Manufacturer = !String.IsNullOrEmpty(ac.Manufacturer) ? ac.Manufacturer : "";
plane.Model = !String.IsNullOrEmpty(ac.Model) ? ac.Model : "";
plane.Time = (ac.Time != null) ? UNIXTimeToDateTime((int)ac.Time) : DateTime.MinValue;
planes.Add(plane);
}
catch (Exception ex)
@ -622,5 +605,4 @@ namespace AirScout.PlaneFeeds.Plugin.PlaneFinder
}
}
}

Wyświetl plik

@ -5,12 +5,12 @@ using System.Runtime.InteropServices;
// Allgemeine Informationen über eine Assembly werden über die folgenden
// Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern,
// die einer Assembly zugeordnet sind.
[assembly: AssemblyTitle("AirScout.PlaneFeeds.Plugin.PlaneFinder")]
[assembly: AssemblyTitle("AirScout.PlaneFeeds.Plugin.AirScoutServer")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("AirScout.PlaneFeeds.Plugin.PlaneFinder")]
[assembly: AssemblyCopyright("Copyright © 2020")]
[assembly: AssemblyProduct("AirScout.PlaneFeeds.Plugin.AirScoutServer")]
[assembly: AssemblyCopyright("Copyright © 2022 DL2ALF")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
// Sie können alle Werte angeben oder Standardwerte für die Build- und Revisionsnummern verwenden,
// indem Sie "*" wie unten gezeigt eingeben:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.3.0.0")]
[assembly: AssemblyFileVersion("1.3.0.0")]
[assembly: AssemblyVersion("1.4.0.0")]
[assembly: AssemblyFileVersion("1.4.0.0")]

Wyświetl plik

@ -34,8 +34,11 @@
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.12.0.3\lib\net40\Newtonsoft.Json.dll</HintPath>
<Reference Include="BouncyCastle.Crypto, Version=1.8.9.0, Culture=neutral, PublicKeyToken=0e99375e54769942">
<HintPath>..\packages\BouncyCastle.1.8.9\lib\BouncyCastle.Crypto.dll</HintPath>
</Reference>
<Reference Include="Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.13.0.1\lib\net40\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.ComponentModel.Composition" />
@ -55,6 +58,7 @@
<DesignTimeSharedInput>True</DesignTimeSharedInput>
<DependentUpon>Settings.settings</DependentUpon>
</Compile>
<Compile Include="TLS.cs" />
</ItemGroup>
<ItemGroup>
<None Include="app.config" />

Wyświetl plik

@ -418,18 +418,26 @@ namespace AirScout.PlaneFeeds.Plugin.FlexJSON
if (Settings.Timeout <= 0)
throw new ArgumentException("The value for Timout is invalid: " + Settings.Timeout.ToString());
Console.WriteLine("[" + this.GetType().Name + "]: Creating web request: " + url);
HttpWebRequest webrequest = (HttpWebRequest)HttpWebRequest.Create(url);
webrequest.Referer = "";
webrequest.Timeout = (int)Settings.Timeout * 1000;
webrequest.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:72.0) Gecko/20100101 Firefox/72.0";
webrequest.Accept = "application/json, text/javascript, */*;q=0.01";
webrequest.AutomaticDecompression = System.Net.DecompressionMethods.Deflate | System.Net.DecompressionMethods.GZip;
Console.WriteLine("[" + this.GetType().Name + "]: Getting web response");
HttpWebResponse webresponse = (HttpWebResponse)webrequest.GetResponse();
Console.WriteLine("[" + this.GetType().Name + "]: Reading stream");
using (StreamReader sr = new StreamReader(webresponse.GetResponseStream()))
// check url and choose the according download mode
if (!url.ToLowerInvariant().StartsWith("https://"))
{
json = sr.ReadToEnd();
HttpWebRequest webrequest = (HttpWebRequest)HttpWebRequest.Create(url);
webrequest.Referer = "";
webrequest.Timeout = (int)Settings.Timeout * 1000;
webrequest.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:72.0) Gecko/20100101 Firefox/72.0";
webrequest.Accept = "application/json, text/javascript, */*;q=0.01";
webrequest.AutomaticDecompression = System.Net.DecompressionMethods.Deflate | System.Net.DecompressionMethods.GZip;
Console.WriteLine("[" + this.GetType().Name + "]: Getting web response");
HttpWebResponse webresponse = (HttpWebResponse)webrequest.GetResponse();
Console.WriteLine("[" + this.GetType().Name + "]: Reading stream");
using (StreamReader sr = new StreamReader(webresponse.GetResponseStream()))
{
json = sr.ReadToEnd();
}
}
else
{
json = TlsClient.DownloadFile(url, Settings.Timeout * 1000);
}
// save raw data to file if enabled
if (Settings.SaveToFile)

Wyświetl plik

@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
// Sie können alle Werte angeben oder Standardwerte für die Build- und Revisionsnummern verwenden,
// indem Sie "*" wie unten gezeigt eingeben:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.3.0.0")]
[assembly: AssemblyFileVersion("1.3.0.0")]
[assembly: AssemblyVersion("1.4.0.0")]
[assembly: AssemblyFileVersion("1.4.0.0")]

Wyświetl plik

@ -1,24 +1,28 @@
using Org.BouncyCastle.Crypto.Tls;
using Org.BouncyCastle.Security;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Net.Sockets;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
namespace System.Net
{
class VRSTlsClient : DefaultTlsClient
// result of ReadChunkedContent
public enum ReadResult
{
Error = -1,
MoreData = 0,
Finished = 0
}
public class TlsClient : DefaultTlsClient
{
string HostName;
public VRSTlsClient(string hostname)
public TlsClient(string hostname)
{
HostName = hostname;
}
@ -43,43 +47,52 @@ namespace System.Net
return clientExtensions;
}
private static bool ReadContent(Stream stream, int contentlength, int timeout, ref string response)
private static ReadResult ReadContent(Stream stream, int contentlength, int timeout, ref string response)
{
// set stop watch as timout
Stopwatch st = new Stopwatch();
st.Start();
string resp = "";
int count = 0;
// assign buffer
byte[] buff = new byte[1];
int bytesread = 0;
// read content bytewise
while (bytesread < contentlength)
try
{
bytesread += stream.Read(buff, 0, buff.Length);
// add it to response
resp += Encoding.ASCII.GetString(buff, 0, buff.Length);
if (st.ElapsedMilliseconds > timeout)
throw new TimeoutException("Connection timed out.");
// assign buffer
byte[] buff = new byte[1];
int bytesread = 0;
// read content bytewise
while (bytesread < contentlength)
{
bytesread += stream.Read(buff, 0, buff.Length);
// add it to response
resp += Encoding.ASCII.GetString(buff, 0, buff.Length);
if (st.ElapsedMilliseconds > timeout)
throw new TimeoutException("Connection timed out.");
}
string trailer = "";
// reassign buffer
buff = new byte[1];
// read stream bytewise until CRLFCRLF is detected, should be the next two bytes
do
{
count = stream.Read(buff, 0, buff.Length);
trailer += Encoding.ASCII.GetString(buff, 0, buff.Length);
if (st.ElapsedMilliseconds > timeout)
throw new TimeoutException("Connection timed out.");
}
while (!trailer.Contains("\r\n"));
// Console.WriteLine("Reading content [" + contentlength.ToString() + " bytes]: " + resp);
response += resp;
}
string trailer = "";
// reassign buffer
buff = new byte[1];
// read stream bytewise until CRLFCRLF is detected, should be the next two bytes
do
catch (Exception ex)
{
count = stream.Read(buff, 0, buff.Length);
trailer += Encoding.ASCII.GetString(buff, 0, buff.Length);
if (st.ElapsedMilliseconds > timeout)
throw new TimeoutException("Connection timed out.");
Console.WriteLine("Error while reading chunked content: " + ex.Message);
return ReadResult.Error;
}
while (!trailer.Contains("\r\n"));
// Console.WriteLine("Reading content [" + contentlength.ToString() + " bytes]: " + resp);
response += resp;
return true;
return ReadResult.MoreData;
}
private static bool ReadChunkedContent(Stream stream, int timeout, ref string response)
private static ReadResult ReadChunkedContent(Stream stream, int timeout, ref string response)
{
// set stop watch as timout
Stopwatch st = new Stopwatch();
@ -107,7 +120,7 @@ namespace System.Net
if (contentlength == 0)
{
Console.WriteLine("Reading chunked content finished");
return true;
return ReadResult.Finished;
}
int bytesread = 0;
// read content bytewise
@ -135,13 +148,14 @@ namespace System.Net
catch (Exception ex)
{
Console.WriteLine("Error while reading chunked content: " + ex.Message);
return ReadResult.Error;
}
// Console.WriteLine("Reading chunked content [" + contentlength.ToString() + " bytes]: " + resp);
response += resp;
return false;
return ReadResult.MoreData;
}
public static string DownloadFile(string url, int timeout, string apikey)
public static string DownloadFile(string url, int timeout, string apikey = "")
{
string response = "";
Uri uri = null;
@ -158,7 +172,7 @@ namespace System.Net
using (var client = new TcpClient(uri.Host, uri.Port))
{
var sr = new SecureRandom();
var cl = new VRSTlsClient(uri.Host);
var cl = new TlsClient(uri.Host);
var protocol = new TlsClientProtocol(client.GetStream(), sr);
protocol.Connect(cl);
@ -168,7 +182,10 @@ namespace System.Net
hdr.AppendLine("GET " + uri.PathAndQuery + " HTTP/1.1");
hdr.AppendLine("Host: " + uri.Host);
hdr.AppendLine("Content-Type: text/json; charset=utf-8");
hdr.AppendLine("api-auth:" + apikey);
if (!String.IsNullOrEmpty(apikey))
{
hdr.AppendLine("api-auth:" + apikey);
}
hdr.AppendLine("Connection: close");
hdr.AppendLine();
@ -197,7 +214,7 @@ namespace System.Net
if (header.Contains("Transfer-Encoding: chunked"))
{
// chunked transfer, read all chunks until complete
while (!ReadChunkedContent(stream, timeout, ref response))
while (ReadChunkedContent(stream, timeout, ref response) == ReadResult.MoreData)
{ }
}
else

Wyświetl plik

@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="BouncyCastle" version="1.8.9" targetFramework="net40" />
<package id="ILMerge" version="3.0.29" targetFramework="net40" />
<package id="ILMerge.MSBuild.Task" version="1.0.7" targetFramework="net40" />
<package id="Newtonsoft.Json" version="12.0.3" targetFramework="net40" />
<package id="Newtonsoft.Json" version="13.0.1" targetFramework="net40" />
</packages>

Wyświetl plik

@ -34,11 +34,11 @@
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="BouncyCastle.Crypto, Version=1.8.5.0, Culture=neutral, PublicKeyToken=0e99375e54769942">
<HintPath>..\packages\BouncyCastle.1.8.5\lib\BouncyCastle.Crypto.dll</HintPath>
<Reference Include="BouncyCastle.Crypto, Version=1.8.9.0, Culture=neutral, PublicKeyToken=0e99375e54769942">
<HintPath>..\packages\BouncyCastle.1.8.9\lib\BouncyCastle.Crypto.dll</HintPath>
</Reference>
<Reference Include="Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.12.0.3\lib\net40\Newtonsoft.Json.dll</HintPath>
<Reference Include="Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.13.0.1\lib\net40\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.ComponentModel.Composition" />

Wyświetl plik

@ -58,10 +58,23 @@ namespace AirScout.PlaneFeeds.Plugin.OpenSky
[DefaultValue("https://opensky-network.org/api/states/all?lamin=%MINLAT%&lomin=%MINLON%&lamax=%MAXLAT%&lomax=%MAXLON%")]
public string URL { get; set; }
[Browsable(true)]
[CategoryAttribute("Web Feed")]
[DescriptionAttribute("Username for Authentication (blank for anonymous)")]
[DefaultValue("")]
public string Username { get; set; }
[Browsable(true)]
[CategoryAttribute("Web Feed")]
[DescriptionAttribute("Password for Authentication (blank for anonymous)")]
[DefaultValue("")]
[PasswordPropertyText(true)]
public string Password { get; set; }
[Browsable(true)]
[CategoryAttribute("Web Feed")]
[DescriptionAttribute("Timeout for loading the site.")]
[DefaultValue(60)]
[DefaultValue(90)]
[XmlIgnore]
public int Timeout { get; set; }
@ -236,8 +249,8 @@ namespace AirScout.PlaneFeeds.Plugin.OpenSky
return "Web feed from the OpenSky Network.\n" +
"For details see https://opensky-network.org.\n\n" +
"As this is a community network, please consider to run a personal ADSB-receiver and to contribute your data to this network.\n\n" +
"This webfeed forces TLS1.2 transport layer security. Though this plugin is compiled for .NET4.0 it needs .NET4.5 or higher installed on this machine to work.\n\n" +
"This webfeed will probably not work on Windows XP and Linux/Mono systems";
"The daily limit for anonymous requests to OpenSky Network is 100. You can extend the limit to 1000 if you are an registerd user.\n" +
"For this, please enter your username & password here.";
}
}
public bool HasSettings
@ -354,7 +367,16 @@ namespace AirScout.PlaneFeeds.Plugin.OpenSky
// {
// json = sr.ReadToEnd();
// }
json = OSNTlsClient.DownloadFile(url, Settings.Timeout * 1000);
DateTime downloadstart = DateTime.UtcNow;
json = OSNTlsClient.DownloadFile(url, Settings.Timeout * 1000, Settings.Username, Settings.Password);
Console.WriteLine("[" + this.GetType().Name + "]: Content downloaded, " + (DateTime.UtcNow - downloadstart).TotalMilliseconds.ToString("F0") + "ms.");
// check for errors
if (!json.StartsWith("{"))
{
// report the first characters of response
throw new Exception("Response: " + json.Substring(0, 80));
}
// save raw data to file if enabled
if (Settings.SaveToFile)
{
@ -385,9 +407,9 @@ namespace AirScout.PlaneFeeds.Plugin.OpenSky
continue;
PlaneFeedPluginPlaneInfo plane = new PlaneFeedPluginPlaneInfo();
// get hex first
plane.Hex = ReadPropertyString(ac, 0).ToUpper();
plane.Hex = ReadPropertyString(ac, 0).ToUpper().Trim();
// get callsign
plane.Call = ReadPropertyString(ac, 1);
plane.Call = ReadPropertyString(ac, 1).ToUpperInvariant().Trim();
// get position
plane.Lon = ReadPropertyDouble(ac, 5);
plane.Lat = ReadPropertyDouble(ac, 6);
@ -414,6 +436,16 @@ namespace AirScout.PlaneFeeds.Plugin.OpenSky
}
// get type info
plane.Type = ReadPropertyString(ac, 5);
// discard planes on ground
bool onground = ReadPropertyBool(ac, 8);
if (onground)
continue;
// discard planes stopped
if (plane.Speed <= 0)
continue;
planes.Add(plane);
}
catch (Exception ex)
@ -442,7 +474,6 @@ namespace AirScout.PlaneFeeds.Plugin.OpenSky
// ************************************* Helpers ****************************************************
[System.Diagnostics.DebuggerNonUserCode]
private string ReadPropertyString(dynamic o, int propertyindex)
{
string s = null;
@ -450,55 +481,58 @@ namespace AirScout.PlaneFeeds.Plugin.OpenSky
{
s = o[propertyindex];
}
catch
catch (Exception ex)
{
// do nothing if something went wrong
Console.WriteLine("[ReadPropertyString]: " + ex.ToString());
}
return s;
}
[System.Diagnostics.DebuggerNonUserCode]
private int ReadPropertyInt(dynamic o, int propertyindex)
{
int i = int.MinValue;
double d = ReadPropertyDouble(o, propertyindex);
if ((d != double.MinValue) && (d >= int.MinValue) && (d <= int.MaxValue))
i = (int)d;
try
{
double d = ReadPropertyDouble(o, propertyindex);
if ((d != double.MinValue) && (d >= int.MinValue) && (d <= int.MaxValue))
i = (int)d;
}
catch
{
// do nothing if something went wrong
}
return i;
}
[System.Diagnostics.DebuggerNonUserCode]
private double ReadPropertyDouble(dynamic o, int propertyindex)
{
double d = double.MinValue;
try
{
string s = o[propertyindex].ToString(CultureInfo.InvariantCulture);
d = double.Parse(s, CultureInfo.InvariantCulture);
string s = o[propertyindex].ToString(CultureInfo.InvariantCulture).Trim();
// check for special values
if (String.IsNullOrEmpty(s))
d = double.MinValue;
else if (s.ToUpperInvariant().StartsWith("-INF"))
d = double.MinValue;
else if (s.ToUpperInvariant().StartsWith("+INF"))
d = double.MaxValue;
else if (s.ToUpperInvariant().StartsWith("NAN"))
d = double.NaN;
else if (s.ToUpperInvariant().StartsWith("NULL"))
d = double.NaN;
else
d = double.Parse(s, CultureInfo.InvariantCulture);
}
catch
catch (Exception ex)
{
// do nothing if something went wrong
Console.WriteLine("[ReadPropertyDouble] got invalid value = \"" + o[propertyindex].ToString() + "\": " + ex.ToString());
}
return d;
}
[System.Diagnostics.DebuggerNonUserCode]
private long ReadPropertyLong(dynamic o, int propertyindex)
{
long l = long.MinValue;
try
{
l = long.Parse(o[propertyindex].ToString());
}
catch
{
// do nothing if something went wrong
}
return l;
}
[System.Diagnostics.DebuggerNonUserCode]
private bool ReadPropertyBool(dynamic o, int propertyindex)
{
bool b = false;
@ -507,9 +541,10 @@ namespace AirScout.PlaneFeeds.Plugin.OpenSky
string s = o[propertyindex].ToString();
b = s.ToLower() == "true";
}
catch
catch (Exception ex)
{
// do nothing if something went wrong
Console.WriteLine("[ReadPropertyBool]: " + ex.ToString());
}
return b;
}

Wyświetl plik

@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
// Sie können alle Werte angeben oder Standardwerte für die Build- und Revisionsnummern verwenden,
// indem Sie "*" wie unten gezeigt eingeben:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.3.3.1")]
[assembly: AssemblyFileVersion("1.3.3.1")]
[assembly: AssemblyVersion("1.4.1.0")]
[assembly: AssemblyFileVersion("1.4.1.0")]

Wyświetl plik

@ -3,6 +3,7 @@ using Org.BouncyCastle.Security;
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.IO;
using System.Linq;
@ -51,17 +52,21 @@ namespace System.Net
string resp = "";
int count = 0;
// assign buffer
byte[] buff = new byte[1];
byte[] buff = new byte[1024];
int bytesread = 0;
// read content bytewise
// read content blockwise
while (bytesread < contentlength)
{
int bytestoread = buff.Length - bytesread;
if (bytestoread > buff.Length)
bytestoread = buff.Length;
bytesread += stream.Read(buff, 0, buff.Length);
// add it to response
resp += Encoding.ASCII.GetString(buff, 0, buff.Length);
if (st.ElapsedMilliseconds > timeout)
throw new TimeoutException("Connection timed out.");
}
/*
string trailer = "";
// reassign buffer
buff = new byte[1];
@ -74,6 +79,7 @@ namespace System.Net
throw new TimeoutException("Connection timed out.");
}
while (!trailer.Contains("\r\n"));
*/
Console.WriteLine("Reading content [" + contentlength.ToString() + " bytes]: " + resp);
response += resp;
return true;
@ -89,52 +95,68 @@ namespace System.Net
int count = 0;
string strcontentlength = "";
int contentlength = 0;
int bytesread = 0;
// chunked transfer, first line should contain content length
// read stream bytewise until CRLF is detected
do
try
{
count = stream.Read(buff, 0, buff.Length);
strcontentlength += Encoding.ASCII.GetString(buff, 0, buff.Length);
if (st.ElapsedMilliseconds > timeout)
throw new TimeoutException("Connection timed out.");
do
{
count = stream.Read(buff, 0, buff.Length);
strcontentlength += Encoding.ASCII.GetString(buff, 0, buff.Length);
if (st.ElapsedMilliseconds > timeout)
throw new TimeoutException("Connection timed out.");
}
while (!strcontentlength.Contains("\r\n"));
strcontentlength = strcontentlength.Replace("\r\n", "");
contentlength = int.Parse(strcontentlength, System.Globalization.NumberStyles.HexNumber);
// finished reading all chunks
if (contentlength == 0)
{
Console.WriteLine("Reading chunked content finished");
return true;
}
// re-assign buffer
buff = new byte[contentlength];
// read content in 1kByte chunks until contentlength is reached
while (bytesread < contentlength)
{
int bytestoread = buff.Length - bytesread;
if (bytestoread > buff.Length)
bytestoread = buff.Length;
bytesread += stream.Read(buff, bytesread, bytestoread);
// add it to response
if (st.ElapsedMilliseconds > timeout)
throw new TimeoutException("Connection timed out.");
}
resp += Encoding.ASCII.GetString(buff, 0, buff.Length);
string trailer = "";
// reassign buffer
buff = new byte[1];
// read stream bytewise until CRLFCRLF is detected, should be the next two bytes
do
{
count = stream.Read(buff, 0, buff.Length);
trailer += Encoding.ASCII.GetString(buff, 0, buff.Length);
if (st.ElapsedMilliseconds > timeout)
throw new TimeoutException("Connection timed out.");
}
while (!trailer.Contains("\r\n"));
}
while (!strcontentlength.Contains("\r\n"));
strcontentlength = strcontentlength.Replace("\r\n", "");
contentlength = int.Parse(strcontentlength, System.Globalization.NumberStyles.HexNumber);
// finished reading all chunks
if (contentlength == 0)
catch (Exception ex)
{
Console.WriteLine("Reading chunked content finished");
Console.WriteLine("Error while reading chunked content: " + ex.Message);
return true;
}
int bytesread = 0;
// read content bytewise
while (bytesread < contentlength)
{
bytesread += stream.Read(buff, 0, buff.Length);
// add it to response
resp += Encoding.ASCII.GetString(buff, 0, buff.Length);
if (st.ElapsedMilliseconds > timeout)
throw new TimeoutException("Connection timed out.");
}
string trailer = "";
// reassign buffer
buff = new byte[1];
// read stream bytewise until CRLFCRLF is detected, should be the next two bytes
do
{
count = stream.Read(buff, 0, buff.Length);
trailer += Encoding.ASCII.GetString(buff, 0, buff.Length);
if (st.ElapsedMilliseconds > timeout)
throw new TimeoutException("Connection timed out.");
}
while (!trailer.Contains("\r\n"));
Console.WriteLine("Reading chunked content [" + contentlength.ToString() + " bytes]: " + resp);
// Console.WriteLine("Reading chunked content [" + contentlength.ToString() + " bytes]: " + resp);
response += resp;
return false;
}
public static string DownloadFile(string url, int timeout)
public static string DownloadFile(string url, int timeout, string username, string password)
{
string response = "";
Uri uri = null;
@ -162,6 +184,14 @@ namespace System.Net
hdr.AppendLine("Host: " + uri.Host);
hdr.AppendLine("Content-Type: text/json; charset=utf-8");
hdr.AppendLine("Connection: close");
// include authorization if username/password are not empty
if (!String.IsNullOrEmpty(username) && !String.IsNullOrEmpty(password))
{
// Base64 encode username:password
string s = Convert.ToBase64String(Encoding.UTF8.GetBytes(username + ":" + password));
hdr.AppendLine("Authorization: Basic " + s);
}
hdr.AppendLine();
var dataToSend = Encoding.ASCII.GetBytes(hdr.ToString());

Wyświetl plik

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="BouncyCastle" version="1.8.5" targetFramework="net40" />
<package id="BouncyCastle" version="1.8.9" targetFramework="net40" />
<package id="ILMerge" version="3.0.29" targetFramework="net40" />
<package id="ILMerge.MSBuild.Task" version="1.0.7" targetFramework="net40" />
<package id="Newtonsoft.Json" version="12.0.3" targetFramework="net40" />
<package id="Newtonsoft.Json" version="13.0.1" targetFramework="net40" />
</packages>

Wyświetl plik

@ -1,36 +0,0 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// Allgemeine Informationen über eine Assembly werden über die folgenden
// Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern,
// die einer Assembly zugeordnet sind.
[assembly: AssemblyTitle("AirScout.PlaneFeeds.Plugin.PlaneFinder")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("AirScout.PlaneFeeds.Plugin.PlaneFinder")]
[assembly: AssemblyCopyright("Copyright © 2020")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Durch Festlegen von ComVisible auf FALSE werden die Typen in dieser Assembly
// für COM-Komponenten unsichtbar. Wenn Sie auf einen Typ in dieser Assembly von
// COM aus zugreifen müssen, sollten Sie das ComVisible-Attribut für diesen Typ auf "True" festlegen.
[assembly: ComVisible(false)]
// Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird
[assembly: Guid("db85e98a-e209-49d0-b6cf-6cdd5b8e20e3")]
// Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten:
//
// Hauptversion
// Nebenversion
// Buildnummer
// Revision
//
// Sie können alle Werte angeben oder Standardwerte für die Build- und Revisionsnummern verwenden,
// indem Sie "*" wie unten gezeigt eingeben:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.3.2.0")]
[assembly: AssemblyFileVersion("1.3.2.0")]

Wyświetl plik

@ -1,617 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
using System.ComponentModel.Composition;
using System.ComponentModel;
using System.Globalization;
using AirScout.PlaneFeeds.Plugin.MEFContract;
using System.Diagnostics;
using System.Net;
using System.IO;
using System.Web.Script.Serialization;
using System.Collections;
using System.Xml.Serialization;
using System.Xml.Linq;
namespace AirScout.PlaneFeeds.Plugin.RB24
{
public class RB24Settings
{
[Browsable(false)]
[DefaultValue("")]
[XmlIgnore]
public string DisclaimerAccepted { get; set; }
[Browsable(true)]
[CategoryAttribute("Web Feed")]
[DescriptionAttribute("Save downloaded JSON to file")]
[DefaultValue(false)]
[XmlIgnore]
public bool SaveToFile { get; set; }
[Browsable(true)]
[CategoryAttribute("Web Feed")]
[DescriptionAttribute("Base URL for website.")]
[DefaultValue("http://data.rb24.com/live?&bounds=%MAXLAT%,%MINLAT%,%MAXLON%,%MINLON%&designator=iata&ff=false&os=web&adsb=true&asdi=true&ocea=true&mlat=true&sate=true&uat=true&hfdl=true&esti=true&asdex=true&diverted=false&delayed=false&isga=false&ground=true&onair=true")]
public string URL { get; set; }
[Browsable(true)]
[CategoryAttribute("Web Feed")]
[DescriptionAttribute("Timeout for loading the site.")]
[DefaultValue(30)]
[XmlIgnore]
public int Timeout { get; set; }
public RB24Settings()
{
Default();
Load(true);
}
/// <summary>
/// Sets all properties to their default value according to the [DefaultValue=] attribute
/// </summary>
public void Default()
{
// set all properties to their default values according to definition in [DeafultValue=]
foreach (var p in this.GetType().GetProperties())
{
try
{
// initialize all properties with default value if set
if (Attribute.IsDefined(p, typeof(DefaultValueAttribute)))
{
p.SetValue(this, ((DefaultValueAttribute)Attribute.GetCustomAttribute(
p, typeof(DefaultValueAttribute)))?.Value, null);
}
}
catch (Exception ex)
{
Console.WriteLine("[" + this.GetType().Name + "]: Cannot set default value of: " + p.Name + ", " + ex.Message);
}
}
}
/// <summary>
/// Loads settings from a XML-formatted configuration file into settings.
/// </summary>
/// <param name="loadall">If true, ignore the [XmlIgnore] attribute, e.g. load all settings available in the file.<br>If false, load only settings without [XmlIgore] attrbute.</br></param>
/// <param name="filename">The filename of the settings file.</param>
public void Load(bool loadall, string filename = "")
{
// use standard filename if empty
// be careful because Linux file system is case sensitive
if (String.IsNullOrEmpty(filename))
filename = new Uri(Assembly.GetExecutingAssembly().GetName().CodeBase.Replace(".dll", ".cfg").Replace(".DLL", ".CFG")).LocalPath;
// do nothing if file not exists
if (!File.Exists(filename))
return;
try
{
string xml = "";
using (StreamReader sr = new StreamReader(File.OpenRead(filename)))
{
xml = sr.ReadToEnd();
}
XDocument xdoc = XDocument.Parse(xml);
PropertyInfo[] properties = this.GetType().GetProperties();
foreach (PropertyInfo p in properties)
{
if (!loadall)
{
// check on XmlIgnore attribute, skip if set
object[] attr = p.GetCustomAttributes(typeof(XmlIgnoreAttribute), false);
if (attr.Length > 0)
continue;
}
try
{
// get matching element
XElement typenode = xdoc.Element(this.GetType().Name);
if (typenode != null)
{
XElement element = typenode.Element(p.Name);
if (element != null)
p.SetValue(this, Convert.ChangeType(element.Value, p.PropertyType), null);
}
}
catch (Exception ex)
{
Console.WriteLine("[" + this.GetType().Name + "]: Error while loading property[" + p.Name + " from " + filename + ", " + ex.Message);
}
}
}
catch (Exception ex)
{
Console.WriteLine("[" + this.GetType().Name + "]: Cannot load settings from " + filename + ", " + ex.Message);
}
}
/// <summary>
/// Saves settings from settings into a XML-formatted configuration file
/// </summary>
/// <param name="saveall">If true, ignore the [XmlIgnore] attribute, e.g. save all settings.<br>If false, save only settings without [XmlIgore] attrbute.</param>
/// <param name="filename">The filename of the settings file.</param>
public void Save(bool saveall, string filename = "")
{
// use standard filename if empty
// be careful because Linux file system is case sensitive
if (String.IsNullOrEmpty(filename))
filename = new Uri(Assembly.GetExecutingAssembly().GetName().CodeBase.Replace(".dll", ".cfg").Replace(".DLL", ".CFG")).LocalPath;
XmlAttributeOverrides overrides = new XmlAttributeOverrides();
if (saveall)
{
// ovverride the XmlIgnore attributes to get all serialized
PropertyInfo[] properties = this.GetType().GetProperties();
foreach (PropertyInfo p in properties)
{
XmlAttributes attribs = new XmlAttributes { XmlIgnore = false };
overrides.Add(this.GetType(), p.Name, attribs);
}
}
try
{
using (StreamWriter sw = new StreamWriter(File.Create(filename)))
{
XmlSerializer s = new XmlSerializer(this.GetType(), overrides);
s.Serialize(sw, this);
}
}
catch (Exception ex)
{
throw new InvalidOperationException("[" + this.GetType().Name + "]: Cannot save settings to " + filename + ", " + ex.Message);
}
}
}
[Export(typeof(IPlaneFeedPlugin))]
[ExportMetadata("Name", "PlaneFeedPlugin")]
public class RB24Plugin : IPlaneFeedPlugin
{
private RB24Settings Settings = new RB24Settings();
public string Name
{
get
{
return "[WebFeed] www.radarbox24.com";
}
}
public string Info
{
get
{
return "Web feed from www.radarbox24.com\n" +
"See https:///www.radarbox24.com\n\n" +
"(c)AirScout(www.airscout.eu)\n\n" +
"CAUTION: Radarbox24 does not provide HEX - values, the feed is getting the values only from internal database using plane registry values";
}
}
public string Version
{
get
{
return Assembly.GetExecutingAssembly().GetName().Version.ToString();
}
}
public bool HasSettings
{
get
{
return true;
}
}
public bool CanImport
{
get
{
return false;
}
}
public bool CanExport
{
get
{
return false;
}
}
public string Disclaimer
{
get
{
return "This plane feed might fetch data from an Internet server via Deep Link\n" +
"technology(see http://en.wikipedia.org/wiki/Deep_link)\n." +
"The use is probably not intended by the website owners and could be changed in URL and data format frequently and without further notice.\n" +
"Furthermore, it might cause legal issues in some countries.\n" +
"By clicking on \"Accept\" you understand that you are\n\n" +
"DOING THAT ON YOUR OWN RISK\n\n" +
"The auhor of this software will not be responsible in any case.";
}
}
public string DisclaimerAccepted
{
get
{
return Settings.DisclaimerAccepted;
}
set
{
Settings.DisclaimerAccepted = value;
}
}
public void ResetSettings()
{
Settings.Default();
}
public void LoadSettings()
{
Settings.Load(true);
}
public void SaveSettings()
{
Settings.Save(true);
}
public object GetSettings()
{
return this.Settings;
}
public void ImportSettings()
{
// nothing to do
}
public void ExportSettings()
{
// nothing to do
}
public void Start(PlaneFeedPluginArgs args)
{
// nothing to do
}
public PlaneFeedPluginPlaneInfoList GetPlanes(PlaneFeedPluginArgs args)
{
// intialize variables
VarConverter VC = new VarConverter();
VC.AddVar("APPDIR", args.AppDirectory);
VC.AddVar("DATADIR", args.AppDataDirectory);
VC.AddVar("LOGDIR", args.LogDirectory);
VC.AddVar("DATABASEDIR", args.DatabaseDirectory);
VC.AddVar("MINLAT", args.MinLat);
VC.AddVar("MAXLAT", args.MaxLat);
VC.AddVar("MINLON", args.MinLon);
VC.AddVar("MAXLON", args.MaxLon);
VC.AddVar("MINALTM", args.MinAlt);
VC.AddVar("MAXALTM", args.MaxAlt);
VC.AddVar("MINALTFT", (int)UnitConverter.m_ft((double)args.MinAlt));
VC.AddVar("MAXALTFT", (int)UnitConverter.m_ft((double)args.MaxAlt));
// initialize plane info list
PlaneFeedPluginPlaneInfoList planes = new PlaneFeedPluginPlaneInfoList();
string json = "";
// calculate url and get json
String url = VC.ReplaceAllVars(Settings.URL);
Console.WriteLine("[" + this.GetType().Name + "]: Creating web request: " + url);
HttpWebRequest webrequest = (HttpWebRequest)HttpWebRequest.Create(url);
webrequest.Referer = "http://www.radarbox24.com/";
webrequest.Timeout = Settings.Timeout * 1000;
webrequest.UserAgent = "Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130807 Firefox/17.0";
Console.WriteLine("[" + this.GetType().Name + "]: Getting web response");
HttpWebResponse webresponse = (HttpWebResponse)webrequest.GetResponse();
Console.WriteLine("[" + this.GetType().Name + "]: Reading stream");
using (StreamReader sr = new StreamReader(webresponse.GetResponseStream()))
{
json = sr.ReadToEnd();
}
// save raw data to file if enabled
if (Settings.SaveToFile)
{
using (StreamWriter sw = new StreamWriter(args.TmpDirectory + Path.DirectorySeparatorChar + this.GetType().Name + "_" + DateTime.UtcNow.ToString("yyyy-MM-dd HH_mm_ss") + ".json"))
{
sw.WriteLine(json);
}
}
Console.WriteLine("[" + this.GetType().Name + "]: Analyzing data");
JavaScriptSerializer js = new JavaScriptSerializer();
dynamic root = js.Deserialize<dynamic>(json);
try
{
// analyze json string for planes data
// get the planes position list
var aclist = root[0];
foreach (var ac in aclist)
{
try
{
// different handling of reading JSON between Windows (Array) & Linux (ArrayList)
// access to data values itself is the same
int len = 0;
if (ac.Value.GetType() == typeof(ArrayList))
{
len = ac.Value.Count;
}
else if (ac.Value.GetType() == typeof(Object[]))
{
len = ac.Value.Length;
}
// skip if too few fields in record
if (len < 14)
continue;
PlaneFeedPluginPlaneInfo plane = new PlaneFeedPluginPlaneInfo();
// get hex first
// Radarbox24 does not provide a HEX info
// leave it empty and let it fill by Reg in planefeed main thread
plane.Hex = "";
// get position
plane.Lat = ReadPropertyDouble(ac, 1);
plane.Lon = ReadPropertyDouble(ac, 2);
// get altitude
plane.Alt = ReadPropertyDouble(ac, 4);
// get callsign
plane.Call = ReadPropertyString(ac, 0);
// get registration
plane.Reg = ReadPropertyString(ac, 9);
// get track
plane.Track = ReadPropertyDouble(ac, 7);
// get speed
plane.Speed = ReadPropertyDouble(ac, 6);
// get position timestamp in msec
long l = ReadPropertyLong(ac, 3);
if (l != long.MinValue)
{
DateTime timestamp = new System.DateTime(1970, 1, 1, 0, 0, 0, 0);
timestamp = timestamp.AddMilliseconds(l);
plane.Time = timestamp;
}
else
{
// skip plane if no valid timestamp found
continue;
}
// get type info
plane.Type = ReadPropertyString(ac, 5);
planes.Add(plane);
}
catch (Exception ex)
{
Console.WriteLine("[" + System.Reflection.MethodBase.GetCurrentMethod().Name + "]" + ex.Message);
}
}
}
catch (Exception ex)
{
// do nothing if property is not found
}
Console.WriteLine("[" + this.GetType().Name + "]: Returning " + planes.Count + " planes");
return planes;
}
public void Stop(PlaneFeedPluginArgs args)
{
Settings.Save(true);
}
// ************************************* End of interface ****************************************************
// ************************************* Helpers ****************************************************
[System.Diagnostics.DebuggerNonUserCode]
private string ReadPropertyString(dynamic o, int propertyindex)
{
string s = null;
try
{
s = o.Value[propertyindex];
}
catch
{
// do nothing if something went wrong
}
return s;
}
[System.Diagnostics.DebuggerNonUserCode]
private int ReadPropertyInt(dynamic o, int propertyindex)
{
int i = int.MinValue;
double d = ReadPropertyDouble(o, propertyindex);
if ((d != double.MinValue) && (d >= int.MinValue) && (d <= int.MaxValue))
i = (int)d;
return i;
}
[System.Diagnostics.DebuggerNonUserCode]
private double ReadPropertyDouble(dynamic o, int propertyindex)
{
double d = double.MinValue;
try
{
string s = o.Value[propertyindex].ToString(CultureInfo.InvariantCulture);
d = double.Parse(s, CultureInfo.InvariantCulture);
}
catch
{
// do nothing if something went wrong
}
return d;
}
[System.Diagnostics.DebuggerNonUserCode]
private long ReadPropertyLong(dynamic o, int propertyindex)
{
long l = long.MinValue;
try
{
l = long.Parse(o.Value[propertyindex].ToString());
}
catch
{
// do nothing if something went wrong
}
return l;
}
[System.Diagnostics.DebuggerNonUserCode]
private bool ReadPropertyBool(dynamic o, int propertyindex)
{
bool b = false;
try
{
string s = o.Value[propertyindex].ToString();
b = s.ToLower() == "true";
}
catch
{
// do nothing if something went wrong
}
return b;
}
}
/// <summary>
/// //////////////////////////////////////////// Helpers ////////////////////////////////////////////
/// </summary>
public static class UnitConverter
{
public static double ft_m(double feet)
{
return feet / 3.28084;
}
public static double m_ft(double m)
{
return m * 3.28084;
}
public static double kts_kmh(double kts)
{
return kts * 1.852;
}
public static double kmh_kts(double kmh)
{
return kmh / 1.852;
}
public static double km_mi(double km)
{
return km * 1.609;
}
public static double mi_km(double mi)
{
return mi / 1.609;
}
}
public class VarConverter : Dictionary<string, object>
{
public readonly char VarSeparator = '%';
public void AddVar(string var, object value)
{
// adds a new var<>value pair to dictionary
object o;
if (this.TryGetValue(var, out o))
{
// item found --> update value
o = value;
}
else
{
// item not found --> add new
this.Add(var, value);
}
}
public object GetValue(string var)
{
// finds a var in dictionary and returns its value
object o;
if (this.TryGetValue(var, out o))
{
// item found --> return value
return o;
}
// item not found --> return null
return null;
}
public string ReplaceAllVars(string s)
{
// check for var separotors first
if (s.Contains(VarSeparator))
{
// OK, string is containing vars --> crack the string first and replace vars
try
{
string[] a = s.Split(VarSeparator);
// as we are always using a pair of separators the length of a[] must be odd
if (a.Length % 2 == 0)
throw new ArgumentException("Number of separators is not an even number.");
// create new string and replace all vars (on odd indices)
s = "";
for (int i = 0; i < a.Length; i++)
{
if (i % 2 == 0)
{
// cannot be not a var on that position
s = s + a[i];
}
else
{
// var identifier: upper the string and try to convert
a[i] = a[i].ToUpper();
object o;
if (this.TryGetValue(a[i], out o))
{
// convert floating points with invariant culture info
if (o.GetType() == typeof(double))
s = s + ((double)o).ToString(CultureInfo.InvariantCulture);
else if (o.GetType() == typeof(float))
s = s + ((float)o).ToString(CultureInfo.InvariantCulture);
else
s = s + o.ToString();
}
else
{
throw new ArgumentException("Var identifier not found: " + a[i]);
}
}
}
}
catch (Exception ex)
{
// throw an excecption
throw new ArgumentException("Error while parsing string for variables [" + ex.Message + "]: " + s);
}
}
return s;
}
}
}

Wyświetl plik

@ -1,105 +0,0 @@
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
<section name="AirScout.PlaneFeeds.Plugin.Template.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
<section name="AirScout.PlaneFeeds.Plugin.PlaneFinder.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
</sectionGroup>
</configSections>
<userSettings>
<AirScout.PlaneFeeds.Plugin.Template.Properties.Settings>
<setting name="Info" serializeAs="String">
<value>Generic template for ceration of new plane feed projects
</value>
</setting>
<setting name="Name" serializeAs="String">
<value>[WebFeed] Template</value>
</setting>
<setting name="Disclaimer" serializeAs="String">
<value>This plane feed is being fetched from an Internet server via Deep Link
technology (see http://en.wikipedia.org/wiki/Deep_link).
The use is not intended by the website owners and could be changed in URL and data format frequently and without further notice.
Furthermore, it might cause legal issues in some countries.
By clicking on "Accept" you understand that you are
DOING THAT ON YOUR OWN RISK
The auhor of this software will not be responsible in any case.</value>
</setting>
<setting name="Disclaimer_Accepted" serializeAs="String">
<value />
</setting>
<setting name="URL" serializeAs="String">
<value />
</setting>
<setting name="SaveToFile" serializeAs="String">
<value>False</value>
</setting>
<setting name="Version" serializeAs="String">
<value />
</setting>
<setting name="HasSettings" serializeAs="String">
<value>True</value>
</setting>
<setting name="CanImport" serializeAs="String">
<value>False</value>
</setting>
<setting name="CanExport" serializeAs="String">
<value>False</value>
</setting>
</AirScout.PlaneFeeds.Plugin.Template.Properties.Settings>
<AirScout.PlaneFeeds.Plugin.PlaneFinder.Properties.Settings>
<setting name="Info" serializeAs="String">
<value>Web feed from www.planefinder.net
See https://planefinder.net/
(c) AirScout (www.airscout.eu)
This feed does not require a login or API key.
</value>
</setting>
<setting name="Name" serializeAs="String">
<value>[WebFeed] www.planefinder.net</value>
</setting>
<setting name="Disclaimer" serializeAs="String">
<value>This plane feed is being fetched from an Internet server via Deep Link
technology (see http://en.wikipedia.org/wiki/Deep_link).
The use is not intended by the website owners and could be changed in URL and data format frequently and without further notice.
Furthermore, it might cause legal issues in some countries.
By clicking on "Accept" you understand that you are
DOING THAT ON YOUR OWN RISK
The auhor of this software will not be responsible in any case.</value>
</setting>
<setting name="Disclaimer_Accepted" serializeAs="String">
<value />
</setting>
<setting name="URL" serializeAs="String">
<value>http://droidapp.pinkfroot.com/APPAPIDROID/v7/planeUpdateFAA.php?routetype=IATA&amp;amp;FAA=1&amp;amp;bounds=%MAXLAT%,%MINLAT%,%MINLON%,%MAXLON%</value>
</setting>
<setting name="SaveToFile" serializeAs="String">
<value>False</value>
</setting>
<setting name="Version" serializeAs="String">
<value />
</setting>
<setting name="HasSettings" serializeAs="String">
<value>True</value>
</setting>
<setting name="CanImport" serializeAs="String">
<value>False</value>
</setting>
<setting name="CanExport" serializeAs="String">
<value>False</value>
</setting>
<setting name="Timeout" serializeAs="String">
<value>30</value>
</setting>
</AirScout.PlaneFeeds.Plugin.PlaneFinder.Properties.Settings>
</userSettings>
</configuration>

Wyświetl plik

@ -1,6 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="ILMerge" version="3.0.29" targetFramework="net40" />
<package id="ILMerge.MSBuild.Task" version="1.0.7" targetFramework="net40" />
<package id="Newtonsoft.Json" version="12.0.3" targetFramework="net40" />
</packages>

Wyświetl plik

@ -34,8 +34,11 @@
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.12.0.3\lib\net40\Newtonsoft.Json.dll</HintPath>
<Reference Include="BouncyCastle.Crypto, Version=1.8.9.0, Culture=neutral, PublicKeyToken=0e99375e54769942">
<HintPath>..\packages\BouncyCastle.1.8.9\lib\BouncyCastle.Crypto.dll</HintPath>
</Reference>
<Reference Include="Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.13.0.1\lib\net40\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.ComponentModel.Composition" />

Wyświetl plik

@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
// Sie können alle Werte angeben oder Standardwerte für die Build- und Revisionsnummern verwenden,
// indem Sie "*" wie unten gezeigt eingeben:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.3.0.2")]
[assembly: AssemblyFileVersion("1.3.0.2")]
[assembly: AssemblyVersion("1.4.1.0")]
[assembly: AssemblyFileVersion("1.4.1.0")]

Wyświetl plik

@ -29,7 +29,7 @@ namespace AirScout.PlaneFeeds.Plugin.RTL1090
public virtual string Server { get; set; }
[Browsable(true)]
[DescriptionAttribute("Server port for raw ADS-B data.\nRTLSharp.exe: Port 47806\nRTL1090: Port 31001")]
[DescriptionAttribute("Server port for raw ADS-B data.\nRTL1090: Port 31001, Dump1090: 30005, ADSBSharp: 47806")]
[DefaultValue(31001)]
public virtual int Port { get; set; }
@ -43,9 +43,9 @@ namespace AirScout.PlaneFeeds.Plugin.RTL1090
[DefaultValue(true)]
public virtual bool ReportMessages { get; set; }
[Browsable(true)]
[Browsable(false)]
[DescriptionAttribute("Marks locally received aircrafts by adding '@' to the call sign")]
[DefaultValue(true)]
[DefaultValue(false)]
public virtual bool MarkLocal { get; set; }
[Browsable(false)]
@ -58,6 +58,16 @@ namespace AirScout.PlaneFeeds.Plugin.RTL1090
[DefaultValue(false)]
public virtual bool SaveToFile { get; set; }
[Browsable(true)]
[DescriptionAttribute("Log all received messages to file")]
[DefaultValue(false)]
public virtual bool LogMessagesToFile { get; set; }
[Browsable(false)]
[DefaultValue("RTL1090Messages.log")]
[XmlIgnore]
public string LogFileName { get; set; }
public RTL1090Settings()
{
Default();
@ -214,7 +224,11 @@ namespace AirScout.PlaneFeeds.Plugin.RTL1090
return "Raw data feed from simple ADS-B receivers (DVB-T dongles).\n\n" +
"(c) AirScout(www.airscout.eu)\n\n" +
"Use this feed together with RTL1090.exe or similar software.\n" +
"Feed software must output raw data either binary or ASCII format via TCP.";
"Feed software must output raw data either binary or ASCII format via TCP.\n" +
"Use the follwing settings as default:\n\n" +
"RTL1090: port=31001/binary=true\n" +
"Dump1090: port=30005/binary=true\n" +
"ADSBSharp: port=47806/binary=false" ;
}
}
@ -305,7 +319,18 @@ namespace AirScout.PlaneFeeds.Plugin.RTL1090
// start receiver thread
if (!bw_Receciver.IsBusy)
{
bw_Receciver.RunWorkerAsync();
if (Settings.LogMessagesToFile)
{
try
{
File.WriteAllText(Path.Combine(args.TmpDirectory, Settings.LogFileName), "RTL1090 logging started: " + DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss"));
}
catch (Exception ex)
{
}
}
bw_Receciver.RunWorkerAsync(args);
}
}
@ -374,6 +399,8 @@ namespace AirScout.PlaneFeeds.Plugin.RTL1090
private void bw_Receiver_DoWork(object sender, DoWorkEventArgs e)
{
PlaneFeedPluginArgs args = (PlaneFeedPluginArgs)e.Argument;
Thread.CurrentThread.Priority = ThreadPriority.Highest;
StreamReader sr = null;
TcpClient client = null;
@ -385,6 +412,8 @@ namespace AirScout.PlaneFeeds.Plugin.RTL1090
{
// setup TCP listener
client = new TcpClient();
// set receive timeout to 1s
client.ReceiveTimeout = 1000;
string server = Settings.Server;
client.Connect(server, Settings.Port);
sr = new StreamReader(client.GetStream());
@ -401,16 +430,32 @@ namespace AirScout.PlaneFeeds.Plugin.RTL1090
{
// try to decode the message
string info = "";
string line = "";
try
{
Console.Write("[" + this.GetType().Name + "]: " + msg.RawMessage + "-- > ");
info = "[" + this.GetType().Name + "]: " + msg.RawMessage + "-- > ";
Console.Write(info);
line = info;
info = Decoder.DecodeMessage(msg.RawMessage, msg.TimeStamp);
line = line + info + "\n";
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
Console.WriteLine(info);
if (Settings.LogMessagesToFile)
{
try
{
File.AppendAllText(Path.Combine(args.TmpDirectory, Settings.LogFileName), line);
}
catch (Exception ex)
{
}
}
}
}
while ((msg != null) && !bw_Receciver.CancellationPending);

Wyświetl plik

@ -0,0 +1,639 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
using System.ComponentModel.Composition;
using System.ComponentModel;
using System.Globalization;
using AirScout.PlaneFeeds.Plugin.MEFContract;
using System.Diagnostics;
using System.Net;
using System.IO;
using System.Threading;
using System.Net.Sockets;
using System.Collections;
using System.Web.Script.Serialization;
using LibADSB;
using System.Xml.Serialization;
using System.Xml.Linq;
namespace AirScout.PlaneFeeds.Plugin.RTL1090
{
public class RTL1090Settings
{
[Browsable(true)]
[DescriptionAttribute("Server address for raw ADS-B data.\nUse localhost for running on the same machine.")]
[DefaultValue("localhost")]
public virtual string Server { get; set; }
[Browsable(true)]
[DescriptionAttribute("Server port for raw ADS-B data.\nRTL1090: Port 31001, Dump1090: 30005, ADSBSharp: 47806")]
[DefaultValue(31001)]
public virtual int Port { get; set; }
[Browsable(true)]
[DescriptionAttribute("Use binary data format for ADS-B data.\nTrue: Use binary format (ADS Beast with MLAT)\nFalse: Use ASCII format (AVR with/without MLAT)")]
[DefaultValue(true)]
public virtual bool Binary { get; set; }
[Browsable(true)]
[DescriptionAttribute("Report ADS-B messages to console output.")]
[DefaultValue(true)]
public virtual bool ReportMessages { get; set; }
[Browsable(false)]
[DescriptionAttribute("Marks locally received aircrafts by adding '@' to the call sign")]
[DefaultValue(false)]
public virtual bool MarkLocal { get; set; }
[Browsable(false)]
[DefaultValue("")]
[XmlIgnore]
public string DisclaimerAccepted { get; set; }
[Browsable(true)]
[DescriptionAttribute("Save received aircraft positions to file")]
[DefaultValue(false)]
public virtual bool SaveToFile { get; set; }
public RTL1090Settings()
{
Default();
Load(true);
}
/// <summary>
/// Sets all properties to their default value according to the [DefaultValue=] attribute
/// </summary>
public void Default()
{
// set all properties to their default values according to definition in [DeafultValue=]
foreach (var p in this.GetType().GetProperties())
{
try
{
// initialize all properties with default value if set
if (Attribute.IsDefined(p, typeof(DefaultValueAttribute)))
{
p.SetValue(this, ((DefaultValueAttribute)Attribute.GetCustomAttribute(
p, typeof(DefaultValueAttribute)))?.Value, null);
}
}
catch (Exception ex)
{
Console.WriteLine("[" + this.GetType().Name + "]: Cannot set default value of: " + p.Name + ", " + ex.Message);
}
}
}
/// <summary>
/// Loads settings from a XML-formatted configuration file into settings.
/// </summary>
/// <param name="loadall">If true, ignore the [XmlIgnore] attribute, e.g. load all settings available in the file.<br>If false, load only settings without [XmlIgore] attrbute.</br></param>
/// <param name="filename">The filename of the settings file.</param>
public void Load(bool loadall, string filename = "")
{
// use standard filename if empty
// be careful because Linux file system is case sensitive
if (String.IsNullOrEmpty(filename))
filename = new Uri(Assembly.GetExecutingAssembly().GetName().CodeBase.Replace(".dll", ".cfg").Replace(".DLL", ".CFG")).LocalPath;
// do nothing if file not exists
if (!File.Exists(filename))
return;
try
{
string xml = "";
using (StreamReader sr = new StreamReader(File.OpenRead(filename)))
{
xml = sr.ReadToEnd();
}
XDocument xdoc = XDocument.Parse(xml);
PropertyInfo[] properties = this.GetType().GetProperties();
foreach (PropertyInfo p in properties)
{
if (!loadall)
{
// check on XmlIgnore attribute, skip if set
object[] attr = p.GetCustomAttributes(typeof(XmlIgnoreAttribute), false);
if (attr.Length > 0)
continue;
}
try
{
// get matching element
XElement typenode = xdoc.Element(this.GetType().Name);
if (typenode != null)
{
XElement element = typenode.Element(p.Name);
if (element != null)
p.SetValue(this, Convert.ChangeType(element.Value, p.PropertyType), null);
}
}
catch (Exception ex)
{
Console.WriteLine("[" + this.GetType().Name + "]: Error while loading property[" + p.Name + " from " + filename + ", " + ex.Message);
}
}
}
catch (Exception ex)
{
Console.WriteLine("[" + this.GetType().Name + "]: Cannot load settings from " + filename + ", " + ex.Message);
}
}
/// <summary>
/// Saves settings from settings into a XML-formatted configuration file
/// </summary>
/// <param name="saveall">If true, ignore the [XmlIgnore] attribute, e.g. save all settings.<br>If false, save only settings without [XmlIgore] attrbute.</param>
/// <param name="filename">The filename of the settings file.</param>
public void Save(bool saveall, string filename = "")
{
// use standard filename if empty
// be careful because Linux file system is case sensitive
if (String.IsNullOrEmpty(filename))
filename = new Uri(Assembly.GetExecutingAssembly().GetName().CodeBase.Replace(".dll", ".cfg").Replace(".DLL", ".CFG")).LocalPath;
XmlAttributeOverrides overrides = new XmlAttributeOverrides();
if (saveall)
{
// ovverride the XmlIgnore attributes to get all serialized
PropertyInfo[] properties = this.GetType().GetProperties();
foreach (PropertyInfo p in properties)
{
XmlAttributes attribs = new XmlAttributes { XmlIgnore = false };
overrides.Add(this.GetType(), p.Name, attribs);
}
}
try
{
using (StreamWriter sw = new StreamWriter(File.Create(filename)))
{
XmlSerializer s = new XmlSerializer(this.GetType(), overrides);
s.Serialize(sw, this);
}
}
catch (Exception ex)
{
throw new InvalidOperationException("[" + this.GetType().Name + "]: Cannot save settings to " + filename + ", " + ex.Message);
}
}
}
public class RTLMessage
{
public string RawMessage = "";
public DateTime TimeStamp = DateTime.UtcNow;
public int SignalStrength = 0;
}
[Export(typeof(IPlaneFeedPlugin))]
[ExportMetadata("Name", "PlaneFeedPlugin")]
public class RTL1090Plugin : IPlaneFeedPlugin
{
private RTL1090Settings Settings = new RTL1090Settings();
ADSBDecoder Decoder = new ADSBDecoder();
private BackgroundWorker bw_Receciver;
public string Name
{
get
{
return "[RawData] RTL1090 data ";
}
}
public string Info
{
get
{
return "Raw data feed from simple ADS-B receivers (DVB-T dongles).\n\n" +
"(c) AirScout(www.airscout.eu)\n\n" +
"Use this feed together with RTL1090.exe or similar software.\n" +
"Feed software must output raw data either binary or ASCII format via TCP.\n" +
"Use the follwing settings as default:\n\n" +
"RTL1090: port=31001/binary=true\n" +
"Dump1090: port=30005/binary=true\n" +
"ADSBSharp: port=47806/binary=false" ;
}
}
public string Version
{
get
{
return Assembly.GetExecutingAssembly().GetName().Version.ToString();
}
}
public bool HasSettings
{
get
{
return true;
}
}
public bool CanImport
{
get
{
return false;
}
}
public bool CanExport
{
get
{
return false;
}
}
public string Disclaimer
{
get
{
return "";
}
}
public string DisclaimerAccepted
{
get
{
return Settings.DisclaimerAccepted;
}
set
{
Settings.DisclaimerAccepted = value;
}
}
public void ResetSettings()
{
Settings.Default();
}
public void LoadSettings()
{
Settings.Load(true);
}
public void SaveSettings()
{
Settings.Save(true);
}
public object GetSettings()
{
return this.Settings;
}
public void ImportSettings()
{
// nothing to do
}
public void ExportSettings()
{
// nothing to do
}
public void Start(PlaneFeedPluginArgs args)
{
// start receiver thread
if (!bw_Receciver.IsBusy)
{
bw_Receciver.RunWorkerAsync();
}
}
public PlaneFeedPluginPlaneInfoList GetPlanes(PlaneFeedPluginArgs args)
{
PlaneFeedPluginPlaneInfoList planes = new PlaneFeedPluginPlaneInfoList();
// time to report planes
ArrayList list = Decoder.GetPlanes();
if (list.Count > 0)
{
// convert to plane info list
foreach (ADSBInfo info in list)
{
PlaneFeedPluginPlaneInfo plane = new PlaneFeedPluginPlaneInfo();
plane.Time = info.Timestamp;
plane.Hex = info.ICAO24;
// mark call with "@" if option is enabled
plane.Call = (Settings.MarkLocal) ? "@" + info.Call : info.Call;
plane.Lat = info.Lat;
plane.Lon = info.Lon;
plane.Alt = info.Alt;
plane.Speed = info.Speed;
plane.Track = info.Heading;
plane.Reg = "[unknown]";
plane.Type = "[unknown]";
plane.Manufacturer = "[unknown]";
plane.Model = "[unknown]";
plane.Category = 0;
planes.Add(plane);
}
// save raw data to file if enabled
if (Settings.SaveToFile)
{
JavaScriptSerializer js = new JavaScriptSerializer();
string json = js.Serialize(planes);
using (StreamWriter sw = new StreamWriter(args.TmpDirectory + Path.DirectorySeparatorChar + this.GetType().Name + "_" + DateTime.UtcNow.ToString("yyyy-MM-dd HH_mm_ss") + ".json"))
{
sw.WriteLine(json);
}
}
}
Console.WriteLine("[" + this.GetType().Name + "]: Returning " + planes.Count + " planes");
return planes;
}
public void Stop(PlaneFeedPluginArgs args)
{
while (bw_Receciver.IsBusy)
{
bw_Receciver.CancelAsync();
}
Settings.Save(true);
}
// end of Interface
public RTL1090Plugin()
{
bw_Receciver = new BackgroundWorker();
bw_Receciver.DoWork += new System.ComponentModel.DoWorkEventHandler(this.bw_Receiver_DoWork);
bw_Receciver.ProgressChanged += new System.ComponentModel.ProgressChangedEventHandler(this.bw_Receiver_ProgressChanged);
bw_Receciver.WorkerReportsProgress = true;
bw_Receciver.WorkerSupportsCancellation = true;
}
private void bw_Receiver_DoWork(object sender, DoWorkEventArgs e)
{
Thread.CurrentThread.Priority = ThreadPriority.Highest;
StreamReader sr = null;
TcpClient client = null;
RTLMessage msg = null;
// outer loop
do
{
try
{
// setup TCP listener
client = new TcpClient();
// set receive timeout to 1s
client.ReceiveTimeout = 1000;
string server = Settings.Server;
client.Connect(server, Settings.Port);
sr = new StreamReader(client.GetStream());
// inner loop
// receive messages in a loop
do
{
if (Settings.Binary)
msg = ReceiveBinaryMsg(sr.BaseStream);
else
msg = ReceiveAVRMsg(sr);
// decode the message
if (msg.RawMessage.StartsWith("*") && msg.RawMessage.EndsWith(";"))
{
// try to decode the message
string info = "";
try
{
Console.Write("[" + this.GetType().Name + "]: " + msg.RawMessage + "-- > ");
info = Decoder.DecodeMessage(msg.RawMessage, msg.TimeStamp);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
Console.WriteLine(info);
}
}
while ((msg != null) && !bw_Receciver.CancellationPending);
}
catch (Exception ex)
{
// report error
Console.WriteLine("Error reading from TCP connection: " + ex.Message);
// wait 10 sec
int i = 0;
while ((i < 10) && !bw_Receciver.CancellationPending)
{
Thread.Sleep(1000);
i++;
}
}
finally
{
// try to close the stream and TCP client
try
{
if (sr != null)
sr.Close();
}
catch
{
}
try
{
if (client != null)
client.Close();
}
catch
{
}
}
}
while (!bw_Receciver.CancellationPending);
}
private void bw_Receiver_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
}
private RTLMessage ReceiveBinaryMsg(Stream stream)
{
// read Mode-S beast binary input
string RTL = null;
int signal_strength = 0;
long nanosec = 0;
long daysec = 0;
DateTime timestamp = DateTime.UtcNow;
byte[] buffer = new byte[23];
// wait for escape character
DateTime start = DateTime.UtcNow;
DateTime stop = DateTime.Now;
do
{
stream.Read(buffer, 0, 1);
// System.Console.WriteLine(BitConverter.ToString(buffer,0,1));
if (buffer[0] == 0x1A)
{
// read next character
stream.Read(buffer, 1, 1);
switch (buffer[1])
{
case 0x31:
// do not decode
RTL = null;
break;
case 0x32:
// 7 byte short frame
// read timestamp
stream.Read(buffer, 2, 6);
nanosec = ((buffer[4] & 0x3f) << 24) |
(buffer[5] << 16) |
(buffer[6] << 8) |
(buffer[7]);
daysec = (buffer[2] << 10) |
(buffer[3] << 2) |
(buffer[4] >> 6);
timestamp = DateTime.Today.AddSeconds(daysec);
timestamp = timestamp.AddMilliseconds(nanosec / 1000);
// plausibility check
if (Math.Abs((DateTime.Now - timestamp).Seconds) > 10)
{
// time difference > 10sec --> discard timestamp
timestamp = DateTime.UtcNow;
}
// read signal strength
stream.Read(buffer, 8, 1);
// plausibility check
if (Math.Abs((DateTime.Now - timestamp).Seconds) > 10)
{
// time difference > 10sec --> discard timestamp
timestamp = DateTime.UtcNow;
}
signal_strength = buffer[8];
// read frame
stream.Read(buffer, 9, 7);
// convert to AVR string
RTL = BitConverter.ToString((byte[])buffer, 9, 7).Replace("-", String.Empty);
RTL = "*" + RTL + ";";
break;
case 0x33:
// 14 byte long frame
// read timestamp
stream.Read(buffer, 2, 6);
nanosec = ((buffer[4] & 0x3f) << 24) |
(buffer[5] << 16) |
(buffer[6] << 8) |
(buffer[7]);
daysec = (buffer[2] << 10) |
(buffer[3] << 2) |
(buffer[4] >> 6);
timestamp = DateTime.Today.AddSeconds(daysec);
timestamp = timestamp.AddMilliseconds(nanosec / 1000);
// plausibility check
if (Math.Abs((DateTime.Now - timestamp).Seconds) > 10)
{
// time difference > 10sec --> discard timestamp
timestamp = DateTime.UtcNow;
}
// read signal strength
stream.Read(buffer, 8, 1);
signal_strength = buffer[8];
// read frame
stream.Read(buffer, 9, 14);
// convert to AVR string
RTL = BitConverter.ToString((byte[])buffer, 9, 14).Replace("-", String.Empty);
RTL = "*" + RTL + ";";
break;
default:
// false decode
RTL = null;
break;
}
}
// check for timeout 10sec
stop = DateTime.UtcNow;
if (stop - start > new TimeSpan(0, 0, 10))
throw new TimeoutException();
}
// while ((RTL == null) && !this.CancellationPending);
while (RTL == null);
if (RTL == null)
return null;
RTLMessage msg = new RTLMessage();
msg.RawMessage = RTL;
msg.TimeStamp = timestamp;
msg.SignalStrength = signal_strength;
return msg;
}
private RTLMessage ReceiveAVRMsg(StreamReader sr)
{
RTLMessage msg = new RTLMessage();
// read AVR format input
msg.RawMessage = sr.ReadLine();
if (msg.RawMessage.StartsWith("*"))
{
// standard AVR message
// no timestamp in telegram --> set timestamp after reading
msg.TimeStamp = DateTime.UtcNow;
msg.SignalStrength = 0;
}
else if (msg.RawMessage.StartsWith("@"))
{
// extended AVR message wit MLAT
// convert into standard message format
// extract time string
string time = msg.RawMessage.Substring(1, 12);
// TODO: interprete the MLAT timestamp!
msg.TimeStamp = DateTime.UtcNow;
msg.RawMessage = "*" + msg.RawMessage.Remove(0, 13);
}
return msg;
}
}
/// <summary>
/// //////////////////////////////////////////// Helpers ////////////////////////////////////////////
/// </summary>
public static class UnitConverter
{
public static double ft_m(double feet)
{
return feet / 3.28084;
}
public static double m_ft(double m)
{
return m * 3.28084;
}
public static double kts_kmh(double kts)
{
return kts * 1.852;
}
public static double kmh_kts(double kmh)
{
return kmh / 1.852;
}
public static double km_mi(double km)
{
return km * 1.609;
}
public static double mi_km(double mi)
{
return mi / 1.609;
}
}
}

Wyświetl plik

@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="BouncyCastle" version="1.8.9" targetFramework="net40" />
<package id="ILMerge" version="3.0.29" targetFramework="net40" />
<package id="ILMerge.MSBuild.Task" version="1.0.7" targetFramework="net40" />
<package id="Newtonsoft.Json" version="12.0.3" targetFramework="net40" />
<package id="Newtonsoft.Json" version="13.0.1" targetFramework="net40" />
</packages>

Wyświetl plik

@ -34,8 +34,11 @@
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.12.0.3\lib\net40\Newtonsoft.Json.dll</HintPath>
<Reference Include="BouncyCastle.Crypto, Version=1.8.9.0, Culture=neutral, PublicKeyToken=0e99375e54769942">
<HintPath>..\packages\BouncyCastle.1.8.9\lib\BouncyCastle.Crypto.dll</HintPath>
</Reference>
<Reference Include="Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.13.0.1\lib\net40\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.ComponentModel.Composition" />
@ -55,6 +58,7 @@
<DesignTimeSharedInput>True</DesignTimeSharedInput>
<DependentUpon>Settings.settings</DependentUpon>
</Compile>
<Compile Include="TLS.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\AirScout.PlaneFeeds.Plugin\AirScout.PlaneFeeds.Plugin.csproj">

Wyświetl plik

@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
// Sie können alle Werte angeben oder Standardwerte für die Build- und Revisionsnummern verwenden,
// indem Sie "*" wie unten gezeigt eingeben:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.3.0.0")]
[assembly: AssemblyFileVersion("1.3.0.0")]
[assembly: AssemblyVersion("1.4.0.0")]
[assembly: AssemblyFileVersion("1.4.0.0")]

Wyświetl plik

@ -0,0 +1,246 @@
using Org.BouncyCastle.Crypto.Tls;
using Org.BouncyCastle.Security;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Net.Sockets;
using System.Text;
using System.Text.RegularExpressions;
namespace System.Net
{
// result of ReadChunkedContent
public enum ReadResult
{
Error = -1,
MoreData = 0,
Finished = 0
}
public class TlsClient : DefaultTlsClient
{
string HostName;
public TlsClient(string hostname)
{
HostName = hostname;
}
public override TlsAuthentication GetAuthentication()
{
TlsAuthentication auth = new MyTlsAuthentication();
return auth;
}
public override void NotifyNewSessionTicket(NewSessionTicket newSessionTicket)
{
base.NotifyNewSessionTicket(newSessionTicket);
}
public override IDictionary GetClientExtensions()
{
var clientExtensions = base.GetClientExtensions();
List<ServerName> servers = new List<ServerName>();
servers.Add(new ServerName(NameType.host_name, HostName));
TlsExtensionsUtilities.AddServerNameExtension(clientExtensions, new ServerNameList(servers));
return clientExtensions;
}
private static ReadResult ReadContent(Stream stream, int contentlength, int timeout, ref string response)
{
// set stop watch as timout
Stopwatch st = new Stopwatch();
st.Start();
string resp = "";
int count = 0;
try
{
// assign buffer
byte[] buff = new byte[1];
int bytesread = 0;
// read content bytewise
while (bytesread < contentlength)
{
bytesread += stream.Read(buff, 0, buff.Length);
// add it to response
resp += Encoding.ASCII.GetString(buff, 0, buff.Length);
if (st.ElapsedMilliseconds > timeout)
throw new TimeoutException("Connection timed out.");
}
string trailer = "";
// reassign buffer
buff = new byte[1];
// read stream bytewise until CRLFCRLF is detected, should be the next two bytes
do
{
count = stream.Read(buff, 0, buff.Length);
trailer += Encoding.ASCII.GetString(buff, 0, buff.Length);
if (st.ElapsedMilliseconds > timeout)
throw new TimeoutException("Connection timed out.");
}
while (!trailer.Contains("\r\n"));
// Console.WriteLine("Reading content [" + contentlength.ToString() + " bytes]: " + resp);
response += resp;
}
catch (Exception ex)
{
Console.WriteLine("Error while reading chunked content: " + ex.Message);
return ReadResult.Error;
}
return ReadResult.MoreData;
}
private static ReadResult ReadChunkedContent(Stream stream, int timeout, ref string response)
{
// set stop watch as timout
Stopwatch st = new Stopwatch();
st.Start();
string resp = "";
byte[] buff = new byte[1];
int count = 0;
string strcontentlength = "";
int contentlength = 0;
// chunked transfer, first line should contain content length
// read stream bytewise until CRLF is detected
try
{
do
{
count = stream.Read(buff, 0, buff.Length);
strcontentlength += Encoding.ASCII.GetString(buff, 0, buff.Length);
if (st.ElapsedMilliseconds > timeout)
throw new TimeoutException("Connection timed out.");
}
while (!strcontentlength.Contains("\r\n"));
strcontentlength = strcontentlength.Replace("\r\n", "");
contentlength = int.Parse(strcontentlength, System.Globalization.NumberStyles.HexNumber);
// finished reading all chunks
if (contentlength == 0)
{
Console.WriteLine("Reading chunked content finished");
return ReadResult.Finished;
}
int bytesread = 0;
// read content bytewise
while (bytesread < contentlength)
{
bytesread += stream.Read(buff, 0, buff.Length);
// add it to response
resp += Encoding.ASCII.GetString(buff, 0, buff.Length);
if (st.ElapsedMilliseconds > timeout)
throw new TimeoutException("Connection timed out.");
}
string trailer = "";
// reassign buffer
buff = new byte[1];
// read stream bytewise until CRLFCRLF is detected, should be the next two bytes
do
{
count = stream.Read(buff, 0, buff.Length);
trailer += Encoding.ASCII.GetString(buff, 0, buff.Length);
if (st.ElapsedMilliseconds > timeout)
throw new TimeoutException("Connection timed out.");
}
while (!trailer.Contains("\r\n"));
}
catch (Exception ex)
{
Console.WriteLine("Error while reading chunked content: " + ex.Message);
return ReadResult.Error;
}
// Console.WriteLine("Reading chunked content [" + contentlength.ToString() + " bytes]: " + resp);
response += resp;
return ReadResult.MoreData;
}
public static string DownloadFile(string url, int timeout, string apikey = "")
{
string response = "";
Uri uri = null;
// try to pasre url
try
{
uri = new Uri(url);
}
catch (Exception ex)
{
return ex.Message;
}
// create new TCP-Client
using (var client = new TcpClient(uri.Host, uri.Port))
{
var sr = new SecureRandom();
var cl = new TlsClient(uri.Host);
var protocol = new TlsClientProtocol(client.GetStream(), sr);
protocol.Connect(cl);
using (var stream = protocol.Stream)
{
var hdr = new StringBuilder();
hdr.AppendLine("GET " + uri.PathAndQuery + " HTTP/1.1");
hdr.AppendLine("Host: " + uri.Host);
hdr.AppendLine("Content-Type: text/json; charset=utf-8");
if (!String.IsNullOrEmpty(apikey))
{
hdr.AppendLine("api-auth:" + apikey);
}
hdr.AppendLine("Connection: close");
hdr.AppendLine();
var dataToSend = Encoding.ASCII.GetBytes(hdr.ToString());
stream.Write(dataToSend, 0, dataToSend.Length);
byte[] buff;
// set stop watch as timout
Stopwatch st = new Stopwatch();
st.Start();
//read header bytewise
string header = "";
int totalRead = 0;
buff = new byte[1];
do
{
totalRead = stream.Read(buff, 0, buff.Length);
header += Encoding.ASCII.GetString(buff);
if (st.ElapsedMilliseconds > timeout)
throw new TimeoutException("Connection to " + url + " timed out.");
}
while (!header.Contains("\r\n\r\n"));
Console.Write(header);
int contentlength = 0;
if (header.Contains("Transfer-Encoding: chunked"))
{
// chunked transfer, read all chunks until complete
while (ReadChunkedContent(stream, timeout, ref response) == ReadResult.MoreData)
{ }
}
else
{
// get content length from header
Regex rcontentlength = new Regex("(?<=Content-Length:\\s)\\d+", RegexOptions.IgnoreCase);
contentlength = int.Parse(rcontentlength.Match(header).Value);
ReadContent(stream, contentlength, timeout, ref response);
}
st.Stop();
}
}
return response;
}
}
class MyTlsAuthentication : TlsAuthentication
{
public TlsCredentials GetClientCredentials(CertificateRequest certificateRequest)
{
return null;
}
public void NotifyServerCertificate(Certificate serverCertificate)
{
}
}
}

Wyświetl plik

@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="BouncyCastle" version="1.8.9" targetFramework="net40" />
<package id="ILMerge" version="3.0.29" targetFramework="net40" />
<package id="ILMerge.MSBuild.Task" version="1.0.7" targetFramework="net40" />
<package id="Newtonsoft.Json" version="12.0.3" targetFramework="net40" />
<package id="Newtonsoft.Json" version="13.0.1" targetFramework="net40" />
</packages>

Wyświetl plik

@ -1,91 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="..\packages\ILMerge.3.0.29\build\ILMerge.props" Condition="Exists('..\packages\ILMerge.3.0.29\build\ILMerge.props')" />
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{50093159-6446-48CD-B8CD-6FA58EB88CBB}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>AirScout.PlaneFeeds.Plugin.VirtualRadarServer</RootNamespace>
<AssemblyName>AirScout.PlaneFeeds.Plugin.VirtualRadarServer</AssemblyName>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<Deterministic>true</Deterministic>
<NuGetPackageImportStamp>
</NuGetPackageImportStamp>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="BouncyCastle.Crypto, Version=1.8.5.0, Culture=neutral, PublicKeyToken=0e99375e54769942">
<HintPath>..\packages\BouncyCastle.1.8.5\lib\BouncyCastle.Crypto.dll</HintPath>
</Reference>
<Reference Include="Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.12.0.3\lib\net40\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.ComponentModel.Composition" />
<Reference Include="System.Core" />
<Reference Include="System.Web.Extensions" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
<DependentUpon>Settings.settings</DependentUpon>
</Compile>
<Compile Include="TLS.cs" />
<Compile Include="VirtualRadarServer.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\AirScout.PlaneFeeds.Plugin\AirScout.PlaneFeeds.Plugin.csproj">
<Project>{36945dbd-96c8-41e7-9168-f83c42e67af3}</Project>
<Name>AirScout.PlaneFeeds.Plugin</Name>
<Private>False</Private>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<None Include="app.config" />
<None Include="packages.config" />
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>
<ErrorText>Dieses Projekt verweist auf mindestens ein NuGet-Paket, das auf diesem Computer fehlt. Verwenden Sie die Wiederherstellung von NuGet-Paketen, um die fehlenden Dateien herunterzuladen. Weitere Informationen finden Sie unter "http://go.microsoft.com/fwlink/?LinkID=322105". Die fehlende Datei ist "{0}".</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('..\packages\ILMerge.3.0.29\build\ILMerge.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\ILMerge.3.0.29\build\ILMerge.props'))" />
<Error Condition="!Exists('..\packages\ILMerge.MSBuild.Task.1.0.7\build\ILMerge.MSBuild.Task.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\ILMerge.MSBuild.Task.1.0.7\build\ILMerge.MSBuild.Task.targets'))" />
</Target>
<PropertyGroup>
<PostBuildEvent>mkdir $(SolutionDir)\Airscout\$(OutDir)\Plugin\
copy $(ProjectDir)\$(OutDir)\ILMerge\*$(TargetExt) $(SolutionDir)\Airscout\$(OutDir)\Plugin\ /y</PostBuildEvent>
</PropertyGroup>
<Import Project="..\packages\ILMerge.MSBuild.Task.1.0.7\build\ILMerge.MSBuild.Task.targets" Condition="Exists('..\packages\ILMerge.MSBuild.Task.1.0.7\build\ILMerge.MSBuild.Task.targets')" />
</Project>

Wyświetl plik

@ -1,26 +0,0 @@
//------------------------------------------------------------------------------
// <auto-generated>
// Dieser Code wurde von einem Tool generiert.
// Laufzeitversion:4.0.30319.42000
//
// Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
// der Code erneut generiert wird.
// </auto-generated>
//------------------------------------------------------------------------------
namespace AirScout.PlaneFeeds.Plugin.VirtualRadarServer.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.4.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
public static Settings Default {
get {
return defaultInstance;
}
}
}
}

Wyświetl plik

@ -1,5 +0,0 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
<Profiles />
<Settings />
</SettingsFile>

Wyświetl plik

@ -1,750 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
using System.ComponentModel.Composition;
using System.ComponentModel;
using System.Globalization;
using AirScout.PlaneFeeds.Plugin.MEFContract;
using System.Diagnostics;
using System.Net;
using System.IO;
using System.Web.Script.Serialization;
using System.Security.Cryptography;
using System.Xml.Serialization;
using System.Xml.Linq;
using Newtonsoft.Json;
namespace AirScout.PlaneFeeds.Plugin.VirtualRadarServer
{
public class VirtualRadarServerSettings
{
[Browsable(false)]
[DefaultValue("")]
[XmlIgnore]
public string DisclaimerAccepted { get; set; }
[Browsable(true)]
[CategoryAttribute("Web Feed")]
[DescriptionAttribute("Save downloaded JSON to file")]
[DefaultValue(false)]
[XmlIgnore]
public bool SaveToFile { get; set; }
[Browsable(true)]
[CategoryAttribute("Web Feed")]
[DescriptionAttribute("Base URL for website.")]
[DefaultValue("https://public-api.adsbexchange.com/VirtualRadar/AircraftList.json?fNBnd=%MAXLAT%&fSBnd=%MINLAT%&fWBnd=%MINLON%&fEBnd=%MAXLON%&fAltL=%MINALTFT%&fAltU=%MAXALTFT%")]
public string URL { get; set; }
[Browsable(true)]
[CategoryAttribute("Web Feed")]
[DescriptionAttribute("Timeout for loading the site.")]
[DefaultValue(30)]
[XmlIgnore]
public int Timeout { get; set; }
[Browsable(true)]
[CategoryAttribute("Web Feed")]
[DescriptionAttribute("Personal API key for this feed. Leave it empty to use AirScout internal.")]
[DefaultValue("")]
[XmlIgnore]
public string APIKey { get; set; }
public VirtualRadarServerSettings()
{
Default();
Load(true);
}
/// <summary>
/// Sets all properties to their default value according to the [DefaultValue=] attribute
/// </summary>
public void Default()
{
// set all properties to their default values according to definition in [DeafultValue=]
foreach (var p in this.GetType().GetProperties())
{
try
{
// initialize all properties with default value if set
if (Attribute.IsDefined(p, typeof(DefaultValueAttribute)))
{
p.SetValue(this, ((DefaultValueAttribute)Attribute.GetCustomAttribute(
p, typeof(DefaultValueAttribute)))?.Value, null);
}
}
catch (Exception ex)
{
Console.WriteLine("[" + this.GetType().Name + "]: Cannot set default value of: " + p.Name + ", " + ex.Message);
}
}
}
/// <summary>
/// Loads settings from a XML-formatted configuration file into settings.
/// </summary>
/// <param name="loadall">If true, ignore the [XmlIgnore] attribute, e.g. load all settings available in the file.<br>If false, load only settings without [XmlIgore] attrbute.</br></param>
/// <param name="filename">The filename of the settings file.</param>
public void Load(bool loadall, string filename = "")
{
// use standard filename if empty
// be careful because Linux file system is case sensitive
if (String.IsNullOrEmpty(filename))
filename = new Uri(Assembly.GetExecutingAssembly().GetName().CodeBase.Replace(".dll", ".cfg").Replace(".DLL", ".CFG")).LocalPath;
// do nothing if file not exists
if (!File.Exists(filename))
return;
try
{
string xml = "";
using (StreamReader sr = new StreamReader(File.OpenRead(filename)))
{
xml = sr.ReadToEnd();
}
XDocument xdoc = XDocument.Parse(xml);
PropertyInfo[] properties = this.GetType().GetProperties();
foreach (PropertyInfo p in properties)
{
if (!loadall)
{
// check on XmlIgnore attribute, skip if set
object[] attr = p.GetCustomAttributes(typeof(XmlIgnoreAttribute), false);
if (attr.Length > 0)
continue;
}
try
{
// get matching element
XElement typenode = xdoc.Element(this.GetType().Name);
if (typenode != null)
{
XElement element = typenode.Element(p.Name);
if (element != null)
p.SetValue(this, Convert.ChangeType(element.Value, p.PropertyType), null);
}
}
catch (Exception ex)
{
Console.WriteLine("[" + this.GetType().Name + "]: Error while loading property[" + p.Name + " from " + filename + ", " + ex.Message);
}
}
}
catch (Exception ex)
{
Console.WriteLine("[" + this.GetType().Name + "]: Cannot load settings from " + filename + ", " + ex.Message);
}
}
/// <summary>
/// Saves settings from settings into a XML-formatted configuration file
/// </summary>
/// <param name="saveall">If true, ignore the [XmlIgnore] attribute, e.g. save all settings.<br>If false, save only settings without [XmlIgore] attrbute.</param>
/// <param name="filename">The filename of the settings file.</param>
public void Save(bool saveall, string filename = "")
{
// use standard filename if empty
// be careful because Linux file system is case sensitive
if (String.IsNullOrEmpty(filename))
filename = new Uri(Assembly.GetExecutingAssembly().GetName().CodeBase.Replace(".dll", ".cfg").Replace(".DLL", ".CFG")).LocalPath;
XmlAttributeOverrides overrides = new XmlAttributeOverrides();
if (saveall)
{
// ovverride the XmlIgnore attributes to get all serialized
PropertyInfo[] properties = this.GetType().GetProperties();
foreach (PropertyInfo p in properties)
{
XmlAttributes attribs = new XmlAttributes { XmlIgnore = false };
overrides.Add(this.GetType(), p.Name, attribs);
}
}
try
{
using (StreamWriter sw = new StreamWriter(File.Create(filename)))
{
XmlSerializer s = new XmlSerializer(this.GetType(), overrides);
s.Serialize(sw, this);
}
}
catch (Exception ex)
{
throw new InvalidOperationException("[" + this.GetType().Name + "]: Cannot save settings to " + filename + ", " + ex.Message);
}
}
}
[Export(typeof(IPlaneFeedPlugin))]
[ExportMetadata("Name", "PlaneFeedPlugin")]
public class VirtualRadarServerPlugin : IPlaneFeedPlugin
{
private VirtualRadarServerSettings Settings = new VirtualRadarServerSettings();
private string APIKey = "";
public string Name
{
get
{
return "[WebFeed] Virtual Radar Server";
}
}
public string Info
{
get
{
return "Web feed from Virtual Radar Server\n\n" +
"(c) AirScout(www.airscout.eu)\n\n" +
"This feed requires an API-key, either personal or AirScout internal.\n" +
"See https://www.adsbexchange.com/ for details.\n\n" +
"This webfeed forces TLS1.2 transport layer security. Though this plugin is compiled for .NET4.0 it needs .NET4.5 or higher installed on this machine to work.\n\n" +
"This webfeed will probably not work on Windows XP and Linux/Mono systems";
}
}
public string Version
{
get
{
return Assembly.GetExecutingAssembly().GetName().Version.ToString();
}
}
public bool HasSettings
{
get
{
return true;
}
}
public bool CanImport
{
get
{
return false;
}
}
public bool CanExport
{
get
{
return false;
}
}
public string Disclaimer
{
get
{
return "";
}
}
public string DisclaimerAccepted
{
get
{
return Settings.DisclaimerAccepted;
}
set
{
Settings.DisclaimerAccepted = value;
}
}
public void ResetSettings()
{
Settings.Default();
}
public void LoadSettings()
{
Settings.Load(true);
}
public void SaveSettings()
{
Settings.Save(true);
}
public object GetSettings()
{
return this.Settings;
}
public void ImportSettings()
{
// nothing to do
}
public void ExportSettings()
{
// nothing to do
}
public void Start(PlaneFeedPluginArgs args)
{
// check for personal API-key
if (!String.IsNullOrEmpty(Settings.APIKey))
{
APIKey = Settings.APIKey;
return;
}
// get AirScout internal key
try
{
WebClient client = new WebClient();
string result = client.DownloadString(args.GetKeyURL +
"?id=" + args.InstanceID +
"&key=vrs");
if (!result.StartsWith("Error:"))
{
result = result.Trim('\"');
APIKey = OpenSSLDecrypt(result, args.SessionKey);
}
}
catch (Exception ex)
{
}
}
public PlaneFeedPluginPlaneInfoList GetPlanes(PlaneFeedPluginArgs args)
{
// intialize variables
VarConverter VC = new VarConverter();
VC.AddVar("APPDIR", args.AppDirectory);
VC.AddVar("DATADIR", args.AppDataDirectory);
VC.AddVar("LOGDIR", args.LogDirectory);
VC.AddVar("DATABASEDIR", args.DatabaseDirectory);
VC.AddVar("MINLAT", args.MinLat);
VC.AddVar("MAXLAT", args.MaxLat);
VC.AddVar("MINLON", args.MinLon);
VC.AddVar("MAXLON", args.MaxLon);
VC.AddVar("MINALTM", args.MinAlt);
VC.AddVar("MAXALTM", args.MaxAlt);
VC.AddVar("MINALTFT", (int)UnitConverter.m_ft((double)args.MinAlt));
VC.AddVar("MAXALTFT", (int)UnitConverter.m_ft((double)args.MaxAlt));
// initialize plane info list
PlaneFeedPluginPlaneInfoList planes = new PlaneFeedPluginPlaneInfoList();
string json = "";
// calculate url and get json
String url = VC.ReplaceAllVars(Settings.URL);
Console.WriteLine("[" + this.GetType().Name + "]: Creating web request: " + url);
// HttpWebRequest webrequest = (HttpWebRequest)HttpWebRequest.Create(url);
// webrequest.Referer = "http://www.vrs-world.com/";
// webrequest.Timeout = Settings.Timeout * 1000;
// webrequest.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:37.0) Gecko/20100101 Firefox/37.0";
// webrequest.Accept = "application/json, text/javascript, */*;q=0.01";
// webrequest.AutomaticDecompression = System.Net.DecompressionMethods.Deflate | System.Net.DecompressionMethods.GZip;
// webrequest.Headers.Add("api-auth:" + APIKey);
// Console.WriteLine("[" + this.GetType().Name + "]: Getting web response");
// HttpWebResponse webresponse = (HttpWebResponse)webrequest.GetResponse();
// Console.WriteLine("[" + this.GetType().Name + "]: Reading stream");
//
// using (StreamReader sr = new StreamReader(webresponse.GetResponseStream()))
// {
// json = sr.ReadToEnd();
// }
// */
json = VRSTlsClient.DownloadFile(url, Settings.Timeout * 1000, APIKey);
// save raw data to file if enabled
if (Settings.SaveToFile)
{
using (StreamWriter sw = new StreamWriter(args.TmpDirectory + Path.DirectorySeparatorChar + this.GetType().Name + "_" + DateTime.UtcNow.ToString("yyyy-MM-dd HH_mm_ss") + ".json"))
{
sw.WriteLine(json);
}
}
Console.WriteLine("[" + this.GetType().Name + "]: Analyzing data");
// JavaScriptSerializer js = new JavaScriptSerializer();
// dynamic root = js.Deserialize<dynamic>(json);
// 2017-07-23: workaround for "jumping planes" due to incorrect time stamps
// try to get the server time to adjust the time stamps in plane positions
// --> compare server time with local time and calculate offset
// default offset is 0
long toffset = 0;
try
{
// deserialize JSON
dynamic root = JsonConvert.DeserializeObject(json);
// get local time of request in milliseconds
DateTime lt = DateTime.UtcNow;
long ltime = (long)(lt - new DateTime(1970, 1, 1)).TotalMilliseconds;
// get server time in milliseconds
long stime = ReadPropertyLong(root, "stm");
DateTime sti = new System.DateTime(1970, 1, 1, 0, 0, 0, 0).AddMilliseconds(stime);
// calculate offset in milliseconds
toffset = ltime - stime;
// check value
string message = "Server timestamp difference (server <> local): " + sti.ToString("yyyy-MM-dd HH:mm:ss,fffZ") + " <> " + lt.ToString("yyyy-MM-dd HH:mm:ss,fffZ");
// server time is more than 10.000 ms in the future --> keep offset for correction and log an error message
// else --> set offset to 0 to work with real timestamps of entries without correction
if (toffset <= -10000)
{
message += " --> timestamp correction applied!";
// Log.WriteMessage(message);
}
else
{
// clear offset
toffset = 0;
}
// analyze json string for planes data
// get the planes position list
var aclist = root["acList"];
foreach (var ac in aclist)
{
try
{
PlaneFeedPluginPlaneInfo plane = new PlaneFeedPluginPlaneInfo();
// get hex first
plane.Hex = ReadPropertyString(ac, "Icao").Trim().Replace("\"", "");
// get position
plane.Lat = ReadPropertyDouble(ac, "Lat");
plane.Lon = ReadPropertyDouble(ac, "Long");
// get altitude
// 2017-07-23: take "GAlt" (corrected altitude by air pressure) rather than "Alt"
plane.Alt = ReadPropertyInt(ac, "GAlt");
// get callsign
plane.Call = ReadPropertyString(ac, "Call");
// get registration
plane.Reg = ReadPropertyString(ac, "Reg");
// get track
plane.Track = ReadPropertyInt(ac, "Trak");
// get speed
plane.Speed = ReadPropertyInt(ac, "Spd");
// get position timestamp
// CAUTION!! time is UNIX time in milliseconds
long l = ReadPropertyLong(ac, "PosTime");
if (l != long.MinValue)
{
// 2017-07-23: correct timestamp with offset
l = l + toffset;
DateTime timestamp = new System.DateTime(1970, 1, 1, 0, 0, 0, 0);
timestamp = timestamp.AddMilliseconds(l);
plane.Time = timestamp;
}
else
{
// skip plane if no valid timestamp found
continue;
}
// get type info
plane.Type = ReadPropertyString(ac, "Type");
// get extended plane type info
plane.Manufacturer = ReadPropertyString(ac, "Man");
plane.Model = ReadPropertyString(ac, "Mdl");
long cat = ReadPropertyLong(ac, "WTC");
switch (cat)
{
case 1: plane.Category = 1; break;
case 2: plane.Category = 2; break;
case 3: plane.Category = 3; break;
case 4: plane.Category = 4; break;
default: plane.Category = 0; break;
}
// do correction of A380 as "SuperHeavy" is not supported
if (plane.Type == "A388")
plane.Category = 4;
// get country
plane.Country = ReadPropertyString(ac, "Cou");
// get departure airport
plane.From = ReadPropertyString(ac, "From");
// get destination airport
plane.To = ReadPropertyString(ac, "To");
// get vertical speed
plane.VSpeed = ReadPropertyInt(ac, "Vsi");
// add plane to list
planes.Add(plane);
}
catch (Exception ex)
{
Console.WriteLine("[" + System.Reflection.MethodBase.GetCurrentMethod().Name + "]" + ex.Message);
}
}
}
catch (Exception ex)
{
// do nothing if property is not found
}
Console.WriteLine("[" + this.GetType().Name + "]: Returning " + planes.Count + " planes");
return planes;
}
public void Stop(PlaneFeedPluginArgs args)
{
Settings.Save(true);
}
// end of Interface
/// <summary>
/// Decodes an OpenSSL-encrypted (AES256-CBC) string<br></br><br></br>
/// The equivalent encoding in PHP is like:<br></br><br></br>
/// $encrypt_method = "AES-256-CBC";<br></br>
/// $secret_key = hash('md5',$key);<br></br>
/// $encoded = openssl_encrypt($data, $encrypt_method, $secret_key);
/// </summary>
/// <param name="encrypteddata">The encrypted string (Base64 encoded).</param>
/// <param name="pwd">The password as a string.</param>
/// <returns></returns>
public static string OpenSSLDecrypt(string encrypteddata, string pwd)
{
// create a 32bit MD5 hash of the password
var hash = MD5.Create().ComputeHash(Encoding.UTF8.GetBytes(pwd));
StringBuilder sb = new StringBuilder();
// Loop through each byte of the hashed data
// and format each one as a hexadecimal string.
for (int i = 0; i < hash.Length; i++)
{
sb.Append(hash[i].ToString("x2"));
}
// use the MD5 hash as the key
byte[] key = Encoding.UTF8.GetBytes(sb.ToString());
//get the encrypted data as byte[]
byte[] encrypted = Convert.FromBase64String(encrypteddata);
//setup an empty iv
var iv = new byte[16];
// Declare the RijndaelManaged object used to decrypt the data.
RijndaelManaged aesAlg = null;
// Declare the string used to hold the decrypted text.
string decrypted;
// Create a RijndaelManaged object
// with the specified key and IV.
aesAlg = new RijndaelManaged { Mode = CipherMode.CBC, Padding = PaddingMode.PKCS7, KeySize = 256, BlockSize = 128, Key = key, IV = iv };
// Create a decrytor to perform the stream transform.
ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV);
// Create the streams used for decryption.
using (MemoryStream ms = new MemoryStream(encrypted))
{
using (CryptoStream cs = new CryptoStream(ms, decryptor, CryptoStreamMode.Read))
{
using (StreamReader sr = new StreamReader(cs))
{
// Read the decrypted bytes from the decrypting stream
// and place them in a string.
decrypted = sr.ReadToEnd();
sr.Close();
}
}
}
// return decrypted string
return decrypted;
}
[System.Diagnostics.DebuggerNonUserCode]
private string ReadPropertyString(dynamic o, string propertyname)
{
string s = null;
try
{
s = o[propertyname];
}
catch
{
}
return s;
}
[System.Diagnostics.DebuggerNonUserCode]
private int ReadPropertyInt(dynamic o, string propertyname)
{
int i = int.MinValue;
double d = ReadPropertyDouble(o, propertyname);
if ((d != double.MinValue) && (d >= int.MinValue) && (d <= int.MaxValue))
i = (int)d;
return i;
}
[System.Diagnostics.DebuggerNonUserCode]
private double ReadPropertyDouble(dynamic o, string propertyname)
{
double d = double.MinValue;
try
{
string s = o[propertyname].ToString(CultureInfo.InvariantCulture);
d = double.Parse(s, CultureInfo.InvariantCulture);
}
catch
{
// do nothing if something went wrong
}
return d;
}
[System.Diagnostics.DebuggerNonUserCode]
private long ReadPropertyLong(dynamic o, string propertyname)
{
long l = long.MinValue;
try
{
l = o[propertyname];
}
catch
{
// do nothing if something went wrong
}
return l;
}
[System.Diagnostics.DebuggerNonUserCode]
private bool ReadPropertyBool(dynamic o, string propertyname)
{
bool b = false;
try
{
string s = o[propertyname].ToString();
b = s.ToLower() == "true";
}
catch
{
// do nothing if something went wrong
}
return b;
}
}
/// <summary>
/// //////////////////////////////////////////// Helpers ////////////////////////////////////////////
/// </summary>
public static class UnitConverter
{
public static double ft_m(double feet)
{
return feet / 3.28084;
}
public static double m_ft(double m)
{
return m * 3.28084;
}
public static double kts_kmh(double kts)
{
return kts * 1.852;
}
public static double kmh_kts(double kmh)
{
return kmh / 1.852;
}
public static double km_mi(double km)
{
return km * 1.609;
}
public static double mi_km(double mi)
{
return mi / 1.609;
}
}
public class VarConverter : Dictionary<string, object>
{
public readonly char VarSeparator = '%';
public void AddVar(string var, object value)
{
// adds a new var<>value pair to dictionary
object o;
if (this.TryGetValue(var, out o))
{
// item found --> update value
o = value;
}
else
{
// item not found --> add new
this.Add(var, value);
}
}
public object GetValue(string var)
{
// finds a var in dictionary and returns its value
object o;
if (this.TryGetValue(var, out o))
{
// item found --> return value
return o;
}
// item not found --> return null
return null;
}
public string ReplaceAllVars(string s)
{
// check for var separotors first
if (s.Contains(VarSeparator))
{
// OK, string is containing vars --> crack the string first and replace vars
try
{
string[] a = s.Split(VarSeparator);
// as we are always using a pair of separators the length of a[] must be odd
if (a.Length % 2 == 0)
throw new ArgumentException("Number of separators is not an even number.");
// create new string and replace all vars (on odd indices)
s = "";
for (int i = 0; i < a.Length; i++)
{
if (i % 2 == 0)
{
// cannot be not a var on that position
s = s + a[i];
}
else
{
// var identifier: upper the string and try to convert
a[i] = a[i].ToUpper();
object o;
if (this.TryGetValue(a[i], out o))
{
// convert floating points with invariant culture info
if (o.GetType() == typeof(double))
s = s + ((double)o).ToString(CultureInfo.InvariantCulture);
else if (o.GetType() == typeof(float))
s = s + ((float)o).ToString(CultureInfo.InvariantCulture);
else
s = s + o.ToString();
}
else
{
throw new ArgumentException("Var identifier not found: " + a[i]);
}
}
}
}
catch (Exception ex)
{
// throw an excecption
throw new ArgumentException("Error while parsing string for variables [" + ex.Message + "]: " + s);
}
}
return s;
}
}
}

Wyświetl plik

@ -1,66 +0,0 @@
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
<section name="AirScout.PlaneFeeds.Plugin.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
</sectionGroup>
</configSections>
<userSettings>
<AirScout.PlaneFeeds.Plugin.Properties.Settings>
<setting name="Info" serializeAs="String">
<value>Web feed from Virtual Radar Server</value>
</setting>
<setting name="Name" serializeAs="String">
<value>[WebFeed] Virtual Radar Server</value>
</setting>
<setting name="Disclaimer" serializeAs="String">
<value />
</setting>
<setting name="Disclaimer_Accepted" serializeAs="String">
<value />
</setting>
<setting name="URL" serializeAs="String">
<value>http://www.airscout.eu/downloads/AircraftList.php?fNBnd=%MAXLAT%&amp;fSBnd=%MINLAT%&amp;fWBnd=%MINLON%&amp;fEBnd=%MAXLON%&amp;fAltL=%MINALTFT%&amp;fAltU=%MAXALTFT%</value>
</setting>
<setting name="SaveToFile" serializeAs="String">
<value>False</value>
</setting>
<setting name="ExtendedPlausibilityCheck" serializeAs="String">
<value>True</value>
</setting>
<setting name="EstimatedPosition_MaxError" serializeAs="String">
<value>10</value>
</setting>
<setting name="LogErrors" serializeAs="String">
<value>False</value>
</setting>
<setting name="UseAirScoutProxy" serializeAs="String">
<value>True</value>
</setting>
<setting name="APIKey" serializeAs="String">
<value />
</setting>
<setting name="AirScoutProxyURL" serializeAs="String">
<value>http://www.airscout.eu/downloads/AircraftList.php?fNBnd=%MAXLAT%&amp;fSBnd=%MINLAT%&amp;fWBnd=%MINLON%&amp;fEBnd=%MAXLON%&amp;fAltL=%MINALTFT%&amp;fAltU=%MAXALTFT%</value>
</setting>
<setting name="UserURL" serializeAs="String">
<value>http://public-api.adsbexchange.com/VirtualRadar/AircraftList.json?fNBnd=%MAXLAT%&amp;fSBnd=%MINLAT%&amp;fWBnd=%MINLON%&amp;fEBnd=%MAXLON%&amp;fAltL=%MINALTFT%&amp;fAltU=%MAXALTFT%</value>
</setting>
<setting name="Version" serializeAs="String">
<value />
</setting>
<setting name="HasSettings" serializeAs="String">
<value>True</value>
</setting>
<setting name="CanImport" serializeAs="String">
<value>False</value>
</setting>
<setting name="CanExport" serializeAs="String">
<value>False</value>
</setting>
<setting name="Timeout" serializeAs="String">
<value>30</value>
</setting>
</AirScout.PlaneFeeds.Plugin.Properties.Settings>
</userSettings>
</configuration>

Wyświetl plik

@ -1,7 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="BouncyCastle" version="1.8.5" targetFramework="net40" />
<package id="ILMerge" version="3.0.29" targetFramework="net40" />
<package id="ILMerge.MSBuild.Task" version="1.0.7" targetFramework="net40" />
<package id="Newtonsoft.Json" version="12.0.3" targetFramework="net40" />
</packages>

Wyświetl plik

@ -12,6 +12,8 @@
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<Deterministic>true</Deterministic>
<NuGetPackageImportStamp>
</NuGetPackageImportStamp>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
@ -31,8 +33,8 @@
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.12.0.3\lib\net40\Newtonsoft.Json.dll</HintPath>
<Reference Include="BouncyCastle.Crypto, Version=1.8.9.0, Culture=neutral, PublicKeyToken=0e99375e54769942">
<HintPath>..\packages\BouncyCastle.1.8.9\lib\BouncyCastle.Crypto.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.ComponentModel.Composition" />

Wyświetl plik

@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
// Sie können alle Werte angeben oder Standardwerte für die Build- und Revisionsnummern verwenden,
// indem Sie "*" wie unten gezeigt eingeben:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.3.0.0")]
[assembly: AssemblyFileVersion("1.3.0.0")]
[assembly: AssemblyVersion("1.4.0.0")]
[assembly: AssemblyFileVersion("1.4.0.0")]

Wyświetl plik

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Newtonsoft.Json" version="12.0.3" targetFramework="net40" />
<package id="BouncyCastle" version="1.8.9" targetFramework="net40" />
</packages>

Wyświetl plik

@ -53,15 +53,12 @@
<CodeAnalysisIgnoreBuiltInRules>false</CodeAnalysisIgnoreBuiltInRules>
</PropertyGroup>
<ItemGroup>
<Reference Include="Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.12.0.3\lib\net40\Newtonsoft.Json.dll</HintPath>
<Reference Include="Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.13.0.1\lib\net40\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.ComponentModel.Composition" />
<Reference Include="System.Core" />
<Reference Include="System.Data.SQLite, Version=1.0.113.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=MSIL">
<HintPath>..\packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.113.3\lib\net40\System.Data.SQLite.dll</HintPath>
</Reference>
<Reference Include="System.Security" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml.Linq" />
@ -123,13 +120,6 @@
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Import Project="..\packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.113.3\build\net40\Stub.System.Data.SQLite.Core.NetFramework.targets" Condition="Exists('..\packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.113.3\build\net40\Stub.System.Data.SQLite.Core.NetFramework.targets')" />
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>
<ErrorText>Dieses Projekt verweist auf mindestens ein NuGet-Paket, das auf diesem Computer fehlt. Verwenden Sie die Wiederherstellung von NuGet-Paketen, um die fehlenden Dateien herunterzuladen. Weitere Informationen finden Sie unter "http://go.microsoft.com/fwlink/?LinkID=322105". Die fehlende Datei ist "{0}".</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('..\packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.113.3\build\net40\Stub.System.Data.SQLite.Core.NetFramework.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.113.3\build\net40\Stub.System.Data.SQLite.Core.NetFramework.targets'))" />
</Target>
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">

Wyświetl plik

@ -1,6 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Newtonsoft.Json" version="12.0.3" targetFramework="net40" />
<package id="Stub.System.Data.SQLite.Core.NetFramework" version="1.0.113.3" targetFramework="net40" />
<package id="System.Data.SQLite.Core" version="1.0.113.7" targetFramework="net40" />
<package id="Newtonsoft.Json" version="13.0.1" targetFramework="net40" />
</packages>

Wyświetl plik

@ -32,13 +32,13 @@
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.12.0.3\lib\net40\Newtonsoft.Json.dll</HintPath>
<Reference Include="Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.13.0.1\lib\net40\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Data.SQLite, Version=1.0.113.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=MSIL">
<HintPath>..\packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.113.3\lib\net40\System.Data.SQLite.dll</HintPath>
<Reference Include="System.Data.SQLite, Version=1.0.112.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=MSIL">
<HintPath>..\packages\System.Data.SQLite.Core.1.0.112.0\lib\net40\System.Data.SQLite.dll</HintPath>
</Reference>
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml.Linq" />
@ -80,12 +80,12 @@
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Import Project="..\packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.113.3\build\net40\Stub.System.Data.SQLite.Core.NetFramework.targets" Condition="Exists('..\packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.113.3\build\net40\Stub.System.Data.SQLite.Core.NetFramework.targets')" />
<Import Project="..\packages\System.Data.SQLite.Core.1.0.112.0\build\net40\System.Data.SQLite.Core.targets" Condition="Exists('..\packages\System.Data.SQLite.Core.1.0.112.0\build\net40\System.Data.SQLite.Core.targets')" />
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>
<ErrorText>Dieses Projekt verweist auf mindestens ein NuGet-Paket, das auf diesem Computer fehlt. Verwenden Sie die Wiederherstellung von NuGet-Paketen, um die fehlenden Dateien herunterzuladen. Weitere Informationen finden Sie unter "http://go.microsoft.com/fwlink/?LinkID=322105". Die fehlende Datei ist "{0}".</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('..\packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.113.3\build\net40\Stub.System.Data.SQLite.Core.NetFramework.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.113.3\build\net40\Stub.System.Data.SQLite.Core.NetFramework.targets'))" />
<Error Condition="!Exists('..\packages\System.Data.SQLite.Core.1.0.112.0\build\net40\System.Data.SQLite.Core.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\System.Data.SQLite.Core.1.0.112.0\build\net40\System.Data.SQLite.Core.targets'))" />
</Target>
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.

Wyświetl plik

@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Newtonsoft.Json" version="12.0.3" targetFramework="net40" />
<package id="Stub.System.Data.SQLite.Core.NetFramework" version="1.0.113.3" targetFramework="net40" />
<package id="System.Data.SQLite.Core" version="1.0.113.7" targetFramework="net40" />
<package id="Newtonsoft.Json" version="13.0.1" targetFramework="net40" />
<package id="System.Data.SQLite.Core" version="1.0.112.0" targetFramework="net40" />
</packages>

Wyświetl plik

@ -31,12 +31,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AeroWizard", "AeroWizard\Ae
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SerializableGenerics", "SerializableGenerics\SerializableGenerics.csproj", "{EF2EB181-4D5B-4418-A280-BFA1D53550BE}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ElevationTileGenerator", "ElevationTileGenerator\ElevationTileGenerator.csproj", "{955CEA7D-37F6-4122-B4CA-B08C2B73969F}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SQLiteDatabase", "SQLiteDatabase\SQLiteDatabase\SQLiteDatabase.csproj", "{6056D3BE-7002-4A6A-A9EA-6FF45122A3C7}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HorizonGenerator", "HorizonGenerator\HorizonGenerator.csproj", "{ED1D9A86-30A9-4F0F-8FC8-E36B2EA01D0C}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OxyPlot", "OxyPlot\Source\OxyPlot\OxyPlot.csproj", "{507DE008-21AC-469B-BC30-23B239832AF6}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OxyPlot.WindowsForms", "OxyPlot\Source\OxyPlot.WindowsForms\OxyPlot.WindowsForms.csproj", "{8BC521AD-81CF-4E6C-8898-BE67527E7064}"
@ -67,8 +63,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ScoutBase.Database", "Scout
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AirScout.PlaneFeeds.Plugin", "AirScout.PlaneFeeds.Plugin\AirScout.PlaneFeeds.Plugin.csproj", "{36945DBD-96C8-41E7-9168-F83C42E67AF3}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AirScout.PlaneFeeds.Plugin.VirtualRadarServer", "AirScout.PlaneFeeds.Plugin.VirtualRadarServer\AirScout.PlaneFeeds.Plugin.VirtualRadarServer.csproj", "{50093159-6446-48CD-B8CD-6FA58EB88CBB}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AirScout.PlaneFeeds", "AirScout.PlaneFeeds\AirScout.PlaneFeeds.csproj", "{EA78AD40-1505-406F-8049-744E58D93F54}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AirScout.PlaneFeeds.Plugin.RTL1090", "AirScout.PlaneFeeds.Plugin.RTL1090\AirScout.PlaneFeeds.Plugin.RTL1090.csproj", "{4225D870-2CCB-4E6A-965C-AA005CB1C36C}"
@ -77,29 +71,15 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AirScout.PlaneFeeds.Plugin.
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AirScout.PlaneFeeds.Plugin.Template", "AirScout.PlaneFeeds.Plugin.Template\AirScout.PlaneFeeds.Plugin.Template.csproj", "{15F76339-484C-4431-BA51-0125697D4455}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AirScout.PlaneFeeds.Plugin.RB24", "AirScout.PlaneFeeds.Plugin.RB24\AirScout.PlaneFeeds.Plugin.RB24.csproj", "{D953C82D-5881-4F5C-8335-1C54114BE28B}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AirScout.PlaneFeeds.Plugin.OpenSky", "AirScout.PlaneFeeds.Plugin.OpenSky\AirScout.PlaneFeeds.Plugin.OpenSky.csproj", "{23F584DB-EB5E-452D-B49F-7C1CABB713FF}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ScoutBase.Maps", "ScoutBase\ScoutBase.Maps\ScoutBase.Maps.csproj", "{B3B005A5-CC05-430B-B966-20BE5E5985BF}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MapTileGenerator", "MapTileGenerator\MapTileGenerator.csproj", "{3D5AADC3-E4CA-4C12-8939-8DC778F6018E}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CATCheck", "CATCheck\CATCheck.csproj", "{0F0B27D0-7957-4CE0-9121-2C89746AF136}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ScoutBase.CAT", "ScoutBase\ScoutBase.CAT\ScoutBase.CAT.csproj", "{C9291203-B5D0-4179-888D-04BC670B158F}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AirScout.CAT", "AirScout.CAT\AirScout.CAT.csproj", "{FFDEC390-7BBC-4DEC-9826-1DD04279F3FA}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RainScout", "RainScout\RainScout.csproj", "{F14C9DB2-D556-45F4-8CB5-E9B402C36087}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RainScout.Radars", "RainScout.Radars\RainScout.Radars.csproj", "{58A3209F-1BF2-4B59-9A2A-0983CE232CB0}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RainScout.Core", "RainScout.Core\RainScout.Core.csproj", "{2AA51078-C9E9-4AD0-A8CD-2A028A6BC886}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ElevationCoverageMapper", "ElevationCoverageMapper\ElevationCoverageMapper.csproj", "{3ABFFAF3-5169-4DF6-9F64-BF44FCCD26F1}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WinTestSimulator", "WinTestSimulator\WinTestSimulator.csproj", "{B7B00B6B-4288-4562-9773-116556607857}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AirScout.PlaneFeeds.Plugin.AirScoutServer", "AirScout.PlaneFeeds.Plugin.AirScoutServer\AirScout.PlaneFeeds.Plugin.AirScoutServer.csproj", "{692CAF08-26D0-4D41-9CAC-BDA8D8BE6125}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@ -109,6 +89,9 @@ Global
Release|Any CPU = Release|Any CPU
Release|Mixed Platforms = Release|Mixed Platforms
Release|x86 = Release|x86
WSL|Any CPU = WSL|Any CPU
WSL|Mixed Platforms = WSL|Mixed Platforms
WSL|x86 = WSL|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{17498590-2CFF-4D24-BFB8-549D14BD2545}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
@ -122,6 +105,12 @@ Global
{17498590-2CFF-4D24-BFB8-549D14BD2545}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{17498590-2CFF-4D24-BFB8-549D14BD2545}.Release|x86.ActiveCfg = Release|x86
{17498590-2CFF-4D24-BFB8-549D14BD2545}.Release|x86.Build.0 = Release|x86
{17498590-2CFF-4D24-BFB8-549D14BD2545}.WSL|Any CPU.ActiveCfg = WSL|Any CPU
{17498590-2CFF-4D24-BFB8-549D14BD2545}.WSL|Any CPU.Build.0 = WSL|Any CPU
{17498590-2CFF-4D24-BFB8-549D14BD2545}.WSL|Mixed Platforms.ActiveCfg = WSL|x86
{17498590-2CFF-4D24-BFB8-549D14BD2545}.WSL|Mixed Platforms.Build.0 = WSL|x86
{17498590-2CFF-4D24-BFB8-549D14BD2545}.WSL|x86.ActiveCfg = WSL|x86
{17498590-2CFF-4D24-BFB8-549D14BD2545}.WSL|x86.Build.0 = WSL|x86
{5F5F4A33-9061-4F30-A08A-E68B4FB84D64}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{5F5F4A33-9061-4F30-A08A-E68B4FB84D64}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
{5F5F4A33-9061-4F30-A08A-E68B4FB84D64}.Debug|Mixed Platforms.Build.0 = Debug|x86
@ -131,6 +120,12 @@ Global
{5F5F4A33-9061-4F30-A08A-E68B4FB84D64}.Release|Mixed Platforms.Build.0 = Release|x86
{5F5F4A33-9061-4F30-A08A-E68B4FB84D64}.Release|x86.ActiveCfg = Release|x86
{5F5F4A33-9061-4F30-A08A-E68B4FB84D64}.Release|x86.Build.0 = Release|x86
{5F5F4A33-9061-4F30-A08A-E68B4FB84D64}.WSL|Any CPU.ActiveCfg = Release|Any CPU
{5F5F4A33-9061-4F30-A08A-E68B4FB84D64}.WSL|Any CPU.Build.0 = Release|Any CPU
{5F5F4A33-9061-4F30-A08A-E68B4FB84D64}.WSL|Mixed Platforms.ActiveCfg = Release|x86
{5F5F4A33-9061-4F30-A08A-E68B4FB84D64}.WSL|Mixed Platforms.Build.0 = Release|x86
{5F5F4A33-9061-4F30-A08A-E68B4FB84D64}.WSL|x86.ActiveCfg = Release|x86
{5F5F4A33-9061-4F30-A08A-E68B4FB84D64}.WSL|x86.Build.0 = Release|x86
{0E5542E0-FC5D-4F67-950D-9F28C5D1225A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{0E5542E0-FC5D-4F67-950D-9F28C5D1225A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{0E5542E0-FC5D-4F67-950D-9F28C5D1225A}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
@ -141,6 +136,12 @@ Global
{0E5542E0-FC5D-4F67-950D-9F28C5D1225A}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{0E5542E0-FC5D-4F67-950D-9F28C5D1225A}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{0E5542E0-FC5D-4F67-950D-9F28C5D1225A}.Release|x86.ActiveCfg = Release|Any CPU
{0E5542E0-FC5D-4F67-950D-9F28C5D1225A}.WSL|Any CPU.ActiveCfg = Release|Any CPU
{0E5542E0-FC5D-4F67-950D-9F28C5D1225A}.WSL|Any CPU.Build.0 = Release|Any CPU
{0E5542E0-FC5D-4F67-950D-9F28C5D1225A}.WSL|Mixed Platforms.ActiveCfg = Release|Any CPU
{0E5542E0-FC5D-4F67-950D-9F28C5D1225A}.WSL|Mixed Platforms.Build.0 = Release|Any CPU
{0E5542E0-FC5D-4F67-950D-9F28C5D1225A}.WSL|x86.ActiveCfg = Release|Any CPU
{0E5542E0-FC5D-4F67-950D-9F28C5D1225A}.WSL|x86.Build.0 = Release|Any CPU
{CD637EDA-E0C3-4ABF-8E24-A5B94892311C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{CD637EDA-E0C3-4ABF-8E24-A5B94892311C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{CD637EDA-E0C3-4ABF-8E24-A5B94892311C}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
@ -151,6 +152,12 @@ Global
{CD637EDA-E0C3-4ABF-8E24-A5B94892311C}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{CD637EDA-E0C3-4ABF-8E24-A5B94892311C}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{CD637EDA-E0C3-4ABF-8E24-A5B94892311C}.Release|x86.ActiveCfg = Release|Any CPU
{CD637EDA-E0C3-4ABF-8E24-A5B94892311C}.WSL|Any CPU.ActiveCfg = Release|Any CPU
{CD637EDA-E0C3-4ABF-8E24-A5B94892311C}.WSL|Any CPU.Build.0 = Release|Any CPU
{CD637EDA-E0C3-4ABF-8E24-A5B94892311C}.WSL|Mixed Platforms.ActiveCfg = Release|Any CPU
{CD637EDA-E0C3-4ABF-8E24-A5B94892311C}.WSL|Mixed Platforms.Build.0 = Release|Any CPU
{CD637EDA-E0C3-4ABF-8E24-A5B94892311C}.WSL|x86.ActiveCfg = Release|Any CPU
{CD637EDA-E0C3-4ABF-8E24-A5B94892311C}.WSL|x86.Build.0 = Release|Any CPU
{E06DEF77-F933-42FB-AFD7-DB2D0D8D6A98}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E06DEF77-F933-42FB-AFD7-DB2D0D8D6A98}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E06DEF77-F933-42FB-AFD7-DB2D0D8D6A98}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
@ -162,6 +169,12 @@ Global
{E06DEF77-F933-42FB-AFD7-DB2D0D8D6A98}.Release|Mixed Platforms.Build.0 = Release|x86
{E06DEF77-F933-42FB-AFD7-DB2D0D8D6A98}.Release|x86.ActiveCfg = Release|x86
{E06DEF77-F933-42FB-AFD7-DB2D0D8D6A98}.Release|x86.Build.0 = Release|x86
{E06DEF77-F933-42FB-AFD7-DB2D0D8D6A98}.WSL|Any CPU.ActiveCfg = Release|Any CPU
{E06DEF77-F933-42FB-AFD7-DB2D0D8D6A98}.WSL|Any CPU.Build.0 = Release|Any CPU
{E06DEF77-F933-42FB-AFD7-DB2D0D8D6A98}.WSL|Mixed Platforms.ActiveCfg = Release|x86
{E06DEF77-F933-42FB-AFD7-DB2D0D8D6A98}.WSL|Mixed Platforms.Build.0 = Release|x86
{E06DEF77-F933-42FB-AFD7-DB2D0D8D6A98}.WSL|x86.ActiveCfg = Release|x86
{E06DEF77-F933-42FB-AFD7-DB2D0D8D6A98}.WSL|x86.Build.0 = Release|x86
{D0C39D9D-BED0-418B-9A5E-713176CAF40C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D0C39D9D-BED0-418B-9A5E-713176CAF40C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D0C39D9D-BED0-418B-9A5E-713176CAF40C}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
@ -173,6 +186,12 @@ Global
{D0C39D9D-BED0-418B-9A5E-713176CAF40C}.Release|Mixed Platforms.Build.0 = Release|x86
{D0C39D9D-BED0-418B-9A5E-713176CAF40C}.Release|x86.ActiveCfg = Release|x86
{D0C39D9D-BED0-418B-9A5E-713176CAF40C}.Release|x86.Build.0 = Release|x86
{D0C39D9D-BED0-418B-9A5E-713176CAF40C}.WSL|Any CPU.ActiveCfg = Release|Any CPU
{D0C39D9D-BED0-418B-9A5E-713176CAF40C}.WSL|Any CPU.Build.0 = Release|Any CPU
{D0C39D9D-BED0-418B-9A5E-713176CAF40C}.WSL|Mixed Platforms.ActiveCfg = Release|x86
{D0C39D9D-BED0-418B-9A5E-713176CAF40C}.WSL|Mixed Platforms.Build.0 = Release|x86
{D0C39D9D-BED0-418B-9A5E-713176CAF40C}.WSL|x86.ActiveCfg = Release|x86
{D0C39D9D-BED0-418B-9A5E-713176CAF40C}.WSL|x86.Build.0 = Release|x86
{D77772F9-3D3D-40BA-B95F-05C45878078F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D77772F9-3D3D-40BA-B95F-05C45878078F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D77772F9-3D3D-40BA-B95F-05C45878078F}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
@ -183,6 +202,12 @@ Global
{D77772F9-3D3D-40BA-B95F-05C45878078F}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{D77772F9-3D3D-40BA-B95F-05C45878078F}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{D77772F9-3D3D-40BA-B95F-05C45878078F}.Release|x86.ActiveCfg = Release|Any CPU
{D77772F9-3D3D-40BA-B95F-05C45878078F}.WSL|Any CPU.ActiveCfg = Release|Any CPU
{D77772F9-3D3D-40BA-B95F-05C45878078F}.WSL|Any CPU.Build.0 = Release|Any CPU
{D77772F9-3D3D-40BA-B95F-05C45878078F}.WSL|Mixed Platforms.ActiveCfg = Release|Any CPU
{D77772F9-3D3D-40BA-B95F-05C45878078F}.WSL|Mixed Platforms.Build.0 = Release|Any CPU
{D77772F9-3D3D-40BA-B95F-05C45878078F}.WSL|x86.ActiveCfg = Release|Any CPU
{D77772F9-3D3D-40BA-B95F-05C45878078F}.WSL|x86.Build.0 = Release|Any CPU
{BAA5FE10-3E3A-4D5D-AB3D-4B50D6AC0321}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{BAA5FE10-3E3A-4D5D-AB3D-4B50D6AC0321}.Debug|Any CPU.Build.0 = Debug|Any CPU
{BAA5FE10-3E3A-4D5D-AB3D-4B50D6AC0321}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
@ -194,6 +219,12 @@ Global
{BAA5FE10-3E3A-4D5D-AB3D-4B50D6AC0321}.Release|Mixed Platforms.Build.0 = Release|x86
{BAA5FE10-3E3A-4D5D-AB3D-4B50D6AC0321}.Release|x86.ActiveCfg = Release|x86
{BAA5FE10-3E3A-4D5D-AB3D-4B50D6AC0321}.Release|x86.Build.0 = Release|x86
{BAA5FE10-3E3A-4D5D-AB3D-4B50D6AC0321}.WSL|Any CPU.ActiveCfg = Release|Any CPU
{BAA5FE10-3E3A-4D5D-AB3D-4B50D6AC0321}.WSL|Any CPU.Build.0 = Release|Any CPU
{BAA5FE10-3E3A-4D5D-AB3D-4B50D6AC0321}.WSL|Mixed Platforms.ActiveCfg = Release|x86
{BAA5FE10-3E3A-4D5D-AB3D-4B50D6AC0321}.WSL|Mixed Platforms.Build.0 = Release|x86
{BAA5FE10-3E3A-4D5D-AB3D-4B50D6AC0321}.WSL|x86.ActiveCfg = Release|x86
{BAA5FE10-3E3A-4D5D-AB3D-4B50D6AC0321}.WSL|x86.Build.0 = Release|x86
{7B815C51-6896-4989-BD1B-8D2D7A116AA3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7B815C51-6896-4989-BD1B-8D2D7A116AA3}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7B815C51-6896-4989-BD1B-8D2D7A116AA3}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
@ -205,6 +236,12 @@ Global
{7B815C51-6896-4989-BD1B-8D2D7A116AA3}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{7B815C51-6896-4989-BD1B-8D2D7A116AA3}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{7B815C51-6896-4989-BD1B-8D2D7A116AA3}.Release|x86.ActiveCfg = Release|Any CPU
{7B815C51-6896-4989-BD1B-8D2D7A116AA3}.WSL|Any CPU.ActiveCfg = Release|Any CPU
{7B815C51-6896-4989-BD1B-8D2D7A116AA3}.WSL|Any CPU.Build.0 = Release|Any CPU
{7B815C51-6896-4989-BD1B-8D2D7A116AA3}.WSL|Mixed Platforms.ActiveCfg = Release|Any CPU
{7B815C51-6896-4989-BD1B-8D2D7A116AA3}.WSL|Mixed Platforms.Build.0 = Release|Any CPU
{7B815C51-6896-4989-BD1B-8D2D7A116AA3}.WSL|x86.ActiveCfg = Release|Any CPU
{7B815C51-6896-4989-BD1B-8D2D7A116AA3}.WSL|x86.Build.0 = Release|Any CPU
{A5775994-404F-4B2E-9FF7-4537BBE17506}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A5775994-404F-4B2E-9FF7-4537BBE17506}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A5775994-404F-4B2E-9FF7-4537BBE17506}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
@ -215,6 +252,12 @@ Global
{A5775994-404F-4B2E-9FF7-4537BBE17506}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{A5775994-404F-4B2E-9FF7-4537BBE17506}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{A5775994-404F-4B2E-9FF7-4537BBE17506}.Release|x86.ActiveCfg = Release|Any CPU
{A5775994-404F-4B2E-9FF7-4537BBE17506}.WSL|Any CPU.ActiveCfg = Release|Any CPU
{A5775994-404F-4B2E-9FF7-4537BBE17506}.WSL|Any CPU.Build.0 = Release|Any CPU
{A5775994-404F-4B2E-9FF7-4537BBE17506}.WSL|Mixed Platforms.ActiveCfg = Release|Any CPU
{A5775994-404F-4B2E-9FF7-4537BBE17506}.WSL|Mixed Platforms.Build.0 = Release|Any CPU
{A5775994-404F-4B2E-9FF7-4537BBE17506}.WSL|x86.ActiveCfg = Release|Any CPU
{A5775994-404F-4B2E-9FF7-4537BBE17506}.WSL|x86.Build.0 = Release|Any CPU
{EE86E933-D883-4B18-80EB-0FBA55EC67C6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{EE86E933-D883-4B18-80EB-0FBA55EC67C6}.Debug|Any CPU.Build.0 = Debug|Any CPU
{EE86E933-D883-4B18-80EB-0FBA55EC67C6}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
@ -227,6 +270,12 @@ Global
{EE86E933-D883-4B18-80EB-0FBA55EC67C6}.Release|Mixed Platforms.Build.0 = Release|x86
{EE86E933-D883-4B18-80EB-0FBA55EC67C6}.Release|x86.ActiveCfg = Release|x86
{EE86E933-D883-4B18-80EB-0FBA55EC67C6}.Release|x86.Build.0 = Release|x86
{EE86E933-D883-4B18-80EB-0FBA55EC67C6}.WSL|Any CPU.ActiveCfg = Release|Any CPU
{EE86E933-D883-4B18-80EB-0FBA55EC67C6}.WSL|Any CPU.Build.0 = Release|Any CPU
{EE86E933-D883-4B18-80EB-0FBA55EC67C6}.WSL|Mixed Platforms.ActiveCfg = Release|x86
{EE86E933-D883-4B18-80EB-0FBA55EC67C6}.WSL|Mixed Platforms.Build.0 = Release|x86
{EE86E933-D883-4B18-80EB-0FBA55EC67C6}.WSL|x86.ActiveCfg = Release|x86
{EE86E933-D883-4B18-80EB-0FBA55EC67C6}.WSL|x86.Build.0 = Release|x86
{009CABFD-726D-481F-972D-0A218E0AD9B9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{009CABFD-726D-481F-972D-0A218E0AD9B9}.Debug|Any CPU.Build.0 = Debug|Any CPU
{009CABFD-726D-481F-972D-0A218E0AD9B9}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
@ -238,6 +287,12 @@ Global
{009CABFD-726D-481F-972D-0A218E0AD9B9}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{009CABFD-726D-481F-972D-0A218E0AD9B9}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{009CABFD-726D-481F-972D-0A218E0AD9B9}.Release|x86.ActiveCfg = Release|Any CPU
{009CABFD-726D-481F-972D-0A218E0AD9B9}.WSL|Any CPU.ActiveCfg = Release|Any CPU
{009CABFD-726D-481F-972D-0A218E0AD9B9}.WSL|Any CPU.Build.0 = Release|Any CPU
{009CABFD-726D-481F-972D-0A218E0AD9B9}.WSL|Mixed Platforms.ActiveCfg = Debug|x86
{009CABFD-726D-481F-972D-0A218E0AD9B9}.WSL|Mixed Platforms.Build.0 = Debug|x86
{009CABFD-726D-481F-972D-0A218E0AD9B9}.WSL|x86.ActiveCfg = Debug|x86
{009CABFD-726D-481F-972D-0A218E0AD9B9}.WSL|x86.Build.0 = Debug|x86
{199C12C4-3EEF-4D08-BAC3-F2A62BCF969C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{199C12C4-3EEF-4D08-BAC3-F2A62BCF969C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{199C12C4-3EEF-4D08-BAC3-F2A62BCF969C}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
@ -250,6 +305,12 @@ Global
{199C12C4-3EEF-4D08-BAC3-F2A62BCF969C}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{199C12C4-3EEF-4D08-BAC3-F2A62BCF969C}.Release|x86.ActiveCfg = Release|Any CPU
{199C12C4-3EEF-4D08-BAC3-F2A62BCF969C}.Release|x86.Build.0 = Release|Any CPU
{199C12C4-3EEF-4D08-BAC3-F2A62BCF969C}.WSL|Any CPU.ActiveCfg = Release|Any CPU
{199C12C4-3EEF-4D08-BAC3-F2A62BCF969C}.WSL|Any CPU.Build.0 = Release|Any CPU
{199C12C4-3EEF-4D08-BAC3-F2A62BCF969C}.WSL|Mixed Platforms.ActiveCfg = Release|Any CPU
{199C12C4-3EEF-4D08-BAC3-F2A62BCF969C}.WSL|Mixed Platforms.Build.0 = Release|Any CPU
{199C12C4-3EEF-4D08-BAC3-F2A62BCF969C}.WSL|x86.ActiveCfg = Release|Any CPU
{199C12C4-3EEF-4D08-BAC3-F2A62BCF969C}.WSL|x86.Build.0 = Release|Any CPU
{EF2EB181-4D5B-4418-A280-BFA1D53550BE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{EF2EB181-4D5B-4418-A280-BFA1D53550BE}.Debug|Any CPU.Build.0 = Debug|Any CPU
{EF2EB181-4D5B-4418-A280-BFA1D53550BE}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
@ -262,16 +323,12 @@ Global
{EF2EB181-4D5B-4418-A280-BFA1D53550BE}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{EF2EB181-4D5B-4418-A280-BFA1D53550BE}.Release|x86.ActiveCfg = Release|Any CPU
{EF2EB181-4D5B-4418-A280-BFA1D53550BE}.Release|x86.Build.0 = Release|Any CPU
{955CEA7D-37F6-4122-B4CA-B08C2B73969F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{955CEA7D-37F6-4122-B4CA-B08C2B73969F}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{955CEA7D-37F6-4122-B4CA-B08C2B73969F}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{955CEA7D-37F6-4122-B4CA-B08C2B73969F}.Debug|x86.ActiveCfg = Debug|x86
{955CEA7D-37F6-4122-B4CA-B08C2B73969F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{955CEA7D-37F6-4122-B4CA-B08C2B73969F}.Release|Any CPU.Build.0 = Release|Any CPU
{955CEA7D-37F6-4122-B4CA-B08C2B73969F}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{955CEA7D-37F6-4122-B4CA-B08C2B73969F}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{955CEA7D-37F6-4122-B4CA-B08C2B73969F}.Release|x86.ActiveCfg = Release|Any CPU
{955CEA7D-37F6-4122-B4CA-B08C2B73969F}.Release|x86.Build.0 = Release|Any CPU
{EF2EB181-4D5B-4418-A280-BFA1D53550BE}.WSL|Any CPU.ActiveCfg = Release|Any CPU
{EF2EB181-4D5B-4418-A280-BFA1D53550BE}.WSL|Any CPU.Build.0 = Release|Any CPU
{EF2EB181-4D5B-4418-A280-BFA1D53550BE}.WSL|Mixed Platforms.ActiveCfg = Release|Any CPU
{EF2EB181-4D5B-4418-A280-BFA1D53550BE}.WSL|Mixed Platforms.Build.0 = Release|Any CPU
{EF2EB181-4D5B-4418-A280-BFA1D53550BE}.WSL|x86.ActiveCfg = Release|Any CPU
{EF2EB181-4D5B-4418-A280-BFA1D53550BE}.WSL|x86.Build.0 = Release|Any CPU
{6056D3BE-7002-4A6A-A9EA-6FF45122A3C7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{6056D3BE-7002-4A6A-A9EA-6FF45122A3C7}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6056D3BE-7002-4A6A-A9EA-6FF45122A3C7}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
@ -284,16 +341,12 @@ Global
{6056D3BE-7002-4A6A-A9EA-6FF45122A3C7}.Release|Mixed Platforms.Build.0 = Release|x86
{6056D3BE-7002-4A6A-A9EA-6FF45122A3C7}.Release|x86.ActiveCfg = Release|x86
{6056D3BE-7002-4A6A-A9EA-6FF45122A3C7}.Release|x86.Build.0 = Release|x86
{ED1D9A86-30A9-4F0F-8FC8-E36B2EA01D0C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{ED1D9A86-30A9-4F0F-8FC8-E36B2EA01D0C}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{ED1D9A86-30A9-4F0F-8FC8-E36B2EA01D0C}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{ED1D9A86-30A9-4F0F-8FC8-E36B2EA01D0C}.Debug|x86.ActiveCfg = Debug|Any CPU
{ED1D9A86-30A9-4F0F-8FC8-E36B2EA01D0C}.Debug|x86.Build.0 = Debug|Any CPU
{ED1D9A86-30A9-4F0F-8FC8-E36B2EA01D0C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{ED1D9A86-30A9-4F0F-8FC8-E36B2EA01D0C}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{ED1D9A86-30A9-4F0F-8FC8-E36B2EA01D0C}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{ED1D9A86-30A9-4F0F-8FC8-E36B2EA01D0C}.Release|x86.ActiveCfg = Release|Any CPU
{ED1D9A86-30A9-4F0F-8FC8-E36B2EA01D0C}.Release|x86.Build.0 = Release|Any CPU
{6056D3BE-7002-4A6A-A9EA-6FF45122A3C7}.WSL|Any CPU.ActiveCfg = Release|Any CPU
{6056D3BE-7002-4A6A-A9EA-6FF45122A3C7}.WSL|Any CPU.Build.0 = Release|Any CPU
{6056D3BE-7002-4A6A-A9EA-6FF45122A3C7}.WSL|Mixed Platforms.ActiveCfg = Debug|x64
{6056D3BE-7002-4A6A-A9EA-6FF45122A3C7}.WSL|Mixed Platforms.Build.0 = Debug|x64
{6056D3BE-7002-4A6A-A9EA-6FF45122A3C7}.WSL|x86.ActiveCfg = Release|x86
{6056D3BE-7002-4A6A-A9EA-6FF45122A3C7}.WSL|x86.Build.0 = Release|x86
{507DE008-21AC-469B-BC30-23B239832AF6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{507DE008-21AC-469B-BC30-23B239832AF6}.Debug|Any CPU.Build.0 = Debug|Any CPU
{507DE008-21AC-469B-BC30-23B239832AF6}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
@ -306,6 +359,12 @@ Global
{507DE008-21AC-469B-BC30-23B239832AF6}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{507DE008-21AC-469B-BC30-23B239832AF6}.Release|x86.ActiveCfg = Release|Any CPU
{507DE008-21AC-469B-BC30-23B239832AF6}.Release|x86.Build.0 = Release|Any CPU
{507DE008-21AC-469B-BC30-23B239832AF6}.WSL|Any CPU.ActiveCfg = Release|Any CPU
{507DE008-21AC-469B-BC30-23B239832AF6}.WSL|Any CPU.Build.0 = Release|Any CPU
{507DE008-21AC-469B-BC30-23B239832AF6}.WSL|Mixed Platforms.ActiveCfg = Release|Any CPU
{507DE008-21AC-469B-BC30-23B239832AF6}.WSL|Mixed Platforms.Build.0 = Release|Any CPU
{507DE008-21AC-469B-BC30-23B239832AF6}.WSL|x86.ActiveCfg = Release|Any CPU
{507DE008-21AC-469B-BC30-23B239832AF6}.WSL|x86.Build.0 = Release|Any CPU
{8BC521AD-81CF-4E6C-8898-BE67527E7064}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{8BC521AD-81CF-4E6C-8898-BE67527E7064}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8BC521AD-81CF-4E6C-8898-BE67527E7064}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
@ -318,6 +377,12 @@ Global
{8BC521AD-81CF-4E6C-8898-BE67527E7064}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{8BC521AD-81CF-4E6C-8898-BE67527E7064}.Release|x86.ActiveCfg = Release|Any CPU
{8BC521AD-81CF-4E6C-8898-BE67527E7064}.Release|x86.Build.0 = Release|Any CPU
{8BC521AD-81CF-4E6C-8898-BE67527E7064}.WSL|Any CPU.ActiveCfg = Release|Any CPU
{8BC521AD-81CF-4E6C-8898-BE67527E7064}.WSL|Any CPU.Build.0 = Release|Any CPU
{8BC521AD-81CF-4E6C-8898-BE67527E7064}.WSL|Mixed Platforms.ActiveCfg = Release|Any CPU
{8BC521AD-81CF-4E6C-8898-BE67527E7064}.WSL|Mixed Platforms.Build.0 = Release|Any CPU
{8BC521AD-81CF-4E6C-8898-BE67527E7064}.WSL|x86.ActiveCfg = Release|Any CPU
{8BC521AD-81CF-4E6C-8898-BE67527E7064}.WSL|x86.Build.0 = Release|Any CPU
{358E87D7-849F-412A-B487-F7B7D585A7F9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{358E87D7-849F-412A-B487-F7B7D585A7F9}.Debug|Any CPU.Build.0 = Debug|Any CPU
{358E87D7-849F-412A-B487-F7B7D585A7F9}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
@ -330,6 +395,12 @@ Global
{358E87D7-849F-412A-B487-F7B7D585A7F9}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{358E87D7-849F-412A-B487-F7B7D585A7F9}.Release|x86.ActiveCfg = Release|Any CPU
{358E87D7-849F-412A-B487-F7B7D585A7F9}.Release|x86.Build.0 = Release|Any CPU
{358E87D7-849F-412A-B487-F7B7D585A7F9}.WSL|Any CPU.ActiveCfg = Release|Any CPU
{358E87D7-849F-412A-B487-F7B7D585A7F9}.WSL|Any CPU.Build.0 = Release|Any CPU
{358E87D7-849F-412A-B487-F7B7D585A7F9}.WSL|Mixed Platforms.ActiveCfg = Release|Any CPU
{358E87D7-849F-412A-B487-F7B7D585A7F9}.WSL|Mixed Platforms.Build.0 = Release|Any CPU
{358E87D7-849F-412A-B487-F7B7D585A7F9}.WSL|x86.ActiveCfg = Release|Any CPU
{358E87D7-849F-412A-B487-F7B7D585A7F9}.WSL|x86.Build.0 = Release|Any CPU
{610DB007-5F74-4B5D-8B71-5E2C163A99B3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{610DB007-5F74-4B5D-8B71-5E2C163A99B3}.Debug|Any CPU.Build.0 = Debug|Any CPU
{610DB007-5F74-4B5D-8B71-5E2C163A99B3}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
@ -342,6 +413,12 @@ Global
{610DB007-5F74-4B5D-8B71-5E2C163A99B3}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{610DB007-5F74-4B5D-8B71-5E2C163A99B3}.Release|x86.ActiveCfg = Release|Any CPU
{610DB007-5F74-4B5D-8B71-5E2C163A99B3}.Release|x86.Build.0 = Release|Any CPU
{610DB007-5F74-4B5D-8B71-5E2C163A99B3}.WSL|Any CPU.ActiveCfg = Release|Any CPU
{610DB007-5F74-4B5D-8B71-5E2C163A99B3}.WSL|Any CPU.Build.0 = Release|Any CPU
{610DB007-5F74-4B5D-8B71-5E2C163A99B3}.WSL|Mixed Platforms.ActiveCfg = Release|Any CPU
{610DB007-5F74-4B5D-8B71-5E2C163A99B3}.WSL|Mixed Platforms.Build.0 = Release|Any CPU
{610DB007-5F74-4B5D-8B71-5E2C163A99B3}.WSL|x86.ActiveCfg = Release|Any CPU
{610DB007-5F74-4B5D-8B71-5E2C163A99B3}.WSL|x86.Build.0 = Release|Any CPU
{D3B0AD67-44D8-4B3D-BED9-CE1FD6DE2C5A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D3B0AD67-44D8-4B3D-BED9-CE1FD6DE2C5A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D3B0AD67-44D8-4B3D-BED9-CE1FD6DE2C5A}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
@ -354,6 +431,12 @@ Global
{D3B0AD67-44D8-4B3D-BED9-CE1FD6DE2C5A}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{D3B0AD67-44D8-4B3D-BED9-CE1FD6DE2C5A}.Release|x86.ActiveCfg = Release|Any CPU
{D3B0AD67-44D8-4B3D-BED9-CE1FD6DE2C5A}.Release|x86.Build.0 = Release|Any CPU
{D3B0AD67-44D8-4B3D-BED9-CE1FD6DE2C5A}.WSL|Any CPU.ActiveCfg = Release|Any CPU
{D3B0AD67-44D8-4B3D-BED9-CE1FD6DE2C5A}.WSL|Any CPU.Build.0 = Release|Any CPU
{D3B0AD67-44D8-4B3D-BED9-CE1FD6DE2C5A}.WSL|Mixed Platforms.ActiveCfg = Release|Any CPU
{D3B0AD67-44D8-4B3D-BED9-CE1FD6DE2C5A}.WSL|Mixed Platforms.Build.0 = Release|Any CPU
{D3B0AD67-44D8-4B3D-BED9-CE1FD6DE2C5A}.WSL|x86.ActiveCfg = Release|Any CPU
{D3B0AD67-44D8-4B3D-BED9-CE1FD6DE2C5A}.WSL|x86.Build.0 = Release|Any CPU
{288A26EC-B690-41A2-84E5-61C9B7B74046}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{288A26EC-B690-41A2-84E5-61C9B7B74046}.Debug|Any CPU.Build.0 = Debug|Any CPU
{288A26EC-B690-41A2-84E5-61C9B7B74046}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
@ -366,6 +449,12 @@ Global
{288A26EC-B690-41A2-84E5-61C9B7B74046}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{288A26EC-B690-41A2-84E5-61C9B7B74046}.Release|x86.ActiveCfg = Release|Any CPU
{288A26EC-B690-41A2-84E5-61C9B7B74046}.Release|x86.Build.0 = Release|Any CPU
{288A26EC-B690-41A2-84E5-61C9B7B74046}.WSL|Any CPU.ActiveCfg = Release|Any CPU
{288A26EC-B690-41A2-84E5-61C9B7B74046}.WSL|Any CPU.Build.0 = Release|Any CPU
{288A26EC-B690-41A2-84E5-61C9B7B74046}.WSL|Mixed Platforms.ActiveCfg = Release|Any CPU
{288A26EC-B690-41A2-84E5-61C9B7B74046}.WSL|Mixed Platforms.Build.0 = Release|Any CPU
{288A26EC-B690-41A2-84E5-61C9B7B74046}.WSL|x86.ActiveCfg = Release|Any CPU
{288A26EC-B690-41A2-84E5-61C9B7B74046}.WSL|x86.Build.0 = Release|Any CPU
{80C7DC34-E1F6-4DA8-AFFB-904C06A3623B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{80C7DC34-E1F6-4DA8-AFFB-904C06A3623B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{80C7DC34-E1F6-4DA8-AFFB-904C06A3623B}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
@ -378,6 +467,12 @@ Global
{80C7DC34-E1F6-4DA8-AFFB-904C06A3623B}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{80C7DC34-E1F6-4DA8-AFFB-904C06A3623B}.Release|x86.ActiveCfg = Release|Any CPU
{80C7DC34-E1F6-4DA8-AFFB-904C06A3623B}.Release|x86.Build.0 = Release|Any CPU
{80C7DC34-E1F6-4DA8-AFFB-904C06A3623B}.WSL|Any CPU.ActiveCfg = Release|Any CPU
{80C7DC34-E1F6-4DA8-AFFB-904C06A3623B}.WSL|Any CPU.Build.0 = Release|Any CPU
{80C7DC34-E1F6-4DA8-AFFB-904C06A3623B}.WSL|Mixed Platforms.ActiveCfg = Release|Any CPU
{80C7DC34-E1F6-4DA8-AFFB-904C06A3623B}.WSL|Mixed Platforms.Build.0 = Release|Any CPU
{80C7DC34-E1F6-4DA8-AFFB-904C06A3623B}.WSL|x86.ActiveCfg = Release|Any CPU
{80C7DC34-E1F6-4DA8-AFFB-904C06A3623B}.WSL|x86.Build.0 = Release|Any CPU
{99510ED5-99E0-405D-BCAC-9159A7426D61}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{99510ED5-99E0-405D-BCAC-9159A7426D61}.Debug|Any CPU.Build.0 = Debug|Any CPU
{99510ED5-99E0-405D-BCAC-9159A7426D61}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
@ -390,6 +485,12 @@ Global
{99510ED5-99E0-405D-BCAC-9159A7426D61}.Release|Mixed Platforms.Build.0 = Release|x86
{99510ED5-99E0-405D-BCAC-9159A7426D61}.Release|x86.ActiveCfg = Release|x86
{99510ED5-99E0-405D-BCAC-9159A7426D61}.Release|x86.Build.0 = Release|x86
{99510ED5-99E0-405D-BCAC-9159A7426D61}.WSL|Any CPU.ActiveCfg = Release|Any CPU
{99510ED5-99E0-405D-BCAC-9159A7426D61}.WSL|Any CPU.Build.0 = Release|Any CPU
{99510ED5-99E0-405D-BCAC-9159A7426D61}.WSL|Mixed Platforms.ActiveCfg = Release|x86
{99510ED5-99E0-405D-BCAC-9159A7426D61}.WSL|Mixed Platforms.Build.0 = Release|x86
{99510ED5-99E0-405D-BCAC-9159A7426D61}.WSL|x86.ActiveCfg = Release|x86
{99510ED5-99E0-405D-BCAC-9159A7426D61}.WSL|x86.Build.0 = Release|x86
{930668AA-0DD9-42A9-889A-D319567F1473}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{930668AA-0DD9-42A9-889A-D319567F1473}.Debug|Any CPU.Build.0 = Debug|Any CPU
{930668AA-0DD9-42A9-889A-D319567F1473}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
@ -401,6 +502,12 @@ Global
{930668AA-0DD9-42A9-889A-D319567F1473}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{930668AA-0DD9-42A9-889A-D319567F1473}.Release|x86.ActiveCfg = Release|Any CPU
{930668AA-0DD9-42A9-889A-D319567F1473}.Release|x86.Build.0 = Release|Any CPU
{930668AA-0DD9-42A9-889A-D319567F1473}.WSL|Any CPU.ActiveCfg = Release|Any CPU
{930668AA-0DD9-42A9-889A-D319567F1473}.WSL|Any CPU.Build.0 = Release|Any CPU
{930668AA-0DD9-42A9-889A-D319567F1473}.WSL|Mixed Platforms.ActiveCfg = Release|Any CPU
{930668AA-0DD9-42A9-889A-D319567F1473}.WSL|Mixed Platforms.Build.0 = Release|Any CPU
{930668AA-0DD9-42A9-889A-D319567F1473}.WSL|x86.ActiveCfg = Release|Any CPU
{930668AA-0DD9-42A9-889A-D319567F1473}.WSL|x86.Build.0 = Release|Any CPU
{41B66BE4-6086-4AE3-BE31-C81EE6B10154}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{41B66BE4-6086-4AE3-BE31-C81EE6B10154}.Debug|Any CPU.Build.0 = Debug|Any CPU
{41B66BE4-6086-4AE3-BE31-C81EE6B10154}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
@ -413,6 +520,12 @@ Global
{41B66BE4-6086-4AE3-BE31-C81EE6B10154}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{41B66BE4-6086-4AE3-BE31-C81EE6B10154}.Release|x86.ActiveCfg = Release|Any CPU
{41B66BE4-6086-4AE3-BE31-C81EE6B10154}.Release|x86.Build.0 = Release|Any CPU
{41B66BE4-6086-4AE3-BE31-C81EE6B10154}.WSL|Any CPU.ActiveCfg = Release|Any CPU
{41B66BE4-6086-4AE3-BE31-C81EE6B10154}.WSL|Any CPU.Build.0 = Release|Any CPU
{41B66BE4-6086-4AE3-BE31-C81EE6B10154}.WSL|Mixed Platforms.ActiveCfg = Release|Any CPU
{41B66BE4-6086-4AE3-BE31-C81EE6B10154}.WSL|Mixed Platforms.Build.0 = Release|Any CPU
{41B66BE4-6086-4AE3-BE31-C81EE6B10154}.WSL|x86.ActiveCfg = Release|Any CPU
{41B66BE4-6086-4AE3-BE31-C81EE6B10154}.WSL|x86.Build.0 = Release|Any CPU
{BE467E28-C202-4D71-BB17-9086861AD75F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{BE467E28-C202-4D71-BB17-9086861AD75F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{BE467E28-C202-4D71-BB17-9086861AD75F}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
@ -425,6 +538,12 @@ Global
{BE467E28-C202-4D71-BB17-9086861AD75F}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{BE467E28-C202-4D71-BB17-9086861AD75F}.Release|x86.ActiveCfg = Release|Any CPU
{BE467E28-C202-4D71-BB17-9086861AD75F}.Release|x86.Build.0 = Release|Any CPU
{BE467E28-C202-4D71-BB17-9086861AD75F}.WSL|Any CPU.ActiveCfg = Release|Any CPU
{BE467E28-C202-4D71-BB17-9086861AD75F}.WSL|Any CPU.Build.0 = Release|Any CPU
{BE467E28-C202-4D71-BB17-9086861AD75F}.WSL|Mixed Platforms.ActiveCfg = Release|Any CPU
{BE467E28-C202-4D71-BB17-9086861AD75F}.WSL|Mixed Platforms.Build.0 = Release|Any CPU
{BE467E28-C202-4D71-BB17-9086861AD75F}.WSL|x86.ActiveCfg = Release|Any CPU
{BE467E28-C202-4D71-BB17-9086861AD75F}.WSL|x86.Build.0 = Release|Any CPU
{3D34943B-CACA-426D-9FC0-661531668E87}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3D34943B-CACA-426D-9FC0-661531668E87}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3D34943B-CACA-426D-9FC0-661531668E87}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
@ -437,6 +556,12 @@ Global
{3D34943B-CACA-426D-9FC0-661531668E87}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{3D34943B-CACA-426D-9FC0-661531668E87}.Release|x86.ActiveCfg = Release|Any CPU
{3D34943B-CACA-426D-9FC0-661531668E87}.Release|x86.Build.0 = Release|Any CPU
{3D34943B-CACA-426D-9FC0-661531668E87}.WSL|Any CPU.ActiveCfg = Release|Any CPU
{3D34943B-CACA-426D-9FC0-661531668E87}.WSL|Any CPU.Build.0 = Release|Any CPU
{3D34943B-CACA-426D-9FC0-661531668E87}.WSL|Mixed Platforms.ActiveCfg = Release|Any CPU
{3D34943B-CACA-426D-9FC0-661531668E87}.WSL|Mixed Platforms.Build.0 = Release|Any CPU
{3D34943B-CACA-426D-9FC0-661531668E87}.WSL|x86.ActiveCfg = Release|Any CPU
{3D34943B-CACA-426D-9FC0-661531668E87}.WSL|x86.Build.0 = Release|Any CPU
{9816BA86-9250-4C00-A912-25F07F8677D1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{9816BA86-9250-4C00-A912-25F07F8677D1}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9816BA86-9250-4C00-A912-25F07F8677D1}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
@ -450,6 +575,12 @@ Global
{9816BA86-9250-4C00-A912-25F07F8677D1}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{9816BA86-9250-4C00-A912-25F07F8677D1}.Release|x86.ActiveCfg = Release|Any CPU
{9816BA86-9250-4C00-A912-25F07F8677D1}.Release|x86.Build.0 = Release|Any CPU
{9816BA86-9250-4C00-A912-25F07F8677D1}.WSL|Any CPU.ActiveCfg = Release|Any CPU
{9816BA86-9250-4C00-A912-25F07F8677D1}.WSL|Any CPU.Build.0 = Release|Any CPU
{9816BA86-9250-4C00-A912-25F07F8677D1}.WSL|Mixed Platforms.ActiveCfg = Release|Any CPU
{9816BA86-9250-4C00-A912-25F07F8677D1}.WSL|Mixed Platforms.Build.0 = Release|Any CPU
{9816BA86-9250-4C00-A912-25F07F8677D1}.WSL|x86.ActiveCfg = Release|Any CPU
{9816BA86-9250-4C00-A912-25F07F8677D1}.WSL|x86.Build.0 = Release|Any CPU
{89E6C7A3-6064-479E-A710-37C7293CF47C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{89E6C7A3-6064-479E-A710-37C7293CF47C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{89E6C7A3-6064-479E-A710-37C7293CF47C}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
@ -462,6 +593,12 @@ Global
{89E6C7A3-6064-479E-A710-37C7293CF47C}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{89E6C7A3-6064-479E-A710-37C7293CF47C}.Release|x86.ActiveCfg = Release|Any CPU
{89E6C7A3-6064-479E-A710-37C7293CF47C}.Release|x86.Build.0 = Release|Any CPU
{89E6C7A3-6064-479E-A710-37C7293CF47C}.WSL|Any CPU.ActiveCfg = Release|Any CPU
{89E6C7A3-6064-479E-A710-37C7293CF47C}.WSL|Any CPU.Build.0 = Release|Any CPU
{89E6C7A3-6064-479E-A710-37C7293CF47C}.WSL|Mixed Platforms.ActiveCfg = Release|Any CPU
{89E6C7A3-6064-479E-A710-37C7293CF47C}.WSL|Mixed Platforms.Build.0 = Release|Any CPU
{89E6C7A3-6064-479E-A710-37C7293CF47C}.WSL|x86.ActiveCfg = Release|Any CPU
{89E6C7A3-6064-479E-A710-37C7293CF47C}.WSL|x86.Build.0 = Release|Any CPU
{36945DBD-96C8-41E7-9168-F83C42E67AF3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{36945DBD-96C8-41E7-9168-F83C42E67AF3}.Debug|Any CPU.Build.0 = Debug|Any CPU
{36945DBD-96C8-41E7-9168-F83C42E67AF3}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
@ -474,17 +611,12 @@ Global
{36945DBD-96C8-41E7-9168-F83C42E67AF3}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{36945DBD-96C8-41E7-9168-F83C42E67AF3}.Release|x86.ActiveCfg = Release|Any CPU
{36945DBD-96C8-41E7-9168-F83C42E67AF3}.Release|x86.Build.0 = Release|Any CPU
{50093159-6446-48CD-B8CD-6FA58EB88CBB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{50093159-6446-48CD-B8CD-6FA58EB88CBB}.Debug|Any CPU.Build.0 = Debug|Any CPU
{50093159-6446-48CD-B8CD-6FA58EB88CBB}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{50093159-6446-48CD-B8CD-6FA58EB88CBB}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{50093159-6446-48CD-B8CD-6FA58EB88CBB}.Debug|x86.ActiveCfg = Debug|Any CPU
{50093159-6446-48CD-B8CD-6FA58EB88CBB}.Debug|x86.Build.0 = Debug|Any CPU
{50093159-6446-48CD-B8CD-6FA58EB88CBB}.Release|Any CPU.ActiveCfg = Release|Any CPU
{50093159-6446-48CD-B8CD-6FA58EB88CBB}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{50093159-6446-48CD-B8CD-6FA58EB88CBB}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{50093159-6446-48CD-B8CD-6FA58EB88CBB}.Release|x86.ActiveCfg = Release|Any CPU
{50093159-6446-48CD-B8CD-6FA58EB88CBB}.Release|x86.Build.0 = Release|Any CPU
{36945DBD-96C8-41E7-9168-F83C42E67AF3}.WSL|Any CPU.ActiveCfg = Release|Any CPU
{36945DBD-96C8-41E7-9168-F83C42E67AF3}.WSL|Any CPU.Build.0 = Release|Any CPU
{36945DBD-96C8-41E7-9168-F83C42E67AF3}.WSL|Mixed Platforms.ActiveCfg = Release|Any CPU
{36945DBD-96C8-41E7-9168-F83C42E67AF3}.WSL|Mixed Platforms.Build.0 = Release|Any CPU
{36945DBD-96C8-41E7-9168-F83C42E67AF3}.WSL|x86.ActiveCfg = Release|Any CPU
{36945DBD-96C8-41E7-9168-F83C42E67AF3}.WSL|x86.Build.0 = Release|Any CPU
{EA78AD40-1505-406F-8049-744E58D93F54}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{EA78AD40-1505-406F-8049-744E58D93F54}.Debug|Any CPU.Build.0 = Debug|Any CPU
{EA78AD40-1505-406F-8049-744E58D93F54}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
@ -497,6 +629,12 @@ Global
{EA78AD40-1505-406F-8049-744E58D93F54}.Release|Mixed Platforms.Build.0 = Release|x86
{EA78AD40-1505-406F-8049-744E58D93F54}.Release|x86.ActiveCfg = Release|x86
{EA78AD40-1505-406F-8049-744E58D93F54}.Release|x86.Build.0 = Release|x86
{EA78AD40-1505-406F-8049-744E58D93F54}.WSL|Any CPU.ActiveCfg = Release|Any CPU
{EA78AD40-1505-406F-8049-744E58D93F54}.WSL|Any CPU.Build.0 = Release|Any CPU
{EA78AD40-1505-406F-8049-744E58D93F54}.WSL|Mixed Platforms.ActiveCfg = Release|x86
{EA78AD40-1505-406F-8049-744E58D93F54}.WSL|Mixed Platforms.Build.0 = Release|x86
{EA78AD40-1505-406F-8049-744E58D93F54}.WSL|x86.ActiveCfg = Release|x86
{EA78AD40-1505-406F-8049-744E58D93F54}.WSL|x86.Build.0 = Release|x86
{4225D870-2CCB-4E6A-965C-AA005CB1C36C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{4225D870-2CCB-4E6A-965C-AA005CB1C36C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4225D870-2CCB-4E6A-965C-AA005CB1C36C}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
@ -508,6 +646,12 @@ Global
{4225D870-2CCB-4E6A-965C-AA005CB1C36C}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{4225D870-2CCB-4E6A-965C-AA005CB1C36C}.Release|x86.ActiveCfg = Release|Any CPU
{4225D870-2CCB-4E6A-965C-AA005CB1C36C}.Release|x86.Build.0 = Release|Any CPU
{4225D870-2CCB-4E6A-965C-AA005CB1C36C}.WSL|Any CPU.ActiveCfg = Release|Any CPU
{4225D870-2CCB-4E6A-965C-AA005CB1C36C}.WSL|Any CPU.Build.0 = Release|Any CPU
{4225D870-2CCB-4E6A-965C-AA005CB1C36C}.WSL|Mixed Platforms.ActiveCfg = Release|Any CPU
{4225D870-2CCB-4E6A-965C-AA005CB1C36C}.WSL|Mixed Platforms.Build.0 = Release|Any CPU
{4225D870-2CCB-4E6A-965C-AA005CB1C36C}.WSL|x86.ActiveCfg = Release|Any CPU
{4225D870-2CCB-4E6A-965C-AA005CB1C36C}.WSL|x86.Build.0 = Release|Any CPU
{F1689770-0F8F-4716-B0FF-817D1319827E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F1689770-0F8F-4716-B0FF-817D1319827E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F1689770-0F8F-4716-B0FF-817D1319827E}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
@ -519,6 +663,12 @@ Global
{F1689770-0F8F-4716-B0FF-817D1319827E}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{F1689770-0F8F-4716-B0FF-817D1319827E}.Release|x86.ActiveCfg = Release|Any CPU
{F1689770-0F8F-4716-B0FF-817D1319827E}.Release|x86.Build.0 = Release|Any CPU
{F1689770-0F8F-4716-B0FF-817D1319827E}.WSL|Any CPU.ActiveCfg = Release|Any CPU
{F1689770-0F8F-4716-B0FF-817D1319827E}.WSL|Any CPU.Build.0 = Release|Any CPU
{F1689770-0F8F-4716-B0FF-817D1319827E}.WSL|Mixed Platforms.ActiveCfg = Release|Any CPU
{F1689770-0F8F-4716-B0FF-817D1319827E}.WSL|Mixed Platforms.Build.0 = Release|Any CPU
{F1689770-0F8F-4716-B0FF-817D1319827E}.WSL|x86.ActiveCfg = Release|Any CPU
{F1689770-0F8F-4716-B0FF-817D1319827E}.WSL|x86.Build.0 = Release|Any CPU
{15F76339-484C-4431-BA51-0125697D4455}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{15F76339-484C-4431-BA51-0125697D4455}.Debug|Any CPU.Build.0 = Debug|Any CPU
{15F76339-484C-4431-BA51-0125697D4455}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
@ -530,17 +680,12 @@ Global
{15F76339-484C-4431-BA51-0125697D4455}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{15F76339-484C-4431-BA51-0125697D4455}.Release|x86.ActiveCfg = Release|Any CPU
{15F76339-484C-4431-BA51-0125697D4455}.Release|x86.Build.0 = Release|Any CPU
{D953C82D-5881-4F5C-8335-1C54114BE28B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D953C82D-5881-4F5C-8335-1C54114BE28B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D953C82D-5881-4F5C-8335-1C54114BE28B}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{D953C82D-5881-4F5C-8335-1C54114BE28B}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{D953C82D-5881-4F5C-8335-1C54114BE28B}.Debug|x86.ActiveCfg = Debug|Any CPU
{D953C82D-5881-4F5C-8335-1C54114BE28B}.Debug|x86.Build.0 = Debug|Any CPU
{D953C82D-5881-4F5C-8335-1C54114BE28B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D953C82D-5881-4F5C-8335-1C54114BE28B}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{D953C82D-5881-4F5C-8335-1C54114BE28B}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{D953C82D-5881-4F5C-8335-1C54114BE28B}.Release|x86.ActiveCfg = Release|Any CPU
{D953C82D-5881-4F5C-8335-1C54114BE28B}.Release|x86.Build.0 = Release|Any CPU
{15F76339-484C-4431-BA51-0125697D4455}.WSL|Any CPU.ActiveCfg = Release|Any CPU
{15F76339-484C-4431-BA51-0125697D4455}.WSL|Any CPU.Build.0 = Release|Any CPU
{15F76339-484C-4431-BA51-0125697D4455}.WSL|Mixed Platforms.ActiveCfg = Release|Any CPU
{15F76339-484C-4431-BA51-0125697D4455}.WSL|Mixed Platforms.Build.0 = Release|Any CPU
{15F76339-484C-4431-BA51-0125697D4455}.WSL|x86.ActiveCfg = Release|Any CPU
{15F76339-484C-4431-BA51-0125697D4455}.WSL|x86.Build.0 = Release|Any CPU
{23F584DB-EB5E-452D-B49F-7C1CABB713FF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{23F584DB-EB5E-452D-B49F-7C1CABB713FF}.Debug|Any CPU.Build.0 = Debug|Any CPU
{23F584DB-EB5E-452D-B49F-7C1CABB713FF}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
@ -553,6 +698,12 @@ Global
{23F584DB-EB5E-452D-B49F-7C1CABB713FF}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{23F584DB-EB5E-452D-B49F-7C1CABB713FF}.Release|x86.ActiveCfg = Release|Any CPU
{23F584DB-EB5E-452D-B49F-7C1CABB713FF}.Release|x86.Build.0 = Release|Any CPU
{23F584DB-EB5E-452D-B49F-7C1CABB713FF}.WSL|Any CPU.ActiveCfg = Release|Any CPU
{23F584DB-EB5E-452D-B49F-7C1CABB713FF}.WSL|Any CPU.Build.0 = Release|Any CPU
{23F584DB-EB5E-452D-B49F-7C1CABB713FF}.WSL|Mixed Platforms.ActiveCfg = Release|Any CPU
{23F584DB-EB5E-452D-B49F-7C1CABB713FF}.WSL|Mixed Platforms.Build.0 = Release|Any CPU
{23F584DB-EB5E-452D-B49F-7C1CABB713FF}.WSL|x86.ActiveCfg = Release|Any CPU
{23F584DB-EB5E-452D-B49F-7C1CABB713FF}.WSL|x86.Build.0 = Release|Any CPU
{B3B005A5-CC05-430B-B966-20BE5E5985BF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B3B005A5-CC05-430B-B966-20BE5E5985BF}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B3B005A5-CC05-430B-B966-20BE5E5985BF}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
@ -565,30 +716,12 @@ Global
{B3B005A5-CC05-430B-B966-20BE5E5985BF}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{B3B005A5-CC05-430B-B966-20BE5E5985BF}.Release|x86.ActiveCfg = Release|Any CPU
{B3B005A5-CC05-430B-B966-20BE5E5985BF}.Release|x86.Build.0 = Release|Any CPU
{3D5AADC3-E4CA-4C12-8939-8DC778F6018E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3D5AADC3-E4CA-4C12-8939-8DC778F6018E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3D5AADC3-E4CA-4C12-8939-8DC778F6018E}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{3D5AADC3-E4CA-4C12-8939-8DC778F6018E}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{3D5AADC3-E4CA-4C12-8939-8DC778F6018E}.Debug|x86.ActiveCfg = Debug|Any CPU
{3D5AADC3-E4CA-4C12-8939-8DC778F6018E}.Debug|x86.Build.0 = Debug|Any CPU
{3D5AADC3-E4CA-4C12-8939-8DC778F6018E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3D5AADC3-E4CA-4C12-8939-8DC778F6018E}.Release|Any CPU.Build.0 = Release|Any CPU
{3D5AADC3-E4CA-4C12-8939-8DC778F6018E}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{3D5AADC3-E4CA-4C12-8939-8DC778F6018E}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{3D5AADC3-E4CA-4C12-8939-8DC778F6018E}.Release|x86.ActiveCfg = Release|Any CPU
{3D5AADC3-E4CA-4C12-8939-8DC778F6018E}.Release|x86.Build.0 = Release|Any CPU
{0F0B27D0-7957-4CE0-9121-2C89746AF136}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{0F0B27D0-7957-4CE0-9121-2C89746AF136}.Debug|Any CPU.Build.0 = Debug|Any CPU
{0F0B27D0-7957-4CE0-9121-2C89746AF136}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{0F0B27D0-7957-4CE0-9121-2C89746AF136}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{0F0B27D0-7957-4CE0-9121-2C89746AF136}.Debug|x86.ActiveCfg = Debug|Any CPU
{0F0B27D0-7957-4CE0-9121-2C89746AF136}.Debug|x86.Build.0 = Debug|Any CPU
{0F0B27D0-7957-4CE0-9121-2C89746AF136}.Release|Any CPU.ActiveCfg = Release|Any CPU
{0F0B27D0-7957-4CE0-9121-2C89746AF136}.Release|Any CPU.Build.0 = Release|Any CPU
{0F0B27D0-7957-4CE0-9121-2C89746AF136}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{0F0B27D0-7957-4CE0-9121-2C89746AF136}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{0F0B27D0-7957-4CE0-9121-2C89746AF136}.Release|x86.ActiveCfg = Release|Any CPU
{0F0B27D0-7957-4CE0-9121-2C89746AF136}.Release|x86.Build.0 = Release|Any CPU
{B3B005A5-CC05-430B-B966-20BE5E5985BF}.WSL|Any CPU.ActiveCfg = Release|Any CPU
{B3B005A5-CC05-430B-B966-20BE5E5985BF}.WSL|Any CPU.Build.0 = Release|Any CPU
{B3B005A5-CC05-430B-B966-20BE5E5985BF}.WSL|Mixed Platforms.ActiveCfg = Release|Any CPU
{B3B005A5-CC05-430B-B966-20BE5E5985BF}.WSL|Mixed Platforms.Build.0 = Release|Any CPU
{B3B005A5-CC05-430B-B966-20BE5E5985BF}.WSL|x86.ActiveCfg = Release|Any CPU
{B3B005A5-CC05-430B-B966-20BE5E5985BF}.WSL|x86.Build.0 = Release|Any CPU
{C9291203-B5D0-4179-888D-04BC670B158F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C9291203-B5D0-4179-888D-04BC670B158F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C9291203-B5D0-4179-888D-04BC670B158F}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
@ -601,6 +734,12 @@ Global
{C9291203-B5D0-4179-888D-04BC670B158F}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{C9291203-B5D0-4179-888D-04BC670B158F}.Release|x86.ActiveCfg = Release|Any CPU
{C9291203-B5D0-4179-888D-04BC670B158F}.Release|x86.Build.0 = Release|Any CPU
{C9291203-B5D0-4179-888D-04BC670B158F}.WSL|Any CPU.ActiveCfg = Release|Any CPU
{C9291203-B5D0-4179-888D-04BC670B158F}.WSL|Any CPU.Build.0 = Release|Any CPU
{C9291203-B5D0-4179-888D-04BC670B158F}.WSL|Mixed Platforms.ActiveCfg = Release|Any CPU
{C9291203-B5D0-4179-888D-04BC670B158F}.WSL|Mixed Platforms.Build.0 = Release|Any CPU
{C9291203-B5D0-4179-888D-04BC670B158F}.WSL|x86.ActiveCfg = Release|Any CPU
{C9291203-B5D0-4179-888D-04BC670B158F}.WSL|x86.Build.0 = Release|Any CPU
{FFDEC390-7BBC-4DEC-9826-1DD04279F3FA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{FFDEC390-7BBC-4DEC-9826-1DD04279F3FA}.Debug|Any CPU.Build.0 = Debug|Any CPU
{FFDEC390-7BBC-4DEC-9826-1DD04279F3FA}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
@ -613,66 +752,30 @@ Global
{FFDEC390-7BBC-4DEC-9826-1DD04279F3FA}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{FFDEC390-7BBC-4DEC-9826-1DD04279F3FA}.Release|x86.ActiveCfg = Release|Any CPU
{FFDEC390-7BBC-4DEC-9826-1DD04279F3FA}.Release|x86.Build.0 = Release|Any CPU
{F14C9DB2-D556-45F4-8CB5-E9B402C36087}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F14C9DB2-D556-45F4-8CB5-E9B402C36087}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F14C9DB2-D556-45F4-8CB5-E9B402C36087}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
{F14C9DB2-D556-45F4-8CB5-E9B402C36087}.Debug|Mixed Platforms.Build.0 = Debug|x86
{F14C9DB2-D556-45F4-8CB5-E9B402C36087}.Debug|x86.ActiveCfg = Debug|x86
{F14C9DB2-D556-45F4-8CB5-E9B402C36087}.Debug|x86.Build.0 = Debug|x86
{F14C9DB2-D556-45F4-8CB5-E9B402C36087}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F14C9DB2-D556-45F4-8CB5-E9B402C36087}.Release|Any CPU.Build.0 = Release|Any CPU
{F14C9DB2-D556-45F4-8CB5-E9B402C36087}.Release|Mixed Platforms.ActiveCfg = Release|x86
{F14C9DB2-D556-45F4-8CB5-E9B402C36087}.Release|Mixed Platforms.Build.0 = Release|x86
{F14C9DB2-D556-45F4-8CB5-E9B402C36087}.Release|x86.ActiveCfg = Release|x86
{F14C9DB2-D556-45F4-8CB5-E9B402C36087}.Release|x86.Build.0 = Release|x86
{58A3209F-1BF2-4B59-9A2A-0983CE232CB0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{58A3209F-1BF2-4B59-9A2A-0983CE232CB0}.Debug|Any CPU.Build.0 = Debug|Any CPU
{58A3209F-1BF2-4B59-9A2A-0983CE232CB0}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{58A3209F-1BF2-4B59-9A2A-0983CE232CB0}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{58A3209F-1BF2-4B59-9A2A-0983CE232CB0}.Debug|x86.ActiveCfg = Debug|Any CPU
{58A3209F-1BF2-4B59-9A2A-0983CE232CB0}.Debug|x86.Build.0 = Debug|Any CPU
{58A3209F-1BF2-4B59-9A2A-0983CE232CB0}.Release|Any CPU.ActiveCfg = Release|Any CPU
{58A3209F-1BF2-4B59-9A2A-0983CE232CB0}.Release|Any CPU.Build.0 = Release|Any CPU
{58A3209F-1BF2-4B59-9A2A-0983CE232CB0}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{58A3209F-1BF2-4B59-9A2A-0983CE232CB0}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{58A3209F-1BF2-4B59-9A2A-0983CE232CB0}.Release|x86.ActiveCfg = Release|Any CPU
{58A3209F-1BF2-4B59-9A2A-0983CE232CB0}.Release|x86.Build.0 = Release|Any CPU
{2AA51078-C9E9-4AD0-A8CD-2A028A6BC886}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{2AA51078-C9E9-4AD0-A8CD-2A028A6BC886}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2AA51078-C9E9-4AD0-A8CD-2A028A6BC886}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{2AA51078-C9E9-4AD0-A8CD-2A028A6BC886}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{2AA51078-C9E9-4AD0-A8CD-2A028A6BC886}.Debug|x86.ActiveCfg = Debug|Any CPU
{2AA51078-C9E9-4AD0-A8CD-2A028A6BC886}.Debug|x86.Build.0 = Debug|Any CPU
{2AA51078-C9E9-4AD0-A8CD-2A028A6BC886}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2AA51078-C9E9-4AD0-A8CD-2A028A6BC886}.Release|Any CPU.Build.0 = Release|Any CPU
{2AA51078-C9E9-4AD0-A8CD-2A028A6BC886}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{2AA51078-C9E9-4AD0-A8CD-2A028A6BC886}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{2AA51078-C9E9-4AD0-A8CD-2A028A6BC886}.Release|x86.ActiveCfg = Release|Any CPU
{2AA51078-C9E9-4AD0-A8CD-2A028A6BC886}.Release|x86.Build.0 = Release|Any CPU
{3ABFFAF3-5169-4DF6-9F64-BF44FCCD26F1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3ABFFAF3-5169-4DF6-9F64-BF44FCCD26F1}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3ABFFAF3-5169-4DF6-9F64-BF44FCCD26F1}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{3ABFFAF3-5169-4DF6-9F64-BF44FCCD26F1}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{3ABFFAF3-5169-4DF6-9F64-BF44FCCD26F1}.Debug|x86.ActiveCfg = Debug|Any CPU
{3ABFFAF3-5169-4DF6-9F64-BF44FCCD26F1}.Debug|x86.Build.0 = Debug|Any CPU
{3ABFFAF3-5169-4DF6-9F64-BF44FCCD26F1}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3ABFFAF3-5169-4DF6-9F64-BF44FCCD26F1}.Release|Any CPU.Build.0 = Release|Any CPU
{3ABFFAF3-5169-4DF6-9F64-BF44FCCD26F1}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{3ABFFAF3-5169-4DF6-9F64-BF44FCCD26F1}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{3ABFFAF3-5169-4DF6-9F64-BF44FCCD26F1}.Release|x86.ActiveCfg = Release|Any CPU
{3ABFFAF3-5169-4DF6-9F64-BF44FCCD26F1}.Release|x86.Build.0 = Release|Any CPU
{B7B00B6B-4288-4562-9773-116556607857}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B7B00B6B-4288-4562-9773-116556607857}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B7B00B6B-4288-4562-9773-116556607857}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{B7B00B6B-4288-4562-9773-116556607857}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{B7B00B6B-4288-4562-9773-116556607857}.Debug|x86.ActiveCfg = Debug|Any CPU
{B7B00B6B-4288-4562-9773-116556607857}.Debug|x86.Build.0 = Debug|Any CPU
{B7B00B6B-4288-4562-9773-116556607857}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B7B00B6B-4288-4562-9773-116556607857}.Release|Any CPU.Build.0 = Release|Any CPU
{B7B00B6B-4288-4562-9773-116556607857}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{B7B00B6B-4288-4562-9773-116556607857}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{B7B00B6B-4288-4562-9773-116556607857}.Release|x86.ActiveCfg = Release|Any CPU
{B7B00B6B-4288-4562-9773-116556607857}.Release|x86.Build.0 = Release|Any CPU
{FFDEC390-7BBC-4DEC-9826-1DD04279F3FA}.WSL|Any CPU.ActiveCfg = Release|Any CPU
{FFDEC390-7BBC-4DEC-9826-1DD04279F3FA}.WSL|Any CPU.Build.0 = Release|Any CPU
{FFDEC390-7BBC-4DEC-9826-1DD04279F3FA}.WSL|Mixed Platforms.ActiveCfg = Release|Any CPU
{FFDEC390-7BBC-4DEC-9826-1DD04279F3FA}.WSL|Mixed Platforms.Build.0 = Release|Any CPU
{FFDEC390-7BBC-4DEC-9826-1DD04279F3FA}.WSL|x86.ActiveCfg = Release|Any CPU
{FFDEC390-7BBC-4DEC-9826-1DD04279F3FA}.WSL|x86.Build.0 = Release|Any CPU
{692CAF08-26D0-4D41-9CAC-BDA8D8BE6125}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{692CAF08-26D0-4D41-9CAC-BDA8D8BE6125}.Debug|Any CPU.Build.0 = Debug|Any CPU
{692CAF08-26D0-4D41-9CAC-BDA8D8BE6125}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{692CAF08-26D0-4D41-9CAC-BDA8D8BE6125}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{692CAF08-26D0-4D41-9CAC-BDA8D8BE6125}.Debug|x86.ActiveCfg = Debug|Any CPU
{692CAF08-26D0-4D41-9CAC-BDA8D8BE6125}.Debug|x86.Build.0 = Debug|Any CPU
{692CAF08-26D0-4D41-9CAC-BDA8D8BE6125}.Release|Any CPU.ActiveCfg = Release|Any CPU
{692CAF08-26D0-4D41-9CAC-BDA8D8BE6125}.Release|Any CPU.Build.0 = Release|Any CPU
{692CAF08-26D0-4D41-9CAC-BDA8D8BE6125}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{692CAF08-26D0-4D41-9CAC-BDA8D8BE6125}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{692CAF08-26D0-4D41-9CAC-BDA8D8BE6125}.Release|x86.ActiveCfg = Release|Any CPU
{692CAF08-26D0-4D41-9CAC-BDA8D8BE6125}.Release|x86.Build.0 = Release|Any CPU
{692CAF08-26D0-4D41-9CAC-BDA8D8BE6125}.WSL|Any CPU.ActiveCfg = Debug|Any CPU
{692CAF08-26D0-4D41-9CAC-BDA8D8BE6125}.WSL|Any CPU.Build.0 = Debug|Any CPU
{692CAF08-26D0-4D41-9CAC-BDA8D8BE6125}.WSL|Mixed Platforms.ActiveCfg = Debug|Any CPU
{692CAF08-26D0-4D41-9CAC-BDA8D8BE6125}.WSL|Mixed Platforms.Build.0 = Debug|Any CPU
{692CAF08-26D0-4D41-9CAC-BDA8D8BE6125}.WSL|x86.ActiveCfg = Debug|Any CPU
{692CAF08-26D0-4D41-9CAC-BDA8D8BE6125}.WSL|x86.Build.0 = Debug|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE

Wyświetl plik

@ -40,7 +40,7 @@
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
<PlatformTarget>x86</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<DebugType>portable</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
@ -81,7 +81,7 @@
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DebugType>full</DebugType>
<DebugType>portable</DebugType>
<PlatformTarget>AnyCPU</PlatformTarget>
<UseVSHostingProcess>false</UseVSHostingProcess>
<ErrorReport>prompt</ErrorReport>
@ -105,20 +105,42 @@
<PropertyGroup>
<ApplicationManifest>Properties\app.manifest</ApplicationManifest>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'WSL|x86'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\x86\WSL\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DebugType>portable</DebugType>
<PlatformTarget>x86</PlatformTarget>
<UseVSHostingProcess>false</UseVSHostingProcess>
<LangVersion>7.3</LangVersion>
<ErrorReport>prompt</ErrorReport>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'WSL|AnyCPU'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\WSL\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DebugType>portable</DebugType>
<PlatformTarget>AnyCPU</PlatformTarget>
<UseVSHostingProcess>false</UseVSHostingProcess>
<LangVersion>7.3</LangVersion>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisIgnoreBuiltInRuleSets>false</CodeAnalysisIgnoreBuiltInRuleSets>
<CodeAnalysisIgnoreBuiltInRules>false</CodeAnalysisIgnoreBuiltInRules>
</PropertyGroup>
<ItemGroup>
<Reference Include="DeviceId, Version=4.5.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\DeviceId.4.5.0\lib\net40\DeviceId.dll</HintPath>
</Reference>
<Reference Include="Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.12.0.3\lib\net40\Newtonsoft.Json.dll</HintPath>
<Reference Include="Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.13.0.1\lib\net40\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.ComponentModel.Composition" />
<Reference Include="System.ComponentModel.DataAnnotations" />
<Reference Include="System.configuration" />
<Reference Include="System.Core" />
<Reference Include="System.Data.SQLite, Version=1.0.113.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=MSIL">
<HintPath>..\packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.113.3\lib\net40\System.Data.SQLite.dll</HintPath>
<Reference Include="System.Data.SQLite, Version=1.0.112.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=MSIL">
<HintPath>..\packages\System.Data.SQLite.Core.1.0.112.0\lib\net40\System.Data.SQLite.dll</HintPath>
</Reference>
<Reference Include="System.Design" />
<Reference Include="System.Management" />
@ -603,12 +625,12 @@
<PostBuildEvent>
</PostBuildEvent>
</PropertyGroup>
<Import Project="..\packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.113.3\build\net40\Stub.System.Data.SQLite.Core.NetFramework.targets" Condition="Exists('..\packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.113.3\build\net40\Stub.System.Data.SQLite.Core.NetFramework.targets')" />
<Import Project="..\packages\System.Data.SQLite.Core.1.0.112.0\build\net40\System.Data.SQLite.Core.targets" Condition="Exists('..\packages\System.Data.SQLite.Core.1.0.112.0\build\net40\System.Data.SQLite.Core.targets')" />
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>
<ErrorText>Dieses Projekt verweist auf mindestens ein NuGet-Paket, das auf diesem Computer fehlt. Verwenden Sie die Wiederherstellung von NuGet-Paketen, um die fehlenden Dateien herunterzuladen. Weitere Informationen finden Sie unter "http://go.microsoft.com/fwlink/?LinkID=322105". Die fehlende Datei ist "{0}".</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('..\packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.113.3\build\net40\Stub.System.Data.SQLite.Core.NetFramework.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.113.3\build\net40\Stub.System.Data.SQLite.Core.NetFramework.targets'))" />
<Error Condition="!Exists('..\packages\System.Data.SQLite.Core.1.0.112.0\build\net40\System.Data.SQLite.Core.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\System.Data.SQLite.Core.1.0.112.0\build\net40\System.Data.SQLite.Core.targets'))" />
</Target>
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.

Wyświetl plik

@ -51,6 +51,8 @@ namespace AirScout
AirScout.Aircrafts.Properties.Settings.Default.Reset();
ScoutBase.Elevation.Properties.Settings.Default.Reset();
ScoutBase.Stations.Properties.Settings.Default.Reset();
ScoutBase.CAT.Properties.Settings.Default.Reset();
AirScout.CAT.Properties.Settings.Default.Reset();
}
if (cb_AirScout_Database.Checked)
DeleteDirectory(Properties.Settings.Default.AircraftDatabase_Directory);

Wyświetl plik

@ -457,6 +457,7 @@ namespace AirScout
private void bw_GLOBE_MapUpdater_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
gm_GLOBE.Visible = true;
}
private void wp_GLOBE_Enter(object sender, EventArgs e)
@ -464,6 +465,7 @@ namespace AirScout
wp_GLOBE.AllowNext = false;
// clear map polygons
GLOBEpolygons.Clear();
gm_GLOBE.Visible = true;
// add coverage to map polygons
List<PointLatLng> cl = new List<PointLatLng>();
cl.Add(new PointLatLng(Properties.Settings.Default.MinLat, Properties.Settings.Default.MinLon));
@ -478,7 +480,14 @@ namespace AirScout
gm_GLOBE.SetZoomToFitRect(RectLatLng.FromLTRB(Properties.Settings.Default.MinLon, Properties.Settings.Default.MaxLat, Properties.Settings.Default.MaxLon, Properties.Settings.Default.MinLat));
// start map updater
if (!bw_GLOBE_MapUpdater.IsBusy)
{
if (SupportFunctions.IsMono)
gm_GLOBE.Visible = false;
bw_GLOBE_MapUpdater.RunWorkerAsync();
}
// zoom the map
gm_GLOBE.SetZoomToFitRect(RectLatLng.FromLTRB(Properties.Settings.Default.MinLon - 1, Properties.Settings.Default.MaxLat + 1, Properties.Settings.Default.MaxLon + 1, Properties.Settings.Default.MinLat - 1));
}
@ -610,6 +619,7 @@ namespace AirScout
private void bw_SRTM3_MapUpdater_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
gm_SRTM3.Visible = true;
}
private void wp_SRTM3_Enter(object sender, EventArgs e)
@ -631,7 +641,13 @@ namespace AirScout
gm_SRTM3.SetZoomToFitRect(RectLatLng.FromLTRB(Properties.Settings.Default.MinLon, Properties.Settings.Default.MaxLat, Properties.Settings.Default.MaxLon, Properties.Settings.Default.MinLat));
// start map updater
if (!bw_SRTM3_MapUpdater.IsBusy)
{
if (SupportFunctions.IsMono)
gm_SRTM3.Visible = false;
bw_SRTM3_MapUpdater.RunWorkerAsync();
}
// zoom the map
gm_SRTM3.SetZoomToFitRect(RectLatLng.FromLTRB(Properties.Settings.Default.MinLon - 1, Properties.Settings.Default.MaxLat + 1, Properties.Settings.Default.MaxLon + 1, Properties.Settings.Default.MinLat - 1));
}
@ -697,7 +713,7 @@ namespace AirScout
// estimate disk space needed = tilecount * tilesize * 150%
long spaceneeded = (long)tilecount * (long)(100000 * 3 / 2);
string rootdrive = Path.GetPathRoot(ElevationData.Database.DefaultDatabaseDirectory(ELEVATIONMODEL.SRTM1));
long spaceavailable = SupportFunctions.GetDriveAvailableFreeSpace(rootdrive);
long spaceavailable = SupportFunctions.GetDriveAvailableFreeSpace(rootdrive);
// check for available disk space, skip on zero (cannot determine)
if ((spaceavailable > 0) && (spaceavailable < spaceneeded))
{
@ -758,6 +774,7 @@ namespace AirScout
private void bw_SRTM1_MapUpdater_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
gm_SRTM1.Visible = true;
}
private void wp_SRTM1_Enter(object sender, EventArgs e)
@ -779,7 +796,14 @@ namespace AirScout
gm_SRTM1.SetZoomToFitRect(RectLatLng.FromLTRB(Properties.Settings.Default.MinLon, Properties.Settings.Default.MaxLat, Properties.Settings.Default.MaxLon, Properties.Settings.Default.MinLat));
// start map updater
if (!bw_SRTM1_MapUpdater.IsBusy)
{
if (SupportFunctions.IsMono)
gm_SRTM1.Visible = false;
bw_SRTM1_MapUpdater.RunWorkerAsync();
}
// zoom the map
gm_SRTM1.SetZoomToFitRect(RectLatLng.FromLTRB(Properties.Settings.Default.MinLon - 1, Properties.Settings.Default.MaxLat + 1, Properties.Settings.Default.MaxLon + 1, Properties.Settings.Default.MinLat - 1));
}

Plik diff jest za duży Load Diff

Wyświetl plik

@ -104,7 +104,7 @@ namespace AirScout
g.SmoothingMode = SmoothingMode.AntiAlias;
g.TextRenderingHint = TextRenderingHint.SingleBitPerPixelGridFit;
Font font = new Font("Arial", polyrect.Height / 10);
Font font = new Font("Arial", polyrect.Width / 10);
StringFormat format = new StringFormat();
format.LineAlignment = StringAlignment.Center;
format.Alignment = StringAlignment.Center;

22
AirScout/MapDlg.Designer.cs wygenerowano
Wyświetl plik

@ -30,8 +30,8 @@
{
this.components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MapDlg));
ScoutBase.Core.LatLon.GPoint gPoint1 = new ScoutBase.Core.LatLon.GPoint();
ScoutBase.Core.LatLon.GPoint gPoint2 = new ScoutBase.Core.LatLon.GPoint();
ScoutBase.Core.LatLon.GPoint gPoint7 = new ScoutBase.Core.LatLon.GPoint();
ScoutBase.Core.LatLon.GPoint gPoint8 = new ScoutBase.Core.LatLon.GPoint();
this.il_Main = new System.Windows.Forms.ImageList(this.components);
this.ti_Progress = new System.Windows.Forms.Timer(this.components);
this.sc_Map = new System.Windows.Forms.SplitContainer();
@ -181,6 +181,7 @@
this.bw_Analysis_FileSaver = new System.ComponentModel.BackgroundWorker();
this.bw_Analysis_FileLoader = new System.ComponentModel.BackgroundWorker();
this.bw_AirportMapper = new System.ComponentModel.BackgroundWorker();
this.bw_LocatorGridUpdater = new System.ComponentModel.BackgroundWorker();
((System.ComponentModel.ISupportInitialize)(this.sc_Map)).BeginInit();
this.sc_Map.Panel1.SuspendLayout();
this.sc_Map.Panel2.SuspendLayout();
@ -306,6 +307,7 @@
this.ag_Azimuth.MinValue = 0F;
this.ag_Azimuth.Name = "ag_Azimuth";
this.ag_Azimuth.NoOfDivisions = 12;
this.ag_Azimuth.NoOfSubDivisions = 5;
this.ag_Azimuth.RecommendedValue = 0F;
this.ag_Azimuth.Size = new System.Drawing.Size(175, 175);
this.ag_Azimuth.TabIndex = 27;
@ -325,7 +327,8 @@
this.ag_Elevation.MaxValue = 90F;
this.ag_Elevation.MinValue = 0F;
this.ag_Elevation.Name = "ag_Elevation";
this.ag_Elevation.NoOfDivisions = 4;
this.ag_Elevation.NoOfDivisions = 6;
this.ag_Elevation.NoOfSubDivisions = 2;
this.ag_Elevation.RecommendedValue = 0F;
this.ag_Elevation.Size = new System.Drawing.Size(175, 175);
this.ag_Elevation.TabIndex = 28;
@ -1698,7 +1701,7 @@
this.cb_DXLoc.Font = new System.Drawing.Font("Courier New", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.cb_DXLoc.ForeColor = System.Drawing.SystemColors.WindowText;
this.cb_DXLoc.FormattingEnabled = true;
this.cb_DXLoc.GeoLocation = gPoint1;
this.cb_DXLoc.GeoLocation = gPoint7;
this.cb_DXLoc.Location = new System.Drawing.Point(3, 154);
this.cb_DXLoc.Name = "cb_DXLoc";
this.cb_DXLoc.Precision = 3;
@ -1722,7 +1725,7 @@
this.cb_MyLoc.Font = new System.Drawing.Font("Courier New", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.cb_MyLoc.ForeColor = System.Drawing.SystemColors.WindowText;
this.cb_MyLoc.FormattingEnabled = true;
this.cb_MyLoc.GeoLocation = gPoint2;
this.cb_MyLoc.GeoLocation = gPoint8;
this.cb_MyLoc.Location = new System.Drawing.Point(3, 71);
this.cb_MyLoc.Name = "cb_MyLoc";
this.cb_MyLoc.Precision = 3;
@ -2051,6 +2054,14 @@
this.bw_AirportMapper.ProgressChanged += new System.ComponentModel.ProgressChangedEventHandler(this.bw_AirportMapper_ProgressChanged);
this.bw_AirportMapper.RunWorkerCompleted += new System.ComponentModel.RunWorkerCompletedEventHandler(this.bw_AirportMapper_RunWorkerCompleted);
//
// bw_LocatorGridUpdater
//
this.bw_LocatorGridUpdater.WorkerReportsProgress = true;
this.bw_LocatorGridUpdater.WorkerSupportsCancellation = true;
this.bw_LocatorGridUpdater.DoWork += new System.ComponentModel.DoWorkEventHandler(this.bw_LocatorGridUpdater_DoWork);
this.bw_LocatorGridUpdater.ProgressChanged += new System.ComponentModel.ProgressChangedEventHandler(this.bw_LocatorGridUpdater_ProgressChanged);
this.bw_LocatorGridUpdater.RunWorkerCompleted += new System.ComponentModel.RunWorkerCompletedEventHandler(this.bw_LocatorGridUpdater_RunWorkerCompleted);
//
// MapDlg
//
this.AcceptButton = this.btn_Map_PlayPause;
@ -2270,6 +2281,7 @@
private System.Windows.Forms.ToolStripStatusLabel tsl_CAT;
private System.Windows.Forms.ToolStripStatusLabel tsl_Rot;
private System.Windows.Forms.ToolStripStatusLabel tsl_Track;
private System.ComponentModel.BackgroundWorker bw_LocatorGridUpdater;
}
}

Plik diff jest za duży Load Diff

Plik diff jest za duży Load Diff

Wyświetl plik

@ -125,7 +125,7 @@
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAACc
DQAAAk1TRnQBSQFMAgEBAwEAARABDAEQAQwBIAEAASABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
DQAAAk1TRnQBSQFMAgEBAwEAATABDAEwAQwBIAEAASABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
AwABgAMAASADAAEBAQABCAYAARAYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA
AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5
AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA
@ -189,6 +189,9 @@
<metadata name="ti_Progress.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>131, 17</value>
</metadata>
<metadata name="tt_Main.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>651, 17</value>
</metadata>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="btn_Analysis_FastForward.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
@ -205,9 +208,6 @@
TkSuQmCC
</value>
</data>
<metadata name="tt_Main.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>651, 17</value>
</metadata>
<data name="btn_Analysis_Forward.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
@ -305,45 +305,48 @@
<data name="tsl_Database_LED_Aircraft.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAIAAABLbSncAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
wAAADsABataJCQAAABBJREFUGFdjqMcBhpREfT0AN/NfQdTsp04AAAAASUVORK5CYII=
vAAADrwBlbxySQAAABBJREFUGFdjqMcBhpREfT0AN/NfQdTsp04AAAAASUVORK5CYII=
</value>
</data>
<data name="tsl_Database_LED_Stations.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAIAAABLbSncAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
wAAADsABataJCQAAABBJREFUGFdjqMcBhpREfT0AN/NfQdTsp04AAAAASUVORK5CYII=
vAAADrwBlbxySQAAABBJREFUGFdjqMcBhpREfT0AN/NfQdTsp04AAAAASUVORK5CYII=
</value>
</data>
<data name="tsl_Database_LED_GLOBE.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAIAAABLbSncAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
wAAADsABataJCQAAABBJREFUGFdjqMcBhpREfT0AN/NfQdTsp04AAAAASUVORK5CYII=
vAAADrwBlbxySQAAABBJREFUGFdjqMcBhpREfT0AN/NfQdTsp04AAAAASUVORK5CYII=
</value>
</data>
<data name="tsl_Database_LED_SRTM3.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAIAAABLbSncAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
wAAADsABataJCQAAABBJREFUGFdjqMcBhpREfT0AN/NfQdTsp04AAAAASUVORK5CYII=
vAAADrwBlbxySQAAABBJREFUGFdjqMcBhpREfT0AN/NfQdTsp04AAAAASUVORK5CYII=
</value>
</data>
<data name="tsl_Database_LED_SRTM1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAIAAABLbSncAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
wAAADsABataJCQAAABBJREFUGFdjqMcBhpREfT0AN/NfQdTsp04AAAAASUVORK5CYII=
vAAADrwBlbxySQAAABBJREFUGFdjqMcBhpREfT0AN/NfQdTsp04AAAAASUVORK5CYII=
</value>
</data>
<data name="tsl_Database_LED_ASTER3.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAIAAABLbSncAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
wAAADsABataJCQAAABBJREFUGFdjqMcBhpREfT0AN/NfQdTsp04AAAAASUVORK5CYII=
vAAADrwBlbxySQAAABBJREFUGFdjqMcBhpREfT0AN/NfQdTsp04AAAAASUVORK5CYII=
</value>
</data>
<data name="tsl_Database_LED_ASTER1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAIAAABLbSncAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
wAAADsABataJCQAAABBJREFUGFdjqMcBhpREfT0AN/NfQdTsp04AAAAASUVORK5CYII=
vAAADrwBlbxySQAAABBJREFUGFdjqMcBhpREfT0AN/NfQdTsp04AAAAASUVORK5CYII=
</value>
</data>
<metadata name="tt_Main.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>651, 17</value>
</metadata>
<metadata name="il_Sat.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>743, 17</value>
</metadata>
@ -352,7 +355,7 @@
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAACM
DAAAAk1TRnQBSQFMAwEBAAF4AQoBeAEKASABAAEgAQAE/wEJAQAI/wFCAU0BNgEEBgABNgEEAgABKAMA
DAAAAk1TRnQBSQFMAwEBAAGYAQoBmAEKASABAAEgAQAE/wEJAQAI/wFCAU0BNgEEBgABNgEEAgABKAMA
AYADAAEgAwABAQEAAQgGAAEQGAABgAIAAYADAAKAAQABgAMAAYABAAGAAQACgAIAA8ABAAHAAdwBwAEA
AfABygGmAQABMwUAATMBAAEzAQABMwEAAjMCAAMWAQADHAEAAyIBAAMpAQADVQEAA00BAANCAQADOQEA
AYABfAH/AQACUAH/AQABkwEAAdYBAAH/AewBzAEAAcYB1gHvAQAB1gLnAQABkAGpAa0CAAH/ATMDAAFm
@ -453,6 +456,9 @@
<metadata name="ti_ShowLegends.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>405, 95</value>
</metadata>
<metadata name="tt_Control_Watchlist.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>546, 56</value>
</metadata>
<metadata name="bw_Analysis_DataGetter.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>195, 56</value>
</metadata>
@ -465,6 +471,9 @@
<metadata name="bw_AirportMapper.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>1347, 17</value>
</metadata>
<metadata name="bw_LocatorGridUpdater.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>544, 95</value>
</metadata>
<metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>137</value>
</metadata>

Plik diff jest za duży Load Diff

Wyświetl plik

@ -32,6 +32,7 @@ using Newtonsoft.Json;
using static ScoutBase.Core.ZIP;
using AirScout.PlaneFeeds.Plugin.MEFContract;
using AirScout.CAT;
using System.Reflection;
namespace AirScout
{
@ -1186,6 +1187,28 @@ namespace AirScout
cb_Options_Map_Provider.Items.Add(GMapProviders.Find("OpenStreetMap"));
}
cb_Options_Map_Provider.SelectedItem = GMapProviders.Find(Properties.Settings.Default.Map_Provider);
// populate color picker dropdwon
foreach(var colorValue in Enum.GetValues(typeof(KnownColor)))
{
cb_Options_Gauges_ForeColor.Items.Add(Color.FromKnownColor((KnownColor)colorValue));
}
// select Color from Properties
try
{
cb_Options_Gauges_ForeColor.SelectedItem = Color.FromName(Properties.Settings.Default.Map_TrackingGaugeColor);
}
catch (Exception ex)
{
}
cb_Options_Gauges_ForeColor.MaxDropDownItems = 10;
cb_Options_Gauges_ForeColor.IntegralHeight = false;
cb_Options_Gauges_ForeColor.DrawMode = DrawMode.OwnerDrawFixed;
cb_Options_Gauges_ForeColor.DropDownStyle = ComboBoxStyle.DropDownList;
cb_Options_Gauges_ForeColor.DrawItem += cb_Options_Gauges_ForeColor_DrawItem;
}
private void tab_Options_Map_Validating(object sender, CancelEventArgs e)
@ -1276,6 +1299,34 @@ namespace AirScout
}
}
private void cb_Options_Gauges_ForeColor_DrawItem(object sender, DrawItemEventArgs e)
{
e.DrawBackground();
if (e.Index >= 0)
{
var txt = cb_Options_Gauges_ForeColor.GetItemText(cb_Options_Gauges_ForeColor.Items[e.Index]);
var color = (Color)cb_Options_Gauges_ForeColor.Items[e.Index];
var r1 = new Rectangle(e.Bounds.Left + 1, e.Bounds.Top + 1,
2 * (e.Bounds.Height - 2), e.Bounds.Height - 2);
var r2 = Rectangle.FromLTRB(r1.Right + 2, e.Bounds.Top,
e.Bounds.Right, e.Bounds.Bottom);
using (var b = new SolidBrush(color))
e.Graphics.FillRectangle(b, r1);
e.Graphics.DrawRectangle(Pens.Black, r1);
TextRenderer.DrawText(e.Graphics, txt, cb_Options_Gauges_ForeColor.Font, r2,
cb_Options_Gauges_ForeColor.ForeColor, TextFormatFlags.Left | TextFormatFlags.VerticalCenter);
}
}
private void cb_Options_Gauges_ForeColor_SelectedIndexChanged(object sender, EventArgs e)
{
Color c = (Color)cb_Options_Gauges_ForeColor.SelectedItem;
if (c == null)
return;
Properties.Settings.Default.Map_TrackingGaugeColor = c.ToKnownColor().ToString();
}
#endregion
@ -2595,7 +2646,7 @@ namespace AirScout
MessageBox.Show("Win-Test port and AirScout port must have different values.", "Parameter Error");
e.Cancel = true;
}
List<int> baudrates = new List<int>(new int[] { 50, 100, 110, 150, 300, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200 });
List<int> baudrates = new List<int>(new int[] { 50, 100, 110, 150, 300, 600, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200 });
if (!baudrates.Contains(tb_Options_Track_Serial_Baudrate.Value))
{
string s = "";
@ -2796,8 +2847,11 @@ namespace AirScout
try
{
SupportedRig rig = (SupportedRig)cb_Options_CAT_Rig.SelectedItem;
if (rig.CATEngine == CATENGINE.OMNIRIGX)
portenabled = false;
if (rig != null)
{
if (rig.CATEngine == CATENGINE.OMNIRIGX)
portenabled = false;
}
}
catch
{

Wyświetl plik

@ -240,9 +240,13 @@
</value>
</data>
<data name="label61.Text" xml:space="preserve">
<value>You can select different map provider from the list below. Depending on your selection some maps may not be available for your choosen area. Please note that the selection of maps is taken from Great Maps regardless of their legal status. Some of them might be copyrighted or otherwise restricted in use.
<value>You can select different map provider from the list below. Please note that the selection of maps is taken from Great Maps regardless of their legal status. Some of them might be copyrighted or otherwise restricted in use.
You were asked to agree with the terms of use first.
Open Street Map is recommended as a default.</value>
</data>
<data name="btn_Options_LocalObstructions.ToolTip" xml:space="preserve">
<value>Manages local obstructions near own location which are not covered by the choosen Digital Elevation Model, e.g. higher buildings or hill sites.
You can set a minimal possibile elevation for each single direction manually here.</value>
</data>
<data name="label52.Text" xml:space="preserve">
<value>Information from callsign database and other sources are used to prefill fields. You can overwrite and complete entries here. Your local database is updated. If you want to share the information with the AirScout community please use the "Send Update!" buttons.</value>

Wyświetl plik

@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
// Sie können alle Werte angeben oder die standardmäßigen Build- und Revisionsnummern
// übernehmen, indem Sie "*" eingeben:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.3.3.7")]
[assembly: AssemblyFileVersion("1.3.3.7")]
[assembly: AssemblyVersion("1.4.1.0")]
[assembly: AssemblyFileVersion("1.4.1.0")]

Wyświetl plik

@ -19,7 +19,7 @@ namespace AirScout.Properties {
// -Klasse über ein Tool wie ResGen oder Visual Studio automatisch generiert.
// Um einen Member hinzuzufügen oder zu entfernen, bearbeiten Sie die .ResX-Datei und führen dann ResGen
// mit der /str-Option erneut aus, oder Sie erstellen Ihr VS-Projekt neu.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {

Wyświetl plik

@ -541,7 +541,7 @@ namespace AirScout.Properties {
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("[WebFeed] Virtual Radar Server")]
[global::System.Configuration.DefaultSettingValueAttribute("[WebFeed] OpenSky")]
public string Planes_PlaneFeed1 {
get {
return ((string)(this["Planes_PlaneFeed1"]));
@ -2308,7 +2308,6 @@ Digital data base on the World Wide Web (URL: http://www.ngdc.noaa.gov/mgg/topo/
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("False")]
public bool StationsMap_OverlayElevation {
get {
return ((bool)(this["StationsMap_OverlayElevation"]));
@ -2696,5 +2695,125 @@ Digital data base on the World Wide Web (URL: http://www.ngdc.noaa.gov/mgg/topo/
this["Map_ShowDistances"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("175")]
public decimal Map_TrackingGaugeWidth {
get {
return ((decimal)(this["Map_TrackingGaugeWidth"]));
}
set {
this["Map_TrackingGaugeWidth"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("Black")]
public string Map_TrackingGaugeColor {
get {
return ((string)(this["Map_TrackingGaugeColor"]));
}
set {
this["Map_TrackingGaugeColor"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("False")]
public bool InfoWin_MyAzimuth {
get {
return ((bool)(this["InfoWin_MyAzimuth"]));
}
set {
this["InfoWin_MyAzimuth"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("False")]
public bool InfoWin_MyElevation {
get {
return ((bool)(this["InfoWin_MyElevation"]));
}
set {
this["InfoWin_MyElevation"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("False")]
public bool InfoWin_MyDoppler {
get {
return ((bool)(this["InfoWin_MyDoppler"]));
}
set {
this["InfoWin_MyDoppler"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("False")]
public bool InfoWin_DXAzimuth {
get {
return ((bool)(this["InfoWin_DXAzimuth"]));
}
set {
this["InfoWin_DXAzimuth"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("False")]
public bool InfoWin_DXElevation {
get {
return ((bool)(this["InfoWin_DXElevation"]));
}
set {
this["InfoWin_DXElevation"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("False")]
public bool InfoWin_DXDoppler {
get {
return ((bool)(this["InfoWin_DXDoppler"]));
}
set {
this["InfoWin_DXDoppler"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("False")]
public bool InfoWin_AlwaysDetailed {
get {
return ((bool)(this["InfoWin_AlwaysDetailed"]));
}
set {
this["InfoWin_AlwaysDetailed"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("True")]
public bool Map_TrackingGaugesShow {
get {
return ((bool)(this["Map_TrackingGaugesShow"]));
}
set {
this["Map_TrackingGaugesShow"] = value;
}
}
}
}

Wyświetl plik

@ -132,7 +132,7 @@
<Value Profile="(Default)">[none]</Value>
</Setting>
<Setting Name="Planes_PlaneFeed1" Type="System.String" Scope="User">
<Value Profile="(Default)">[WebFeed] Virtual Radar Server</Value>
<Value Profile="(Default)">[WebFeed] OpenSky</Value>
</Setting>
<Setting Name="Planes_Position_TTL" Type="System.Int32" Scope="User">
<Value Profile="(Default)">5</Value>
@ -605,8 +605,8 @@ MEaSUREs data and products are available at no charge from the LP DAAC.See https
<Value Profile="(Default)">11</Value>
</Setting>
<Setting Name="StationsMap_OverlayElevation" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="Elevation_ASTER3_Copyright" Type="System.String" Scope="User">
<Value Profile="(Default)">Maidenhead locator system elvation tiles calculated by DL2ALF based on elevation data of the ASTER project:
@ -724,5 +724,35 @@ NASA/METI/AIST/Japan Spacesystems, and U.S./Japan ASTER Science Team (2019). AST
<Setting Name="Map_ShowDistances" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="Map_TrackingGaugeWidth" Type="System.Decimal" Scope="User">
<Value Profile="(Default)">175</Value>
</Setting>
<Setting Name="Map_TrackingGaugeColor" Type="System.String" Scope="User">
<Value Profile="(Default)">Black</Value>
</Setting>
<Setting Name="InfoWin_MyAzimuth" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="InfoWin_MyElevation" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="InfoWin_MyDoppler" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="InfoWin_DXAzimuth" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="InfoWin_DXElevation" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="InfoWin_DXDoppler" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="InfoWin_AlwaysDetailed" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="Map_TrackingGaugesShow" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">True</Value>
</Setting>
</Settings>
</SettingsFile>

Wyświetl plik

@ -10,12 +10,17 @@ There is no special installation package or archive to download.
Nevertheless some precautions are necessary depending on the your Linux system.
Linux support remains experimental, I simply cannot verify all existing configurations.
AirScout was tested with a 64bit SUSE Linux (Leap 42.3) with KDE-Desktop and Mono 4.6.1 in a VMWare virtual machine.
Latest tests with AirScout were made on a 64bit Ubuntu Linux (21.10) with KDE-Desktop and Mono 6.8.0.105 in a VMWare virtual machine.
To get ist running on your system, please follow the steps below
1. Check if your version of Linux is up to date
2. Install the full Mono package by running:
2. Get the latest Mono version information and install the full Mono package by running (see https://www.mono-project.com/):
sudo apt install gnupg ca-certificates
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
echo "deb https://download.mono-project.com/repo/ubuntu stable-focal main" | sudo tee /etc/apt/sources.list.d/mono-official-stable.list
sudo apt update
sudo apt-get install mono-complete (on most systems)
@ -25,7 +30,7 @@ To get ist running on your system, please follow the steps below
3. Unzip archive or simple copy all unpacked files in a directory of your choice, e.g. /home/[Linux Username]/AirScout
4. Open a terminal window there
5. Run AirScout by typing "mono AirScout.exe"
5. Run AirScout by typing "mono AirScout.exe", if you have problems with language settings "LANG=en-EN mono AirScout.exe"
6. Have fun with AirScout running on Linux with 99% functionality
@ -50,10 +55,11 @@ VERY IMPORTANT!!! ON SOME OLDER/SMALLER SYSTEMS THE SSL ENCRYPTED CONNECTIONS ("
IN THIS CASE YOU HAVE TO IMPORT SSL CERTIFICATES TO THE MONO CERTIFICATE STORE MANUALLY!!!
Mono is using its own certificate store different from system or Mozilla's web browser.
The synchronisation should be done automatically but I found it not working sometimes after downloading the Mono package.
The synchronisation should be done automatically but I found it not working sometimes after downloading the Mono package.
In this case you will see a lot of Error messages in the Terminal window like "Error while reading chunked content: Cannot read application data on failed TLS connection"
1. Install the "ca-certificates-mozilla" package to get SSL certificates
2. Import the certificates into the Mono certificate store by typing "sudo cert-sync /etc/ssl/ca-bundle.pem" (can be a different location on other versions!)
1. Install the "ca-certificates-mono" package to get SSL certificates
2. Import the certificates into the Mono certificate store by typing "cert-sync /etc/ssl/certs/ca-certificates.crt" (can be a different location on other versions!)

Wyświetl plik

@ -46,6 +46,7 @@
this.pb_Main.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
this.pb_Main.TabIndex = 0;
this.pb_Main.TabStop = false;
this.pb_Main.Click += new System.EventHandler(this.pb_Main_Click);
this.pb_Main.Paint += new System.Windows.Forms.PaintEventHandler(this.pb_Main_Paint);
//
// ti_Close

Wyświetl plik

@ -116,5 +116,11 @@ namespace AirScout
e.Graphics.DrawString(text, myFont, Brushes.White, new Point(140-2, 10-2));
}
}
private void pb_Main_Click(object sender, EventArgs e)
{
// hide the splash window when clicking on it
this.Visible = false;
}
}
}

Wyświetl plik

@ -1,4 +1,61 @@
2021-12-23: V1.3.3.6
2022-01-03: V1.4.1.0
====================
- Bugfix: RIT on rig is reset when tracking started --> fixed
- Bugfix: Exceptions while accessing elevation database from background processes and more than one elevation model was ticked --> database status shows "Error" --> fixed
- Bugfix: Exceptions while accessing elevation database and local obstructions have NULL values --> fixed
- Bugfix: Database update was not started when last status was "Error" and no other changes occured
- Bugfix: Exceptions were thrown sometimes on concurrent database access from different threads, missing database locks --> fixed
- Bugfix: Planefeeeds with TLS (https://...) were hanging sometimes in an inifinite loop --> fixed
- Bugfix: AirScout does not deliver planes on web request
- Remove: Planefinder feed removed due to copyright issues (by request of the website owner)
- Feature: configurable update rate for tracking
- Feature: configurable time offset for tracking
- Feature: optional show a locator grid on map
- Feature: optional show distance circles around own location
- Feature: new UDP commands "ASADDWATCH qrg, call, [loc], checked (0/1), ... " and "ASREMOVEWATCH qrg, call, ..." for easier watchlist control
- Feature: common and reworked TLS client for all feeds
- Feature: hide the splash window on startup when clicking on it
- Feature: enhanced tracking gauges and rig display, you can set size and color now in Options/Settings/Map for better visibility (tnx W8BYA)
- Feature: enhanced info window with optional tracking & Doppler information for both stations (when tracking) (tnx KV4PC)
- Feature: always show a detailed info window regardless if the plane is heading towards path (for sidescatter and other purpose) (tnx KV4PC)
2021-04-13: V1.4.0.2
====================
- Feature: complete rework of tracking module with Status visualization
- Feature: CAT now handles OmniRi V1.19 or V2.x dynamically
- Feature: refined extrapolation of plane positions
- Bugfix: Planes were shown as hot when crossing path "behind" the DX station --> fixed
2021-04-5: V1.4.0.1
====================
- Feature: introducing CAT Interface with OmniRig V2.1
- Feature: introducing Doppler shift compensation with CAT
2021-xx-xx: V1.4.0.0 (not published)
====================
- Feature: introducing ASTER Digital Elevation Model covering earth surface almost complete, but data are very raw and have to filtered, only useful when coverage > 60° needed
- Feature: new OpenTopoMap provider, not really suitable for supervising aircraft travel but has very nice contour levels (based on SRTM)
- Feature: adjust main map opacity via "Options/Map" which is helpful in case map colors are very prominent
2022-08-27: V1.3.3.7
====================
- Bugfix: Removal of all non working plane feeds
- Bugfix: RTL1090 plane feed remains in deadlock if no TCP server was found --> fixed
- Bugfix: OpenSky plane feed remains in deadlock if any error during reading occurs --> fixed
- Bugfix: Browser window does not suppress JavaScript errors (if lots) making AirScout nearly unusable --> fixed (tnx OK1VUM)
- Bugfix: planes.json was not properly created and therefore not properly delivered by webserver --> fixed
- Bugfix: does not run on recent Linux distributions (like Ubuntu 22.x, 64bit) anymore --> fixed
- Bugfix: Export of horizon data was malformatted --> fixed
- Bugfix: Program settings were not handled properly on Linux --> fixed by reading and writing as JSON on Linux
- Feature: OpenSky plane feed now allows the input of username/password for registered users (extendig the limit of daily requests)
- Feature: new AirScout Server plane feed gets planes from another AirScout instance (>= V1.3.3.7) or (maybe) AirScout web service in future
2021-12-23: V1.3.3.6
====================
- Feature: Elevation grid overlay on "Optionms/Stations/Map" to better understand elevation resolution issues and local situation (for zoom levels >= 17)

Wyświetl plik

@ -80,6 +80,14 @@ namespace AirScout
// name the thread for debugging
if (String.IsNullOrEmpty(Thread.CurrentThread.Name))
Thread.CurrentThread.Name = this.GetType().Name;
string tmpdir = Application.StartupPath;
// get temp directory from arguments
if (e != null)
{
tmpdir = (string)e.Argument;
}
Log.WriteMessage("started.");
// run simple web server
string hosturl = "http://+:" + Properties.Settings.Default.Webserver_Port.ToString() + "/";
@ -119,6 +127,7 @@ namespace AirScout
// send response from a background thread
WebServerDelivererArgs args = new WebServerDelivererArgs();
args.ID = id;
args.TmpDirectory = tmpdir;
args.Context = context;
args.AllPlanes = allplanes;
WebserverDeliver bw = new WebserverDeliver();
@ -141,6 +150,9 @@ namespace AirScout
Process.Start(psi).WaitForExit();
}
// do almost nothing
// wait 10 seconds and restart the listener
Thread.Sleep(10000);
}
catch (Exception ex)
{
@ -173,6 +185,7 @@ namespace AirScout
public class WebserverDeliver : BackgroundWorker
{
string TmpDirectory = Application.StartupPath;
public short GetElevation(double lat, double lon)
{
@ -314,10 +327,10 @@ namespace AirScout
}
private string DeliverPlanes()
private string DeliverPlanes(string tmpdir)
{
string json = "";
var fs = File.OpenRead(Application.StartupPath + Path.DirectorySeparatorChar + "planes.json");
var fs = File.OpenRead(tmpdir + Path.DirectorySeparatorChar + "planes.json");
using (StreamReader sr = new StreamReader(fs))
{
json = sr.ReadToEnd();
@ -801,7 +814,7 @@ namespace AirScout
// check for content delivery request
if (request.RawUrl.ToLower() == "/planes.json")
{
responsestring = DeliverPlanes();
responsestring = DeliverPlanes(args.TmpDirectory);
}
else if (request.RawUrl.ToLower().StartsWith("/version.json"))
{
@ -846,6 +859,7 @@ namespace AirScout
public class WebServerDelivererArgs
{
public int ID;
public string TmpDirectory = "";
public HttpListenerContext Context;
public List<PlaneInfo> AllPlanes;
}

Wyświetl plik

@ -1,11 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<section name="AirScout.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
<section name="AirScout.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false"/>
</sectionGroup>
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false"/>
</configSections>
<userSettings>
<AirScout.Properties.Settings>
@ -139,7 +139,7 @@
<value>[none]</value>
</setting>
<setting name="Planes_PlaneFeed1" serializeAs="String">
<value>[WebFeed] Virtual Radar Server</value>
<value>[WebFeed] OpenSky</value>
</setting>
<setting name="Planes_Position_TTL" serializeAs="String">
<value>5</value>
@ -723,20 +723,50 @@ NASA/METI/AIST/Japan Spacesystems, and U.S./Japan ASTER Science Team (2019). AST
<setting name="Map_ShowDistances" serializeAs="String">
<value>False</value>
</setting>
<setting name="Map_TrackingGaugeWidth" serializeAs="String">
<value>175</value>
</setting>
<setting name="Map_TrackingGaugeColor" serializeAs="String">
<value>Black</value>
</setting>
<setting name="InfoWin_MyAzimuth" serializeAs="String">
<value>False</value>
</setting>
<setting name="InfoWin_MyElevation" serializeAs="String">
<value>False</value>
</setting>
<setting name="InfoWin_MyDoppler" serializeAs="String">
<value>False</value>
</setting>
<setting name="InfoWin_DXAzimuth" serializeAs="String">
<value>False</value>
</setting>
<setting name="InfoWin_DXElevation" serializeAs="String">
<value>False</value>
</setting>
<setting name="InfoWin_DXDoppler" serializeAs="String">
<value>False</value>
</setting>
<setting name="InfoWin_AlwaysDetailed" serializeAs="String">
<value>False</value>
</setting>
<setting name="Map_TrackingGaugesShow" serializeAs="String">
<value>True</value>
</setting>
</AirScout.Properties.Settings>
</userSettings>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0" />
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
<parameters>
<parameter value="v13.0" />
<parameter value="v13.0"/>
</parameters>
</defaultConnectionFactory>
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
<provider invariantName="System.Data.SQLite.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" />
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer"/>
<provider invariantName="System.Data.SQLite.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6"/>
</providers>
</entityFramework>
@ -745,13 +775,13 @@ NASA/METI/AIST/Japan Spacesystems, and U.S./Japan ASTER Science Team (2019). AST
<dependentAssembly>
<assemblyIdentity name="System.Data.SQLite" publicKeyToken="db937bc2d44ff139" culture="neutral" />
<assemblyIdentity name="System.Data.SQLite" publicKeyToken="db937bc2d44ff139" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-1.0.109.0" newVersion="1.0.109.0" />
<bindingRedirect oldVersion="0.0.0.0-1.0.109.0" newVersion="1.0.109.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
</configuration>

Wyświetl plik

@ -1,7 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="DeviceId" version="4.5.0" targetFramework="net40" />
<package id="Newtonsoft.Json" version="12.0.3" targetFramework="net40" />
<package id="Stub.System.Data.SQLite.Core.NetFramework" version="1.0.113.3" targetFramework="net40" />
<package id="System.Data.SQLite.Core" version="1.0.113.7" targetFramework="net40" />
<package id="Newtonsoft.Json" version="13.0.1" targetFramework="net40" />
<package id="System.Data.SQLite.Core" version="1.0.112.0" targetFramework="net40" />
</packages>

Wyświetl plik

@ -62,16 +62,10 @@
<CodeAnalysisFailOnMissingRules>false</CodeAnalysisFailOnMissingRules>
</PropertyGroup>
<ItemGroup>
<Reference Include="Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.12.0.3\lib\net40\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.ComponentModel.DataAnnotations" />
<Reference Include="System.configuration" />
<Reference Include="System.Core" />
<Reference Include="System.Data.SQLite, Version=1.0.113.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=MSIL">
<HintPath>..\packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.113.3\lib\net40\System.Data.SQLite.dll</HintPath>
</Reference>
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
@ -116,7 +110,6 @@
<None Include="libSQLite.Interop.so">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="packages.config" />
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
@ -158,13 +151,6 @@
</Content>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Import Project="..\packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.113.3\build\net40\Stub.System.Data.SQLite.Core.NetFramework.targets" Condition="Exists('..\packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.113.3\build\net40\Stub.System.Data.SQLite.Core.NetFramework.targets')" />
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>
<ErrorText>Dieses Projekt verweist auf mindestens ein NuGet-Paket, das auf diesem Computer fehlt. Verwenden Sie die Wiederherstellung von NuGet-Paketen, um die fehlenden Dateien herunterzuladen. Weitere Informationen finden Sie unter "http://go.microsoft.com/fwlink/?LinkID=322105". Die fehlende Datei ist "{0}".</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('..\packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.113.3\build\net40\Stub.System.Data.SQLite.Core.NetFramework.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.113.3\build\net40\Stub.System.Data.SQLite.Core.NetFramework.targets'))" />
</Target>
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">

Wyświetl plik

@ -1,6 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Newtonsoft.Json" version="12.0.3" targetFramework="net40-client" />
<package id="Stub.System.Data.SQLite.Core.NetFramework" version="1.0.113.3" targetFramework="net40-client" />
<package id="System.Data.SQLite.Core" version="1.0.113.7" targetFramework="net40-client" />
</packages>

Wyświetl plik

@ -34,14 +34,11 @@
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.12.0.3\lib\net40\Newtonsoft.Json.dll</HintPath>
<Reference Include="Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.13.0.1\lib\net40\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Data.SQLite, Version=1.0.113.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=MSIL">
<HintPath>..\packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.113.3\lib\net40\System.Data.SQLite.dll</HintPath>
</Reference>
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
@ -158,13 +155,6 @@
</Content>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Import Project="..\packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.113.3\build\net40\Stub.System.Data.SQLite.Core.NetFramework.targets" Condition="Exists('..\packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.113.3\build\net40\Stub.System.Data.SQLite.Core.NetFramework.targets')" />
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>
<ErrorText>Dieses Projekt verweist auf mindestens ein NuGet-Paket, das auf diesem Computer fehlt. Verwenden Sie die Wiederherstellung von NuGet-Paketen, um die fehlenden Dateien herunterzuladen. Weitere Informationen finden Sie unter "http://go.microsoft.com/fwlink/?LinkID=322105". Die fehlende Datei ist "{0}".</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('..\packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.113.3\build\net40\Stub.System.Data.SQLite.Core.NetFramework.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.113.3\build\net40\Stub.System.Data.SQLite.Core.NetFramework.targets'))" />
</Target>
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">

Wyświetl plik

@ -34,7 +34,7 @@
ScoutBase.Core.LatLon.GPoint gPoint2 = new ScoutBase.Core.LatLon.GPoint();
this.mnu_Main = new System.Windows.Forms.MenuStrip();
this.tsi_Exit = new System.Windows.Forms.ToolStripMenuItem();
this.mnu_Settings = new System.Windows.Forms.ToolStripMenuItem();
this.tsi_Settings = new System.Windows.Forms.ToolStripMenuItem();
this.tsi_Info = new System.Windows.Forms.ToolStripMenuItem();
this.ss_Main = new System.Windows.Forms.StatusStrip();
this.tsl_Status = new System.Windows.Forms.ToolStripStatusLabel();
@ -94,7 +94,7 @@
//
this.mnu_Main.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.tsi_Exit,
this.mnu_Settings,
this.tsi_Settings,
this.tsi_Info});
this.mnu_Main.Location = new System.Drawing.Point(0, 0);
this.mnu_Main.Name = "mnu_Main";
@ -109,12 +109,12 @@
this.tsi_Exit.Text = "E&xit";
this.tsi_Exit.Click += new System.EventHandler(this.tsi_Exit_Click);
//
// mnu_Settings
// tsi_Settings
//
this.mnu_Settings.Name = "mnu_Settings";
this.mnu_Settings.Size = new System.Drawing.Size(61, 20);
this.mnu_Settings.Text = "&Settings";
this.mnu_Settings.Click += new System.EventHandler(this.mnu_Settings_Click);
this.tsi_Settings.Name = "tsi_Settings";
this.tsi_Settings.Size = new System.Drawing.Size(61, 20);
this.tsi_Settings.Text = "&Settings";
this.tsi_Settings.Click += new System.EventHandler(this.tsi_Settings_Click);
//
// tsi_Info
//
@ -631,7 +631,7 @@
private System.Windows.Forms.ToolStripMenuItem tsi_Info;
private System.Windows.Forms.StatusStrip ss_Main;
private System.Windows.Forms.ToolStripStatusLabel tsl_Status;
private System.Windows.Forms.ToolStripMenuItem mnu_Settings;
private System.Windows.Forms.ToolStripMenuItem tsi_Settings;
private System.Windows.Forms.GroupBox gb_Info;
private System.Windows.Forms.GroupBox gb_Map;
private System.Windows.Forms.Timer ti_Progress;

Wyświetl plik

@ -0,0 +1,676 @@
namespace AirScoutViewClient
{
partial class MapViewDlg
{
/// <summary>
/// Erforderliche Designervariable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Verwendete Ressourcen bereinigen.
/// </summary>
/// <param name="disposing">True, wenn verwaltete Ressourcen gelöscht werden sollen; andernfalls False.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Vom Windows Form-Designer generierter Code
/// <summary>
/// Erforderliche Methode für die Designerunterstützung.
/// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden.
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MapViewDlg));
ScoutBase.Core.LatLon.GPoint gPoint1 = new ScoutBase.Core.LatLon.GPoint();
ScoutBase.Core.LatLon.GPoint gPoint2 = new ScoutBase.Core.LatLon.GPoint();
this.mnu_Main = new System.Windows.Forms.MenuStrip();
this.tsi_Exit = new System.Windows.Forms.ToolStripMenuItem();
this.mnu_Settings = new System.Windows.Forms.ToolStripMenuItem();
this.tsi_Info = new System.Windows.Forms.ToolStripMenuItem();
this.ss_Main = new System.Windows.Forms.StatusStrip();
this.tsl_Status = new System.Windows.Forms.ToolStripStatusLabel();
this.tsl_ConnectionStatus = new System.Windows.Forms.ToolStripStatusLabel();
this.gb_Info = new System.Windows.Forms.GroupBox();
this.gb_Map_Zoom = new System.Windows.Forms.GroupBox();
this.pa_Map_Zoom = new System.Windows.Forms.Panel();
this.cb_Map_AutoCenter = new System.Windows.Forms.CheckBox();
this.tb_Map_Zoom = new System.Windows.Forms.TextBox();
this.btn_Map_Zoom_Out = new System.Windows.Forms.Button();
this.btn_Map_Zoom_In = new System.Windows.Forms.Button();
this.gb_Control = new System.Windows.Forms.GroupBox();
this.btn_Map_PlayPause = new System.Windows.Forms.Button();
this.il_Main = new System.Windows.Forms.ImageList(this.components);
this.cb_DXLoc = new ScoutBase.Core.LocatorComboBox();
this.cb_MyLoc = new ScoutBase.Core.LocatorComboBox();
this.label8 = new System.Windows.Forms.Label();
this.cb_Band = new System.Windows.Forms.ComboBox();
this.tb_QTF = new System.Windows.Forms.TextBox();
this.label6 = new System.Windows.Forms.Label();
this.tb_QRB = new System.Windows.Forms.TextBox();
this.label16 = new System.Windows.Forms.Label();
this.label4 = new System.Windows.Forms.Label();
this.tb_DXCall = new ScoutBase.Core.CallsignTextBox();
this.label5 = new System.Windows.Forms.Label();
this.label3 = new System.Windows.Forms.Label();
this.tb_MyCall = new ScoutBase.Core.CallsignTextBox();
this.label2 = new System.Windows.Forms.Label();
this.label1 = new System.Windows.Forms.Label();
this.tb_UTC = new System.Windows.Forms.TextBox();
this.gb_Map = new System.Windows.Forms.GroupBox();
this.spc_Main = new System.Windows.Forms.SplitContainer();
this.gm_Main = new GMap.NET.WindowsForms.GMapControl();
this.gb_Path = new System.Windows.Forms.GroupBox();
this.ti_Progress = new System.Windows.Forms.Timer(this.components);
this.ti_Startup = new System.Windows.Forms.Timer(this.components);
this.il_Planes_H = new System.Windows.Forms.ImageList(this.components);
this.il_Planes_L = new System.Windows.Forms.ImageList(this.components);
this.il_Planes_S = new System.Windows.Forms.ImageList(this.components);
this.il_Airports = new System.Windows.Forms.ImageList(this.components);
this.il_Planes_M = new System.Windows.Forms.ImageList(this.components);
this.ti_ShowLegends = new System.Windows.Forms.Timer(this.components);
this.mnu_Main.SuspendLayout();
this.ss_Main.SuspendLayout();
this.gb_Info.SuspendLayout();
this.gb_Map_Zoom.SuspendLayout();
this.pa_Map_Zoom.SuspendLayout();
this.gb_Control.SuspendLayout();
this.gb_Map.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.spc_Main)).BeginInit();
this.spc_Main.Panel1.SuspendLayout();
this.spc_Main.Panel2.SuspendLayout();
this.spc_Main.SuspendLayout();
this.SuspendLayout();
//
// mnu_Main
//
this.mnu_Main.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.tsi_Exit,
this.mnu_Settings,
this.tsi_Info});
this.mnu_Main.Location = new System.Drawing.Point(0, 0);
this.mnu_Main.Name = "mnu_Main";
this.mnu_Main.Size = new System.Drawing.Size(836, 24);
this.mnu_Main.TabIndex = 0;
this.mnu_Main.Text = "menuStrip1";
//
// tsi_Exit
//
this.tsi_Exit.Name = "tsi_Exit";
this.tsi_Exit.Size = new System.Drawing.Size(38, 20);
this.tsi_Exit.Text = "E&xit";
this.tsi_Exit.Click += new System.EventHandler(this.tsi_Exit_Click);
//
// mnu_Settings
//
this.mnu_Settings.Name = "mnu_Settings";
this.mnu_Settings.Size = new System.Drawing.Size(61, 20);
this.mnu_Settings.Text = "&Settings";
this.mnu_Settings.Click += new System.EventHandler(this.mnu_Settings_Click);
//
// tsi_Info
//
this.tsi_Info.Name = "tsi_Info";
this.tsi_Info.Size = new System.Drawing.Size(40, 20);
this.tsi_Info.Text = "&Info";
this.tsi_Info.Click += new System.EventHandler(this.tsi_Info_Click);
//
// ss_Main
//
this.ss_Main.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.tsl_Status,
this.tsl_ConnectionStatus});
this.ss_Main.Location = new System.Drawing.Point(0, 518);
this.ss_Main.Name = "ss_Main";
this.ss_Main.Size = new System.Drawing.Size(836, 22);
this.ss_Main.TabIndex = 1;
this.ss_Main.Text = "statusStrip1";
//
// tsl_Status
//
this.tsl_Status.Name = "tsl_Status";
this.tsl_Status.Size = new System.Drawing.Size(782, 17);
this.tsl_Status.Spring = true;
this.tsl_Status.Text = "Status";
this.tsl_Status.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// tsl_ConnectionStatus
//
this.tsl_ConnectionStatus.Name = "tsl_ConnectionStatus";
this.tsl_ConnectionStatus.Size = new System.Drawing.Size(39, 17);
this.tsl_ConnectionStatus.Text = "Status";
//
// gb_Info
//
this.gb_Info.Controls.Add(this.gb_Map_Zoom);
this.gb_Info.Controls.Add(this.gb_Control);
this.gb_Info.Controls.Add(this.cb_DXLoc);
this.gb_Info.Controls.Add(this.cb_MyLoc);
this.gb_Info.Controls.Add(this.label8);
this.gb_Info.Controls.Add(this.cb_Band);
this.gb_Info.Controls.Add(this.tb_QTF);
this.gb_Info.Controls.Add(this.label6);
this.gb_Info.Controls.Add(this.tb_QRB);
this.gb_Info.Controls.Add(this.label16);
this.gb_Info.Controls.Add(this.label4);
this.gb_Info.Controls.Add(this.tb_DXCall);
this.gb_Info.Controls.Add(this.label5);
this.gb_Info.Controls.Add(this.label3);
this.gb_Info.Controls.Add(this.tb_MyCall);
this.gb_Info.Controls.Add(this.label2);
this.gb_Info.Controls.Add(this.label1);
this.gb_Info.Controls.Add(this.tb_UTC);
this.gb_Info.Dock = System.Windows.Forms.DockStyle.Right;
this.gb_Info.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.gb_Info.Location = new System.Drawing.Point(691, 24);
this.gb_Info.Name = "gb_Info";
this.gb_Info.Size = new System.Drawing.Size(145, 494);
this.gb_Info.TabIndex = 3;
this.gb_Info.TabStop = false;
this.gb_Info.Text = "Info";
//
// gb_Map_Zoom
//
this.gb_Map_Zoom.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
this.gb_Map_Zoom.Controls.Add(this.pa_Map_Zoom);
this.gb_Map_Zoom.Dock = System.Windows.Forms.DockStyle.Bottom;
this.gb_Map_Zoom.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.gb_Map_Zoom.Location = new System.Drawing.Point(3, 357);
this.gb_Map_Zoom.Name = "gb_Map_Zoom";
this.gb_Map_Zoom.Size = new System.Drawing.Size(139, 79);
this.gb_Map_Zoom.TabIndex = 66;
this.gb_Map_Zoom.TabStop = false;
this.gb_Map_Zoom.Text = "Map Zoom";
//
// pa_Map_Zoom
//
this.pa_Map_Zoom.Controls.Add(this.cb_Map_AutoCenter);
this.pa_Map_Zoom.Controls.Add(this.tb_Map_Zoom);
this.pa_Map_Zoom.Controls.Add(this.btn_Map_Zoom_Out);
this.pa_Map_Zoom.Controls.Add(this.btn_Map_Zoom_In);
this.pa_Map_Zoom.Dock = System.Windows.Forms.DockStyle.Fill;
this.pa_Map_Zoom.Location = new System.Drawing.Point(3, 16);
this.pa_Map_Zoom.Name = "pa_Map_Zoom";
this.pa_Map_Zoom.Size = new System.Drawing.Size(133, 60);
this.pa_Map_Zoom.TabIndex = 65;
//
// cb_Map_AutoCenter
//
this.cb_Map_AutoCenter.AutoSize = true;
this.cb_Map_AutoCenter.Checked = global::AirScoutViewClient.Properties.Settings.Default.Map_AutoCenter;
this.cb_Map_AutoCenter.CheckState = System.Windows.Forms.CheckState.Checked;
this.cb_Map_AutoCenter.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::AirScoutViewClient.Properties.Settings.Default, "Map_AutoCenter", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.cb_Map_AutoCenter.Location = new System.Drawing.Point(12, 37);
this.cb_Map_AutoCenter.Name = "cb_Map_AutoCenter";
this.cb_Map_AutoCenter.Size = new System.Drawing.Size(93, 17);
this.cb_Map_AutoCenter.TabIndex = 24;
this.cb_Map_AutoCenter.Text = "Auto Center";
this.cb_Map_AutoCenter.UseVisualStyleBackColor = true;
//
// tb_Map_Zoom
//
this.tb_Map_Zoom.BackColor = System.Drawing.Color.FloralWhite;
this.tb_Map_Zoom.Font = new System.Drawing.Font("Courier New", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.tb_Map_Zoom.Location = new System.Drawing.Point(45, 9);
this.tb_Map_Zoom.Name = "tb_Map_Zoom";
this.tb_Map_Zoom.Size = new System.Drawing.Size(41, 22);
this.tb_Map_Zoom.TabIndex = 23;
//
// btn_Map_Zoom_Out
//
this.btn_Map_Zoom_Out.Location = new System.Drawing.Point(92, 8);
this.btn_Map_Zoom_Out.Name = "btn_Map_Zoom_Out";
this.btn_Map_Zoom_Out.Size = new System.Drawing.Size(30, 23);
this.btn_Map_Zoom_Out.TabIndex = 22;
this.btn_Map_Zoom_Out.Text = "-";
this.btn_Map_Zoom_Out.UseVisualStyleBackColor = true;
this.btn_Map_Zoom_Out.Click += new System.EventHandler(this.btn_Map_Zoom_Out_Click);
//
// btn_Map_Zoom_In
//
this.btn_Map_Zoom_In.Location = new System.Drawing.Point(9, 8);
this.btn_Map_Zoom_In.Name = "btn_Map_Zoom_In";
this.btn_Map_Zoom_In.Size = new System.Drawing.Size(30, 23);
this.btn_Map_Zoom_In.TabIndex = 21;
this.btn_Map_Zoom_In.Text = "+";
this.btn_Map_Zoom_In.UseVisualStyleBackColor = true;
this.btn_Map_Zoom_In.Click += new System.EventHandler(this.btn_Map_Zoom_In_Click);
//
// gb_Control
//
this.gb_Control.Controls.Add(this.btn_Map_PlayPause);
this.gb_Control.Dock = System.Windows.Forms.DockStyle.Bottom;
this.gb_Control.Location = new System.Drawing.Point(3, 436);
this.gb_Control.Name = "gb_Control";
this.gb_Control.Size = new System.Drawing.Size(139, 55);
this.gb_Control.TabIndex = 64;
this.gb_Control.TabStop = false;
//
// btn_Map_PlayPause
//
this.btn_Map_PlayPause.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.btn_Map_PlayPause.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.btn_Map_PlayPause.ImageIndex = 1;
this.btn_Map_PlayPause.ImageList = this.il_Main;
this.btn_Map_PlayPause.Location = new System.Drawing.Point(14, 17);
this.btn_Map_PlayPause.Name = "btn_Map_PlayPause";
this.btn_Map_PlayPause.Size = new System.Drawing.Size(114, 29);
this.btn_Map_PlayPause.TabIndex = 64;
this.btn_Map_PlayPause.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
this.btn_Map_PlayPause.UseVisualStyleBackColor = true;
this.btn_Map_PlayPause.Click += new System.EventHandler(this.btn_Map_PlayPause_Click);
//
// il_Main
//
this.il_Main.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("il_Main.ImageStream")));
this.il_Main.TransparentColor = System.Drawing.Color.Transparent;
this.il_Main.Images.SetKeyName(0, "PauseHS.png");
this.il_Main.Images.SetKeyName(1, "PlayHS.png");
this.il_Main.Images.SetKeyName(2, "RecordHS.png");
//
// cb_DXLoc
//
this.cb_DXLoc.AutoLength = false;
this.cb_DXLoc.BackColor = System.Drawing.SystemColors.Window;
this.cb_DXLoc.CharacterCasing = System.Windows.Forms.CharacterCasing.Normal;
this.cb_DXLoc.ErrorBackColor = System.Drawing.Color.Red;
this.cb_DXLoc.ErrorForeColor = System.Drawing.Color.White;
this.cb_DXLoc.Font = new System.Drawing.Font("Courier New", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.cb_DXLoc.ForeColor = System.Drawing.SystemColors.WindowText;
this.cb_DXLoc.FormattingEnabled = true;
this.cb_DXLoc.GeoLocation = gPoint1;
this.cb_DXLoc.Location = new System.Drawing.Point(6, 243);
this.cb_DXLoc.Name = "cb_DXLoc";
this.cb_DXLoc.Precision = 3;
this.cb_DXLoc.SilentItemChange = false;
this.cb_DXLoc.Size = new System.Drawing.Size(133, 24);
this.cb_DXLoc.SmallLettersForSubsquares = true;
this.cb_DXLoc.TabIndex = 63;
this.cb_DXLoc.TextChanged += new System.EventHandler(this.cb_DXLoc_TextChanged);
//
// cb_MyLoc
//
this.cb_MyLoc.AutoLength = false;
this.cb_MyLoc.BackColor = System.Drawing.SystemColors.Window;
this.cb_MyLoc.CharacterCasing = System.Windows.Forms.CharacterCasing.Normal;
this.cb_MyLoc.ErrorBackColor = System.Drawing.Color.Red;
this.cb_MyLoc.ErrorForeColor = System.Drawing.Color.White;
this.cb_MyLoc.Font = new System.Drawing.Font("Courier New", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.cb_MyLoc.ForeColor = System.Drawing.SystemColors.WindowText;
this.cb_MyLoc.FormattingEnabled = true;
this.cb_MyLoc.GeoLocation = gPoint2;
this.cb_MyLoc.Location = new System.Drawing.Point(6, 161);
this.cb_MyLoc.Name = "cb_MyLoc";
this.cb_MyLoc.Precision = 3;
this.cb_MyLoc.SilentItemChange = false;
this.cb_MyLoc.Size = new System.Drawing.Size(133, 24);
this.cb_MyLoc.SmallLettersForSubsquares = true;
this.cb_MyLoc.TabIndex = 62;
this.cb_MyLoc.TextChanged += new System.EventHandler(this.cb_MyLoc_TextChanged);
//
// label8
//
this.label8.AutoSize = true;
this.label8.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Italic, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.label8.Location = new System.Drawing.Point(7, 58);
this.label8.Name = "label8";
this.label8.Size = new System.Drawing.Size(32, 13);
this.label8.TabIndex = 28;
this.label8.Text = "Band";
//
// cb_Band
//
this.cb_Band.AllowDrop = true;
this.cb_Band.BackColor = System.Drawing.Color.FloralWhite;
this.cb_Band.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cb_Band.Font = new System.Drawing.Font("Courier New", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.cb_Band.FormattingEnabled = true;
this.cb_Band.Location = new System.Drawing.Point(6, 74);
this.cb_Band.Name = "cb_Band";
this.cb_Band.Size = new System.Drawing.Size(133, 24);
this.cb_Band.TabIndex = 29;
//
// tb_QTF
//
this.tb_QTF.BackColor = System.Drawing.Color.FloralWhite;
this.tb_QTF.Font = new System.Drawing.Font("Courier New", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.tb_QTF.Location = new System.Drawing.Point(6, 323);
this.tb_QTF.Name = "tb_QTF";
this.tb_QTF.ReadOnly = true;
this.tb_QTF.Size = new System.Drawing.Size(133, 22);
this.tb_QTF.TabIndex = 27;
//
// label6
//
this.label6.AutoSize = true;
this.label6.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Italic, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.label6.Location = new System.Drawing.Point(7, 307);
this.label6.Name = "label6";
this.label6.Size = new System.Drawing.Size(28, 13);
this.label6.TabIndex = 26;
this.label6.Text = "QTF";
//
// tb_QRB
//
this.tb_QRB.BackColor = System.Drawing.Color.FloralWhite;
this.tb_QRB.Font = new System.Drawing.Font("Courier New", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.tb_QRB.Location = new System.Drawing.Point(6, 282);
this.tb_QRB.Name = "tb_QRB";
this.tb_QRB.ReadOnly = true;
this.tb_QRB.Size = new System.Drawing.Size(133, 22);
this.tb_QRB.TabIndex = 25;
//
// label16
//
this.label16.AutoSize = true;
this.label16.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Italic, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.label16.Location = new System.Drawing.Point(7, 266);
this.label16.Name = "label16";
this.label16.Size = new System.Drawing.Size(30, 13);
this.label16.TabIndex = 24;
this.label16.Text = "QRB";
//
// label4
//
this.label4.AutoSize = true;
this.label4.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Italic, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.label4.Location = new System.Drawing.Point(7, 225);
this.label4.Name = "label4";
this.label4.Size = new System.Drawing.Size(44, 15);
this.label4.TabIndex = 22;
this.label4.Text = "DXLoc";
//
// tb_DXCall
//
this.tb_DXCall.BackColor = System.Drawing.SystemColors.Window;
this.tb_DXCall.CharacterCasing = System.Windows.Forms.CharacterCasing.Upper;
this.tb_DXCall.ErrorBackColor = System.Drawing.Color.Red;
this.tb_DXCall.ErrorForeColor = System.Drawing.Color.White;
this.tb_DXCall.Font = new System.Drawing.Font("Courier New", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.tb_DXCall.ForeColor = System.Drawing.SystemColors.WindowText;
this.tb_DXCall.Location = new System.Drawing.Point(6, 202);
this.tb_DXCall.Name = "tb_DXCall";
this.tb_DXCall.Size = new System.Drawing.Size(133, 22);
this.tb_DXCall.TabIndex = 21;
this.tb_DXCall.TextChanged += new System.EventHandler(this.tb_DXCall_TextChanged);
//
// label5
//
this.label5.AutoSize = true;
this.label5.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Italic, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.label5.Location = new System.Drawing.Point(7, 184);
this.label5.Name = "label5";
this.label5.Size = new System.Drawing.Size(45, 15);
this.label5.TabIndex = 20;
this.label5.Text = "DXCall";
//
// label3
//
this.label3.AutoSize = true;
this.label3.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Italic, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.label3.Location = new System.Drawing.Point(7, 143);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(43, 15);
this.label3.TabIndex = 18;
this.label3.Text = "MyLoc";
//
// tb_MyCall
//
this.tb_MyCall.BackColor = System.Drawing.SystemColors.Window;
this.tb_MyCall.CharacterCasing = System.Windows.Forms.CharacterCasing.Upper;
this.tb_MyCall.ErrorBackColor = System.Drawing.Color.Red;
this.tb_MyCall.ErrorForeColor = System.Drawing.Color.White;
this.tb_MyCall.Font = new System.Drawing.Font("Courier New", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.tb_MyCall.ForeColor = System.Drawing.SystemColors.WindowText;
this.tb_MyCall.Location = new System.Drawing.Point(6, 120);
this.tb_MyCall.Name = "tb_MyCall";
this.tb_MyCall.Size = new System.Drawing.Size(133, 22);
this.tb_MyCall.TabIndex = 17;
this.tb_MyCall.TextChanged += new System.EventHandler(this.tb_MyCall_TextChanged);
//
// label2
//
this.label2.AutoSize = true;
this.label2.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Italic, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.label2.Location = new System.Drawing.Point(7, 102);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(44, 15);
this.label2.TabIndex = 16;
this.label2.Text = "MyCall";
//
// label1
//
this.label1.AutoSize = true;
this.label1.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Italic, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.label1.Location = new System.Drawing.Point(7, 17);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(29, 13);
this.label1.TabIndex = 15;
this.label1.Text = "UTC";
//
// tb_UTC
//
this.tb_UTC.BackColor = System.Drawing.Color.LightSalmon;
this.tb_UTC.Font = new System.Drawing.Font("Arial", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.tb_UTC.ForeColor = System.Drawing.Color.White;
this.tb_UTC.Location = new System.Drawing.Point(6, 33);
this.tb_UTC.Name = "tb_UTC";
this.tb_UTC.ReadOnly = true;
this.tb_UTC.Size = new System.Drawing.Size(133, 22);
this.tb_UTC.TabIndex = 14;
//
// gb_Map
//
this.gb_Map.Controls.Add(this.spc_Main);
this.gb_Map.Dock = System.Windows.Forms.DockStyle.Fill;
this.gb_Map.Location = new System.Drawing.Point(0, 24);
this.gb_Map.Name = "gb_Map";
this.gb_Map.Size = new System.Drawing.Size(691, 494);
this.gb_Map.TabIndex = 4;
this.gb_Map.TabStop = false;
this.gb_Map.Text = "Map";
//
// spc_Main
//
this.spc_Main.BackColor = System.Drawing.SystemColors.ControlDark;
this.spc_Main.Dock = System.Windows.Forms.DockStyle.Fill;
this.spc_Main.Location = new System.Drawing.Point(3, 16);
this.spc_Main.Name = "spc_Main";
this.spc_Main.Orientation = System.Windows.Forms.Orientation.Horizontal;
//
// spc_Main.Panel1
//
this.spc_Main.Panel1.BackColor = System.Drawing.SystemColors.ControlDark;
this.spc_Main.Panel1.Controls.Add(this.gm_Main);
this.spc_Main.Panel1.RightToLeft = System.Windows.Forms.RightToLeft.No;
//
// spc_Main.Panel2
//
this.spc_Main.Panel2.BackColor = System.Drawing.SystemColors.ControlDark;
this.spc_Main.Panel2.Controls.Add(this.gb_Path);
this.spc_Main.Panel2.RightToLeft = System.Windows.Forms.RightToLeft.No;
this.spc_Main.Size = new System.Drawing.Size(685, 475);
this.spc_Main.SplitterDistance = 300;
this.spc_Main.TabIndex = 0;
//
// gm_Main
//
this.gm_Main.Bearing = 0F;
this.gm_Main.CanDragMap = true;
this.gm_Main.Dock = System.Windows.Forms.DockStyle.Fill;
this.gm_Main.EmptyTileColor = System.Drawing.Color.Navy;
this.gm_Main.GrayScaleMode = false;
this.gm_Main.HelperLineOption = GMap.NET.WindowsForms.HelperLineOptions.DontShow;
this.gm_Main.LevelsKeepInMemmory = 5;
this.gm_Main.Location = new System.Drawing.Point(0, 0);
this.gm_Main.MarkersEnabled = true;
this.gm_Main.MaxZoom = 2;
this.gm_Main.MinZoom = 2;
this.gm_Main.MouseWheelZoomType = GMap.NET.MouseWheelZoomType.MousePositionAndCenter;
this.gm_Main.Name = "gm_Main";
this.gm_Main.NegativeMode = false;
this.gm_Main.Opacity = 1D;
this.gm_Main.PolygonsEnabled = true;
this.gm_Main.RetryLoadTile = 0;
this.gm_Main.RoutesEnabled = true;
this.gm_Main.SelectedAreaFillColor = System.Drawing.Color.FromArgb(((int)(((byte)(33)))), ((int)(((byte)(65)))), ((int)(((byte)(105)))), ((int)(((byte)(225)))));
this.gm_Main.ShowTileGridLines = false;
this.gm_Main.Size = new System.Drawing.Size(685, 300);
this.gm_Main.TabIndex = 0;
this.gm_Main.Zoom = 0D;
this.gm_Main.OnMarkerClick += new GMap.NET.WindowsForms.MarkerClick(this.gm_Main_OnMarkerClick);
this.gm_Main.OnMapZoomChanged += new GMap.NET.MapZoomChanged(this.gm_Main_OnMapZoomChanged);
//
// gb_Path
//
this.gb_Path.Dock = System.Windows.Forms.DockStyle.Fill;
this.gb_Path.Location = new System.Drawing.Point(0, 0);
this.gb_Path.Name = "gb_Path";
this.gb_Path.Size = new System.Drawing.Size(685, 171);
this.gb_Path.TabIndex = 0;
this.gb_Path.TabStop = false;
this.gb_Path.Text = "Path";
this.gb_Path.Resize += new System.EventHandler(this.gb_Path_Resize);
//
// ti_Progress
//
this.ti_Progress.Enabled = true;
this.ti_Progress.Interval = 1000;
this.ti_Progress.Tick += new System.EventHandler(this.ti_Progress_Tick);
//
// ti_Startup
//
this.ti_Startup.Enabled = true;
this.ti_Startup.Interval = 1000;
this.ti_Startup.Tick += new System.EventHandler(this.ti_Startup_Tick);
//
// il_Planes_H
//
this.il_Planes_H.ColorDepth = System.Windows.Forms.ColorDepth.Depth24Bit;
this.il_Planes_H.ImageSize = new System.Drawing.Size(36, 36);
this.il_Planes_H.TransparentColor = System.Drawing.Color.Transparent;
//
// il_Planes_L
//
this.il_Planes_L.ColorDepth = System.Windows.Forms.ColorDepth.Depth24Bit;
this.il_Planes_L.ImageSize = new System.Drawing.Size(16, 16);
this.il_Planes_L.TransparentColor = System.Drawing.Color.Transparent;
//
// il_Planes_S
//
this.il_Planes_S.ColorDepth = System.Windows.Forms.ColorDepth.Depth24Bit;
this.il_Planes_S.ImageSize = new System.Drawing.Size(48, 48);
this.il_Planes_S.TransparentColor = System.Drawing.Color.Transparent;
//
// il_Airports
//
this.il_Airports.ColorDepth = System.Windows.Forms.ColorDepth.Depth24Bit;
this.il_Airports.ImageSize = new System.Drawing.Size(16, 16);
this.il_Airports.TransparentColor = System.Drawing.Color.Transparent;
//
// il_Planes_M
//
this.il_Planes_M.ColorDepth = System.Windows.Forms.ColorDepth.Depth24Bit;
this.il_Planes_M.ImageSize = new System.Drawing.Size(24, 24);
this.il_Planes_M.TransparentColor = System.Drawing.Color.Transparent;
//
// ti_ShowLegends
//
this.ti_ShowLegends.Enabled = true;
this.ti_ShowLegends.Interval = 5000;
this.ti_ShowLegends.Tick += new System.EventHandler(this.ti_ShowLegends_Tick);
//
// MapViewDlg
//
this.AcceptButton = this.btn_Map_PlayPause;
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(836, 540);
this.Controls.Add(this.gb_Map);
this.Controls.Add(this.gb_Info);
this.Controls.Add(this.ss_Main);
this.Controls.Add(this.mnu_Main);
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.MainMenuStrip = this.mnu_Main;
this.Name = "MapViewDlg";
this.Text = "AirScoutViewClient";
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.MapViewDlg_FormClosing);
this.Load += new System.EventHandler(this.MapViewDlg_Load);
this.mnu_Main.ResumeLayout(false);
this.mnu_Main.PerformLayout();
this.ss_Main.ResumeLayout(false);
this.ss_Main.PerformLayout();
this.gb_Info.ResumeLayout(false);
this.gb_Info.PerformLayout();
this.gb_Map_Zoom.ResumeLayout(false);
this.pa_Map_Zoom.ResumeLayout(false);
this.pa_Map_Zoom.PerformLayout();
this.gb_Control.ResumeLayout(false);
this.gb_Map.ResumeLayout(false);
this.spc_Main.Panel1.ResumeLayout(false);
this.spc_Main.Panel2.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.spc_Main)).EndInit();
this.spc_Main.ResumeLayout(false);
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.MenuStrip mnu_Main;
private System.Windows.Forms.ToolStripMenuItem tsi_Exit;
private System.Windows.Forms.ToolStripMenuItem tsi_Info;
private System.Windows.Forms.StatusStrip ss_Main;
private System.Windows.Forms.ToolStripStatusLabel tsl_Status;
private System.Windows.Forms.ToolStripMenuItem mnu_Settings;
private System.Windows.Forms.GroupBox gb_Info;
private System.Windows.Forms.GroupBox gb_Map;
private System.Windows.Forms.Timer ti_Progress;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.TextBox tb_UTC;
private ScoutBase.Core.CallsignTextBox tb_MyCall;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.Label label4;
private ScoutBase.Core.CallsignTextBox tb_DXCall;
private System.Windows.Forms.Label label5;
private System.Windows.Forms.TextBox tb_QTF;
private System.Windows.Forms.Label label6;
private System.Windows.Forms.TextBox tb_QRB;
private System.Windows.Forms.Label label16;
private System.Windows.Forms.Label label8;
private System.Windows.Forms.ComboBox cb_Band;
private System.Windows.Forms.SplitContainer spc_Main;
private GMap.NET.WindowsForms.GMapControl gm_Main;
private System.Windows.Forms.Timer ti_Startup;
public System.Windows.Forms.ImageList il_Planes_H;
public System.Windows.Forms.ImageList il_Planes_L;
public System.Windows.Forms.ImageList il_Planes_S;
public System.Windows.Forms.ImageList il_Airports;
public System.Windows.Forms.ImageList il_Planes_M;
private System.Windows.Forms.GroupBox gb_Path;
private System.Windows.Forms.Timer ti_ShowLegends;
private ScoutBase.Core.LocatorComboBox cb_DXLoc;
private ScoutBase.Core.LocatorComboBox cb_MyLoc;
private System.Windows.Forms.GroupBox gb_Control;
private System.Windows.Forms.Button btn_Map_PlayPause;
private System.Windows.Forms.ImageList il_Main;
private System.Windows.Forms.GroupBox gb_Map_Zoom;
private System.Windows.Forms.Panel pa_Map_Zoom;
private System.Windows.Forms.CheckBox cb_Map_AutoCenter;
private System.Windows.Forms.TextBox tb_Map_Zoom;
private System.Windows.Forms.Button btn_Map_Zoom_Out;
private System.Windows.Forms.Button btn_Map_Zoom_In;
private System.Windows.Forms.ToolStripStatusLabel tsl_ConnectionStatus;
}
}

Wyświetl plik

@ -141,7 +141,7 @@ namespace AirScoutViewClient
SortedList<string, PlaneInfo> ActivePlanes = new SortedList<string, PlaneInfo>();
private List<string> SelectedPlanes = new List<string>();
private VIEWCLIENTSTATUS ViewClientStatus = VIEWCLIENTSTATUS.NONE;
private VIEWCLIENTSTATUS VieClientStatus = VIEWCLIENTSTATUS.NONE;
[CategoryAttribute("Directories")]
[DescriptionAttribute("Application Directory")]
@ -268,7 +268,7 @@ namespace AirScoutViewClient
BAND band = Properties.Settings.Default.Band;
cb_Band.SelectedItem = Bands.GetStringValue(band);
PlayMode = AIRSCOUTPLAYMODE.PAUSE;
ViewClientStatus = VIEWCLIENTSTATUS.CONNECTED;
VieClientStatus = VIEWCLIENTSTATUS.CONNECTED;
UpdateStatus();
Say("");
}
@ -630,7 +630,7 @@ namespace AirScoutViewClient
json = GetJSONFromURL(GetServerURL(Properties.Settings.Default.Server_URL, (int)Properties.Settings.Default.Server_Port, "settings.json"));
if (String.IsNullOrEmpty(json))
{
ViewClientStatus = VIEWCLIENTSTATUS.CONNECTING;
VieClientStatus = VIEWCLIENTSTATUS.CONNECTING;
return false;
}
if (json.StartsWith("Error:"))
@ -696,7 +696,7 @@ namespace AirScoutViewClient
json = GetJSONFromURL(url);
if (String.IsNullOrEmpty(json))
{
ViewClientStatus = VIEWCLIENTSTATUS.CONNECTING;
VieClientStatus = VIEWCLIENTSTATUS.CONNECTING;
return null;
}
if (json.StartsWith("Error:"))
@ -734,7 +734,7 @@ namespace AirScoutViewClient
json = GetJSONFromURL(url);
if (String.IsNullOrEmpty(json))
{
ViewClientStatus = VIEWCLIENTSTATUS.CONNECTING;
VieClientStatus = VIEWCLIENTSTATUS.CONNECTING;
return null;
}
if (json.StartsWith("Error:"))
@ -767,7 +767,7 @@ namespace AirScoutViewClient
json = GetJSONFromURL(url);
if (String.IsNullOrEmpty(json))
{
ViewClientStatus = VIEWCLIENTSTATUS.CONNECTING;
VieClientStatus = VIEWCLIENTSTATUS.CONNECTING;
return null;
}
if (json.StartsWith("Error:"))
@ -805,7 +805,7 @@ namespace AirScoutViewClient
json = GetJSONFromURL(url);
if (String.IsNullOrEmpty(json))
{
ViewClientStatus = VIEWCLIENTSTATUS.CONNECTING;
VieClientStatus = VIEWCLIENTSTATUS.CONNECTING;
return null;
}
if (json.StartsWith("Error:"))
@ -838,7 +838,7 @@ namespace AirScoutViewClient
"&dxloc=" + MaidenheadLocator.LocFromLatLon(Properties.Settings.Default.DXLat, Properties.Settings.Default.DXLon, false, 3)));
if (String.IsNullOrEmpty(json))
{
ViewClientStatus = VIEWCLIENTSTATUS.CONNECTING;
VieClientStatus = VIEWCLIENTSTATUS.CONNECTING;
return null;
}
if (json.StartsWith("Error:"))
@ -871,7 +871,7 @@ namespace AirScoutViewClient
"&dxloc=" + MaidenheadLocator.LocFromLatLon(Properties.Settings.Default.DXLat, Properties.Settings.Default.DXLon, false, 3)));
if (String.IsNullOrEmpty(json))
{
ViewClientStatus = VIEWCLIENTSTATUS.CONNECTING;
VieClientStatus = VIEWCLIENTSTATUS.CONNECTING;
return null;
}
if (json.StartsWith("Error:"))
@ -905,7 +905,7 @@ namespace AirScoutViewClient
"&dxloc=" + MaidenheadLocator.LocFromLatLon(Properties.Settings.Default.DXLat, Properties.Settings.Default.DXLon, false, 3)));
if (String.IsNullOrEmpty(json))
{
ViewClientStatus = VIEWCLIENTSTATUS.CONNECTING;
VieClientStatus = VIEWCLIENTSTATUS.CONNECTING;
return null;
}
if (json.StartsWith("Error:"))
@ -1385,8 +1385,8 @@ namespace AirScoutViewClient
private void ti_Progress_Tick(object sender, EventArgs e)
{
tsl_ConnectionStatus.Text = ViewClientStatus.ToString();
switch (ViewClientStatus)
tsl_ConnectionStatus.Text = VieClientStatus.ToString();
switch (VieClientStatus)
{
case VIEWCLIENTSTATUS.CONNECTING:
{
@ -1423,13 +1423,21 @@ namespace AirScoutViewClient
private void MapViewDlg_Load(object sender, EventArgs e)
{
ViewClientStatus = VIEWCLIENTSTATUS.INIT;
InitializeIcons();
InitializeCharts();
this.Text = "AirScout View Client V" + Application.ProductVersion;
this.Show();
this.Restart();
}
private void Restart()
{
ti_Progress.Stop();
ti_Startup.Stop();
VieClientStatus = VIEWCLIENTSTATUS.INIT;
InitializeIcons();
InitializeCharts();
ti_Progress.Start();
ViewClientStatus = VIEWCLIENTSTATUS.CONNECTING;
VieClientStatus = VIEWCLIENTSTATUS.CONNECTING;
}
private void tsi_Exit_Click(object sender, EventArgs e)
@ -1724,18 +1732,13 @@ namespace AirScoutViewClient
}
private void mnu_Settings_Click(object sender, EventArgs e)
private void tsi_Settings_Click(object sender, EventArgs e)
{
SettingsDlg Dlg = new SettingsDlg();
if (Dlg.ShowDialog() == DialogResult.OK)
{
Properties.Settings.Default.Save();
ViewClientStatus = VIEWCLIENTSTATUS.INIT;
InitializeSettings();
}
else
{
Properties.Settings.Default.Reload();
this.Restart();
}
}
}

Wyświetl plik

@ -28,113 +28,78 @@
/// </summary>
private void InitializeComponent()
{
this.groupBox1 = new System.Windows.Forms.GroupBox();
this.ud_Settings_Server_Port = new System.Windows.Forms.NumericUpDown();
this.tb_Settings_Server_URL = new System.Windows.Forms.TextBox();
this.label2 = new System.Windows.Forms.Label();
this.label1 = new System.Windows.Forms.Label();
this.btn_OK = new System.Windows.Forms.Button();
this.groupBox1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.ud_Settings_Server_Port)).BeginInit();
this.tb_Server_URL = new System.Windows.Forms.TextBox();
this.label2 = new System.Windows.Forms.Label();
this.ud_Server_Port = new System.Windows.Forms.NumericUpDown();
((System.ComponentModel.ISupportInitialize)(this.ud_Server_Port)).BeginInit();
this.SuspendLayout();
//
// groupBox1
//
this.groupBox1.Controls.Add(this.ud_Settings_Server_Port);
this.groupBox1.Controls.Add(this.tb_Settings_Server_URL);
this.groupBox1.Controls.Add(this.label2);
this.groupBox1.Controls.Add(this.label1);
this.groupBox1.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, ((System.Drawing.FontStyle)((System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Italic))), System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.groupBox1.Location = new System.Drawing.Point(12, 12);
this.groupBox1.Name = "groupBox1";
this.groupBox1.Size = new System.Drawing.Size(266, 103);
this.groupBox1.TabIndex = 0;
this.groupBox1.TabStop = false;
this.groupBox1.Text = "Connection Settings";
//
// ud_Settings_Server_Port
//
this.ud_Settings_Server_Port.DataBindings.Add(new System.Windows.Forms.Binding("Value", global::AirScoutViewClient.Properties.Settings.Default, "Server_Port", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.ud_Settings_Server_Port.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.ud_Settings_Server_Port.Location = new System.Drawing.Point(91, 57);
this.ud_Settings_Server_Port.Maximum = new decimal(new int[] {
65535,
0,
0,
0});
this.ud_Settings_Server_Port.Minimum = new decimal(new int[] {
1,
0,
0,
0});
this.ud_Settings_Server_Port.Name = "ud_Settings_Server_Port";
this.ud_Settings_Server_Port.Size = new System.Drawing.Size(76, 20);
this.ud_Settings_Server_Port.TabIndex = 3;
this.ud_Settings_Server_Port.Value = global::AirScoutViewClient.Properties.Settings.Default.Server_Port;
//
// tb_Settings_Server_URL
//
this.tb_Settings_Server_URL.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::AirScoutViewClient.Properties.Settings.Default, "Server_URL", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.tb_Settings_Server_URL.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.tb_Settings_Server_URL.Location = new System.Drawing.Point(91, 24);
this.tb_Settings_Server_URL.Name = "tb_Settings_Server_URL";
this.tb_Settings_Server_URL.Size = new System.Drawing.Size(138, 20);
this.tb_Settings_Server_URL.TabIndex = 2;
this.tb_Settings_Server_URL.Text = global::AirScoutViewClient.Properties.Settings.Default.Server_URL;
//
// label2
//
this.label2.AutoSize = true;
this.label2.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.label2.Location = new System.Drawing.Point(6, 59);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(69, 13);
this.label2.TabIndex = 1;
this.label2.Text = "Server - Port:";
//
// label1
//
this.label1.AutoSize = true;
this.label1.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.label1.Location = new System.Drawing.Point(6, 27);
this.label1.Location = new System.Drawing.Point(12, 23);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(60, 13);
this.label1.Size = new System.Drawing.Size(66, 13);
this.label1.TabIndex = 0;
this.label1.Text = "Server - IP:";
this.label1.Text = "Server-URL:";
//
// btn_OK
// tb_Server_URL
//
this.btn_OK.DialogResult = System.Windows.Forms.DialogResult.OK;
this.btn_OK.Location = new System.Drawing.Point(12, 134);
this.btn_OK.Name = "btn_OK";
this.btn_OK.Size = new System.Drawing.Size(266, 23);
this.btn_OK.TabIndex = 1;
this.btn_OK.Text = "OK";
this.btn_OK.UseVisualStyleBackColor = true;
this.tb_Server_URL.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::AirScoutViewClient.Properties.Settings.Default, "Server_URL", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.tb_Server_URL.Location = new System.Drawing.Point(84, 20);
this.tb_Server_URL.Name = "tb_Server_URL";
this.tb_Server_URL.Size = new System.Drawing.Size(208, 20);
this.tb_Server_URL.TabIndex = 1;
this.tb_Server_URL.Text = global::AirScoutViewClient.Properties.Settings.Default.Server_URL;
//
// label2
//
this.label2.AutoSize = true;
this.label2.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.label2.Location = new System.Drawing.Point(12, 48);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(63, 13);
this.label2.TabIndex = 4;
this.label2.Text = "Server-Port:";
//
// ud_Server_Port
//
this.ud_Server_Port.DataBindings.Add(new System.Windows.Forms.Binding("Value", global::AirScoutViewClient.Properties.Settings.Default, "Server_Port", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.ud_Server_Port.Location = new System.Drawing.Point(84, 46);
this.ud_Server_Port.Maximum = new decimal(new int[] {
65535,
0,
0,
0});
this.ud_Server_Port.Name = "ud_Server_Port";
this.ud_Server_Port.Size = new System.Drawing.Size(79, 20);
this.ud_Server_Port.TabIndex = 5;
this.ud_Server_Port.Value = global::AirScoutViewClient.Properties.Settings.Default.Server_Port;
//
// SettingsDlg
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(298, 169);
this.Controls.Add(this.btn_OK);
this.Controls.Add(this.groupBox1);
this.ClientSize = new System.Drawing.Size(304, 83);
this.Controls.Add(this.ud_Server_Port);
this.Controls.Add(this.label2);
this.Controls.Add(this.tb_Server_URL);
this.Controls.Add(this.label1);
this.Name = "SettingsDlg";
this.Text = "AirScout View Client Settings";
this.groupBox1.ResumeLayout(false);
this.groupBox1.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.ud_Settings_Server_Port)).EndInit();
this.Text = "Settings";
((System.ComponentModel.ISupportInitialize)(this.ud_Server_Port)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.GroupBox groupBox1;
private System.Windows.Forms.TextBox tb_Settings_Server_URL;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.NumericUpDown ud_Settings_Server_Port;
private System.Windows.Forms.Button btn_OK;
private System.Windows.Forms.TextBox tb_Server_URL;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.NumericUpDown ud_Server_Port;
}
}

Wyświetl plik

@ -0,0 +1,140 @@
namespace AirScoutViewClient
{
partial class SettingsDlg
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.groupBox1 = new System.Windows.Forms.GroupBox();
this.ud_Settings_Server_Port = new System.Windows.Forms.NumericUpDown();
this.tb_Settings_Server_URL = new System.Windows.Forms.TextBox();
this.label2 = new System.Windows.Forms.Label();
this.label1 = new System.Windows.Forms.Label();
this.btn_OK = new System.Windows.Forms.Button();
this.groupBox1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.ud_Settings_Server_Port)).BeginInit();
this.SuspendLayout();
//
// groupBox1
//
this.groupBox1.Controls.Add(this.ud_Settings_Server_Port);
this.groupBox1.Controls.Add(this.tb_Settings_Server_URL);
this.groupBox1.Controls.Add(this.label2);
this.groupBox1.Controls.Add(this.label1);
this.groupBox1.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, ((System.Drawing.FontStyle)((System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Italic))), System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.groupBox1.Location = new System.Drawing.Point(12, 12);
this.groupBox1.Name = "groupBox1";
this.groupBox1.Size = new System.Drawing.Size(266, 103);
this.groupBox1.TabIndex = 0;
this.groupBox1.TabStop = false;
this.groupBox1.Text = "Connection Settings";
//
// ud_Settings_Server_Port
//
this.ud_Settings_Server_Port.DataBindings.Add(new System.Windows.Forms.Binding("Value", global::AirScoutViewClient.Properties.Settings.Default, "Server_Port", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.ud_Settings_Server_Port.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.ud_Settings_Server_Port.Location = new System.Drawing.Point(91, 57);
this.ud_Settings_Server_Port.Maximum = new decimal(new int[] {
65535,
0,
0,
0});
this.ud_Settings_Server_Port.Minimum = new decimal(new int[] {
1,
0,
0,
0});
this.ud_Settings_Server_Port.Name = "ud_Settings_Server_Port";
this.ud_Settings_Server_Port.Size = new System.Drawing.Size(76, 20);
this.ud_Settings_Server_Port.TabIndex = 3;
this.ud_Settings_Server_Port.Value = global::AirScoutViewClient.Properties.Settings.Default.Server_Port;
//
// tb_Settings_Server_URL
//
this.tb_Settings_Server_URL.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::AirScoutViewClient.Properties.Settings.Default, "Server_URL", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.tb_Settings_Server_URL.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.tb_Settings_Server_URL.Location = new System.Drawing.Point(91, 24);
this.tb_Settings_Server_URL.Name = "tb_Settings_Server_URL";
this.tb_Settings_Server_URL.Size = new System.Drawing.Size(138, 20);
this.tb_Settings_Server_URL.TabIndex = 2;
this.tb_Settings_Server_URL.Text = global::AirScoutViewClient.Properties.Settings.Default.Server_URL;
//
// label2
//
this.label2.AutoSize = true;
this.label2.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.label2.Location = new System.Drawing.Point(6, 59);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(69, 13);
this.label2.TabIndex = 1;
this.label2.Text = "Server - Port:";
//
// label1
//
this.label1.AutoSize = true;
this.label1.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.label1.Location = new System.Drawing.Point(6, 27);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(60, 13);
this.label1.TabIndex = 0;
this.label1.Text = "Server - IP:";
//
// btn_OK
//
this.btn_OK.DialogResult = System.Windows.Forms.DialogResult.OK;
this.btn_OK.Location = new System.Drawing.Point(12, 134);
this.btn_OK.Name = "btn_OK";
this.btn_OK.Size = new System.Drawing.Size(266, 23);
this.btn_OK.TabIndex = 1;
this.btn_OK.Text = "OK";
this.btn_OK.UseVisualStyleBackColor = true;
//
// SettingsDlg
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(298, 169);
this.Controls.Add(this.btn_OK);
this.Controls.Add(this.groupBox1);
this.Name = "SettingsDlg";
this.Text = "AirScout View Client Settings";
this.groupBox1.ResumeLayout(false);
this.groupBox1.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.ud_Settings_Server_Port)).EndInit();
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.GroupBox groupBox1;
private System.Windows.Forms.TextBox tb_Settings_Server_URL;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.NumericUpDown ud_Settings_Server_Port;
private System.Windows.Forms.Button btn_OK;
}
}

Wyświetl plik

@ -1,6 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Newtonsoft.Json" version="12.0.3" targetFramework="net40" />
<package id="Stub.System.Data.SQLite.Core.NetFramework" version="1.0.113.3" targetFramework="net40" />
<package id="System.Data.SQLite.Core" version="1.0.113.7" targetFramework="net40" />
<package id="Newtonsoft.Json" version="13.0.1" targetFramework="net40" />
</packages>

Wyświetl plik

@ -338,7 +338,7 @@ namespace AquaControls
//Draw Colored Rim
Pen colorPen = new Pen(Color.FromArgb(190, Color.Gainsboro), this.Width / 40);
Pen blackPen = new Pen(Color.FromArgb(250, Color.Black), this.Width / 200);
Pen blackPen = new Pen(Color.FromArgb(250, this.ForeColor), this.Width / 200);
// int gap = (int)(this.Width * 0.03F);
int gap = 0;
Rectangle rectg = new Rectangle(rectImg.X + gap, rectImg.Y + gap, rectImg.Width - gap * 2, rectImg.Height - gap * 2);
@ -440,7 +440,7 @@ namespace AquaControls
pts[3].X = (float)(cx + (this.Width * .09F) * Math.Cos(angle));
pts[3].Y = (float)(cy + (this.Width * .09F) * Math.Sin(angle));
Brush pointer = new SolidBrush(Color.Black);
Brush pointer = new SolidBrush(this.ForeColor);
g.FillPolygon(pointer, pts);
PointF[] shinePts = new PointF[3];
@ -455,7 +455,7 @@ namespace AquaControls
shinePts[2].X = cx;
shinePts[2].Y = cy;
LinearGradientBrush gpointer = new LinearGradientBrush(shinePts[0], shinePts[2], Color.SlateGray, Color.Black);
LinearGradientBrush gpointer = new LinearGradientBrush(shinePts[0], shinePts[2], Color.SlateGray, this.ForeColor);
g.FillPolygon(gpointer, shinePts);
Rectangle rect = new Rectangle(x, y, width, height);
@ -512,11 +512,11 @@ namespace AquaControls
float shift = Width / 5;
Rectangle rect = new Rectangle(this.x, this.y, width, height);
RectangleF rectangle = new RectangleF(cX - (shift / 2), cY - (shift / 2), shift, shift);
LinearGradientBrush brush = new LinearGradientBrush(rect, Color.Black, Color.FromArgb(100,this.dialColor), LinearGradientMode.Vertical);
LinearGradientBrush brush = new LinearGradientBrush(rect, this.ForeColor, Color.FromArgb(100,this.dialColor), LinearGradientMode.Vertical);
g.FillEllipse(brush, rectangle);
shift = Width / 7;
rectangle = new RectangleF(cX - (shift / 2), cY - (shift / 2), shift, shift);
brush = new LinearGradientBrush(rect, Color.SlateGray, Color.Black, LinearGradientMode.ForwardDiagonal);
brush = new LinearGradientBrush(rect, Color.SlateGray, this.ForeColor, LinearGradientMode.ForwardDiagonal);
g.FillEllipse(brush, rectangle);
}
@ -546,8 +546,8 @@ namespace AquaControls
float totalAngle = toAngle - fromAngle;
float incr = GetRadian(((totalAngle) / ((noOfParts - 1) * (noOfIntermediates + 1))));
Pen thickPen = new Pen(Color.Black, Width/50);
Pen thinPen = new Pen(Color.Black, Width/100);
Pen thickPen = new Pen(this.ForeColor, Width/50);
Pen thinPen = new Pen(this.ForeColor, Width/100);
float rulerValue = MinValue;
for (int i = 0; i <= noOfParts; i++)
{
@ -660,63 +660,98 @@ namespace AquaControls
/// <param name="height"></param>
private void DrawDigit(Graphics g, int number, PointF position, bool dp, float height)
{
float width;
width = 10F * height/13;
Pen outline = new Pen(Color.FromArgb(40, this.dialColor));
Pen fillPen = new Pen(Color.Black);
// calculate widths and heights
float width, thickwidth, halfthickwidth, thickheight, halfthickheight;
width = 10F * height/13.0F;
thickwidth = 1.6F;
halfthickwidth = thickwidth / 2.0F;
thickheight = thickwidth * width / height;
halfthickheight = thickheight / 2.0F;
// get pens
Pen outline = new Pen(Color.FromArgb(30, this.ForeColor));
Pen fillPen = new Pen(this.ForeColor);
// keep old graphics settings
Matrix oldtrans = g.Transform;
SmoothingMode oldsmooth = g.SmoothingMode;
PixelOffsetMode oldpixel = g.PixelOffsetMode;
g.SmoothingMode = SmoothingMode.AntiAlias;
g.PixelOffsetMode = PixelOffsetMode.Default;
#region Form Polygon Points
//Segment A
PointF[] segmentA = new PointF[5];
segmentA[0] = segmentA[4] = new PointF(position.X + GetX(2.8F, width), position.Y + GetY(1F, height));
segmentA[1] = new PointF(position.X + GetX(10, width), position.Y + GetY(1F, height));
segmentA[2] = new PointF(position.X + GetX(8.8F, width), position.Y + GetY(2F, height));
segmentA[3] = new PointF(position.X + GetX(3.8F, width), position.Y + GetY(2F, height));
PointF[] segmentA = new PointF[7];
segmentA[0] = segmentA[6] = new PointF(position.X + GetX(1.2F + halfthickwidth, width), position.Y + GetY(1F + halfthickwidth, height));
segmentA[1] = new PointF(position.X + GetX(1.2F + thickwidth, width), position.Y + GetY(1F, height));
segmentA[2] = new PointF(position.X + GetX(7.8F - thickwidth, width), position.Y + GetY(1F, height));
segmentA[3] = new PointF(position.X + GetX(7.8F - halfthickwidth, width), position.Y + GetY(1F + halfthickheight, height));
segmentA[4] = new PointF(position.X + GetX(7.8F - thickwidth, width), position.Y + GetY(1F + thickheight, height));
segmentA[5] = new PointF(position.X + GetX(1.2F + thickwidth, width), position.Y + GetY(1F + thickheight, height));
//Segment B
PointF[] segmentB = new PointF[5];
segmentB[0] = segmentB[4] = new PointF(position.X + GetX(10, width), position.Y + GetY(1.4F, height));
segmentB[1] = new PointF(position.X + GetX(9.3F, width), position.Y + GetY(6.8F, height));
segmentB[2] = new PointF(position.X + GetX(8.4F, width), position.Y + GetY(6.4F, height));
segmentB[3] = new PointF(position.X + GetX(9F, width), position.Y + GetY(2.2F, height));
PointF[] segmentB = new PointF[7];
segmentB[0] = segmentB[6] = new PointF(position.X + GetX(8F - thickwidth, width), position.Y + GetY(1.2F + thickheight, height));
segmentB[1] = new PointF(position.X + GetX(8F - halfthickwidth, width), position.Y + GetY(1.2F + halfthickheight, height));
segmentB[2] = new PointF(position.X + GetX(8F, width), position.Y + GetY(1.2F + thickheight, height));
segmentB[3] = new PointF(position.X + GetX(8F, width), position.Y + GetY(6.8F, height));
segmentB[4] = new PointF(position.X + GetX(8F - halfthickwidth, width), position.Y + GetY(6.8F, height));
segmentB[5] = new PointF(position.X + GetX(8F - thickwidth, width), position.Y + GetY(6.8F - halfthickheight, height));
//Segment C
PointF[] segmentC = new PointF[5];
segmentC[0] = segmentC[4] = new PointF(position.X + GetX(9.2F, width), position.Y + GetY(7.2F, height));
segmentC[1] = new PointF(position.X + GetX(8.7F, width), position.Y + GetY(12.7F, height));
segmentC[2] = new PointF(position.X + GetX(7.6F, width), position.Y + GetY(11.9F, height));
segmentC[3] = new PointF(position.X + GetX(8.2F, width), position.Y + GetY(7.7F, height));
PointF[] segmentC = new PointF[7];
segmentC[0] = segmentC[6] = new PointF(position.X + GetX(8F - thickwidth, width), position.Y + GetY(7.2F + halfthickheight, height));
segmentC[1] = new PointF(position.X + GetX(8F - halfthickwidth, width), position.Y + GetY(7.2F, height));
segmentC[2] = new PointF(position.X + GetX(8F, width), position.Y + GetY(7.2F, height));
segmentC[3] = new PointF(position.X + GetX(8F, width), position.Y + GetY(12.8F - thickheight, height));
segmentC[4] = new PointF(position.X + GetX(8F - halfthickwidth, width), position.Y + GetY(12.8F - halfthickheight, height));
segmentC[5] = new PointF(position.X + GetX(8F - thickwidth, width), position.Y + GetY(12.8F - thickheight, height));
//Segment D
PointF[] segmentD = new PointF[5];
segmentD[0] = segmentD[4] = new PointF(position.X + GetX(7.4F, width), position.Y + GetY(12.1F, height));
segmentD[1] = new PointF(position.X + GetX(8.4F, width), position.Y + GetY(13F, height));
segmentD[2] = new PointF(position.X + GetX(1.3F, width), position.Y + GetY(13F, height));
segmentD[3] = new PointF(position.X + GetX(2.2F, width), position.Y + GetY(12.1F, height));
PointF[] segmentD = new PointF[7];
segmentD[0] = segmentD[6] = new PointF(position.X + GetX(1.2F + halfthickwidth, width), position.Y + GetY(13F - halfthickheight, height));
segmentD[1] = new PointF(position.X + GetX(1.2F + thickwidth, width), position.Y + GetY(13F - thickheight, height));
segmentD[2] = new PointF(position.X + GetX(7.8F - thickwidth, width), position.Y + GetY(13F - thickheight, height));
segmentD[3] = new PointF(position.X + GetX(7.8F - halfthickwidth, width), position.Y + GetY(13F - halfthickheight, height));
segmentD[4] = new PointF(position.X + GetX(7.8F - thickwidth, width), position.Y + GetY(13F, height));
segmentD[5] = new PointF(position.X + GetX(1.2F + thickwidth, width), position.Y + GetY(13F, height));
//Segment E
PointF[] segmentE = new PointF[5];
segmentE[0] = segmentE[4] = new PointF(position.X + GetX(2.2F, width), position.Y + GetY(11.8F, height));
segmentE[1] = new PointF(position.X + GetX(1F, width), position.Y + GetY(12.7F, height));
segmentE[2] = new PointF(position.X + GetX(1.7F, width), position.Y + GetY(7.2F, height));
segmentE[3] = new PointF(position.X + GetX(2.8F, width), position.Y + GetY(7.7F, height));
PointF[] segmentE = new PointF[7];
segmentE[0] = segmentE[6] = new PointF(position.X + GetX(1F, width), position.Y + GetY(7.2F, height));
segmentE[1] = new PointF(position.X + GetX(1F + halfthickwidth, width), position.Y + GetY(7.2F, height));
segmentE[2] = new PointF(position.X + GetX(1F + thickwidth, width), position.Y + GetY(7.2F + halfthickheight, height));
segmentE[3] = new PointF(position.X + GetX(1F + thickwidth, width), position.Y + GetY(12.8F - thickheight, height));
segmentE[4] = new PointF(position.X + GetX(1F + halfthickwidth, width), position.Y + GetY(12.8F - halfthickheight, height));
segmentE[5] = new PointF(position.X + GetX(1F, width), position.Y + GetY(12.8F - thickheight, height));
//Segment F
PointF[] segmentF = new PointF[5];
segmentF[0] = segmentF[4] = new PointF(position.X + GetX(3F, width), position.Y + GetY(6.4F, height));
segmentF[1] = new PointF(position.X + GetX(1.8F, width), position.Y + GetY(6.8F, height));
segmentF[2] = new PointF(position.X + GetX(2.6F, width), position.Y + GetY(1.3F, height));
segmentF[3] = new PointF(position.X + GetX(3.6F, width), position.Y + GetY(2.2F, height));
PointF[] segmentF = new PointF[7];
segmentF[0] = segmentF[6] = new PointF(position.X + GetX(1F, width), position.Y + GetY(1.2F + thickheight, height));
segmentF[1] = new PointF(position.X + GetX(1F + halfthickwidth, width), position.Y + GetY(1.2F + halfthickheight, height));
segmentF[2] = new PointF(position.X + GetX(1F + thickwidth, width), position.Y + GetY(1.2F + thickheight, height));
segmentF[3] = new PointF(position.X + GetX(1F + thickwidth, width), position.Y + GetY(6.8F - halfthickheight, height));
segmentF[4] = new PointF(position.X + GetX(1F + halfthickwidth, width), position.Y + GetY(7F, height));
segmentF[5] = new PointF(position.X + GetX(1F, width), position.Y + GetY(7F, height));
//Segment G
PointF[] segmentG = new PointF[7];
segmentG[0] = segmentG[6] = new PointF(position.X + GetX(2F, width), position.Y + GetY(7F, height));
segmentG[1] = new PointF(position.X + GetX(3.1F, width), position.Y + GetY(6.5F, height));
segmentG[2] = new PointF(position.X + GetX(8.3F, width), position.Y + GetY(6.5F, height));
segmentG[3] = new PointF(position.X + GetX(9F, width), position.Y + GetY(7F, height));
segmentG[4] = new PointF(position.X + GetX(8.2F, width), position.Y + GetY(7.5F, height));
segmentG[5] = new PointF(position.X + GetX(2.9F, width), position.Y + GetY(7.5F, height));
segmentG[0] = segmentG[6] = new PointF(position.X + GetX(1F + halfthickwidth, width), position.Y + GetY(7F, height));
segmentG[1] = new PointF(position.X + GetX(1F + thickwidth, width), position.Y + GetY(7F - halfthickheight, height));
segmentG[2] = new PointF(position.X + GetX(8F - thickwidth, width), position.Y + GetY(7F - halfthickheight, height));
segmentG[3] = new PointF(position.X + GetX(8F - halfthickwidth, width), position.Y + GetY(7F, height));
segmentG[4] = new PointF(position.X + GetX(8F - thickwidth, width), position.Y + GetY(7F + halfthickheight, height));
segmentG[5] = new PointF(position.X + GetX(1F + thickwidth, width), position.Y + GetY(7F + halfthickheight, height));
// Shear display
using (Matrix m = new Matrix())
{
m.Translate(position.X, position.Y);
m.Shear(-0.15F, 0.0F);
m.Translate(-position.X, -position.Y);
g.Transform = m;
}
//Segment DP
#endregion
@ -784,6 +819,11 @@ namespace AquaControls
width/7,
width/7));
}
// restore graphics settings
g.Transform = oldtrans;
g.SmoothingMode = oldsmooth;
g.PixelOffsetMode = oldpixel;
}
/// <summary>

Wyświetl plik

@ -37,14 +37,8 @@
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.12.0.3\lib\net40\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Data" />
<Reference Include="System.Data.SQLite, Version=1.0.113.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=MSIL">
<HintPath>..\packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.113.3\lib\net40\System.Data.SQLite.dll</HintPath>
</Reference>
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
@ -65,17 +59,7 @@
<SubType>Designer</SubType>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<None Include="packages.config" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<Import Project="..\packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.113.3\build\net40\Stub.System.Data.SQLite.Core.NetFramework.targets" Condition="Exists('..\packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.113.3\build\net40\Stub.System.Data.SQLite.Core.NetFramework.targets')" />
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>
<ErrorText>Dieses Projekt verweist auf mindestens ein NuGet-Paket, das auf diesem Computer fehlt. Verwenden Sie die Wiederherstellung von NuGet-Paketen, um die fehlenden Dateien herunterzuladen. Weitere Informationen finden Sie unter "http://go.microsoft.com/fwlink/?LinkID=322105". Die fehlende Datei ist "{0}".</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('..\packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.113.3\build\net40\Stub.System.Data.SQLite.Core.NetFramework.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.113.3\build\net40\Stub.System.Data.SQLite.Core.NetFramework.targets'))" />
</Target>
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">

Wyświetl plik

@ -1,6 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Newtonsoft.Json" version="12.0.3" targetFramework="net40" />
<package id="Stub.System.Data.SQLite.Core.NetFramework" version="1.0.113.3" targetFramework="net40" />
<package id="System.Data.SQLite.Core" version="1.0.113.7" targetFramework="net40" />
</packages>

40
BouncyCastle/.gitattributes vendored 100644
Wyświetl plik

@ -0,0 +1,40 @@
# Set default behaviour, in case users don't have core.autocrlf set.
* text=auto
# Explicitly declare text files we want to always be normalized and converted
# to native line endings on checkout.
*.build text diff=xml
*.cs text diff=csharp
*.csproj text diff=xml
*.eml text
*.html text diff=html
*.mdp text diff=xml
*.mds text diff=xml
*.nunit text diff=xml
*.pem text
*.README text
*.rsp text
*.sln text
*.tmpl text
*.txt text
*.xml text diff=xml
# Denote all files that are truly binary and should not be modified.
*.bin binary
*.cer binary
*.crl binary
*.crt binary
*.data binary
*.dll binary
*.dsa binary
*.jpg binary
*.jpeg binary
*.key binary
*.p12 binary
*.p7m binary
*.png binary
*.pri binary
*.pub binary
*.rsa binary
*.sec binary
*.sig binary

25
BouncyCastle/.gitignore vendored 100644
Wyświetl plik

@ -0,0 +1,25 @@
*.psess
*.suo
*.swp
*.user
*.userprefs
*.vsp
*.nupkg
Backup/
bin/
dist/
doc/
obj/
_Resharper.*/
_Resharper*/
*.ide/
packages/
.vs/
*.nuget.props
*.nuget.targets
*.project.lock.json
project.lock.json

Wyświetl plik

@ -0,0 +1,46 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 14
VisualStudioVersion = 14.0.24606.1
MinimumVisualStudioVersion = 10.0.40219.1
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{43196EF9-B75F-4ABB-8967-DAFD621A7D05}"
ProjectSection(SolutionItems) = preProject
Portable.BouncyCastle.nuspec = Portable.BouncyCastle.nuspec
README.md = README.md
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "crypto.pcl", "Crypto\crypto.pcl.csproj", "{38872A5F-E87E-4FAD-B109-8EB7B2E6A4A0}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "crypto.tests.Net45", "crypto.tests.Net45\crypto.tests.Net45.csproj", "{45473847-8AF8-4BAF-B768-442C6875B8CE}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "crypto.pcl2", "crypto\crypto.pcl2.csproj", "{38872A5F-E87E-4FAD-B109-8EB7B2E6A4A1}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "crypto.dotnet", "crypto\crypto.dotnet.csproj", "{38872A5F-E87E-4FAD-B109-8EB7B2E6A4A2}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{38872A5F-E87E-4FAD-B109-8EB7B2E6A4A0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{38872A5F-E87E-4FAD-B109-8EB7B2E6A4A0}.Debug|Any CPU.Build.0 = Debug|Any CPU
{38872A5F-E87E-4FAD-B109-8EB7B2E6A4A0}.Release|Any CPU.ActiveCfg = Release|Any CPU
{38872A5F-E87E-4FAD-B109-8EB7B2E6A4A0}.Release|Any CPU.Build.0 = Release|Any CPU
{45473847-8AF8-4BAF-B768-442C6875B8CE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{45473847-8AF8-4BAF-B768-442C6875B8CE}.Debug|Any CPU.Build.0 = Debug|Any CPU
{45473847-8AF8-4BAF-B768-442C6875B8CE}.Release|Any CPU.ActiveCfg = Release|Any CPU
{45473847-8AF8-4BAF-B768-442C6875B8CE}.Release|Any CPU.Build.0 = Release|Any CPU
{38872A5F-E87E-4FAD-B109-8EB7B2E6A4A1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{38872A5F-E87E-4FAD-B109-8EB7B2E6A4A1}.Debug|Any CPU.Build.0 = Debug|Any CPU
{38872A5F-E87E-4FAD-B109-8EB7B2E6A4A1}.Release|Any CPU.ActiveCfg = Release|Any CPU
{38872A5F-E87E-4FAD-B109-8EB7B2E6A4A1}.Release|Any CPU.Build.0 = Release|Any CPU
{38872A5F-E87E-4FAD-B109-8EB7B2E6A4A2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{38872A5F-E87E-4FAD-B109-8EB7B2E6A4A2}.Debug|Any CPU.Build.0 = Debug|Any CPU
{38872A5F-E87E-4FAD-B109-8EB7B2E6A4A2}.Release|Any CPU.ActiveCfg = Release|Any CPU
{38872A5F-E87E-4FAD-B109-8EB7B2E6A4A2}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal

Wyświetl plik

@ -0,0 +1,38 @@

Microsoft Visual Studio Solution File, Format Version 11.00
# Visual Studio 2010
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BouncyCastle", "crypto\BouncyCastle.csproj", "{4C235092-820C-4DEB-9074-D356FB797D8B}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BouncyCastle.iOS", "crypto\BouncyCastle.iOS.csproj", "{0249241C-205E-4AC0-828B-90F822359B9E}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BouncyCastle.Android", "crypto\BouncyCastle.Android.csproj", "{A0D302CB-8866-4AB1-98B9-F0772EABF5DF}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UnitTests", "crypto\test\UnitTests.csproj", "{D4EB669D-7C88-48C0-A480-C5CC73A7369B}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{0249241C-205E-4AC0-828B-90F822359B9E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{0249241C-205E-4AC0-828B-90F822359B9E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{0249241C-205E-4AC0-828B-90F822359B9E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{0249241C-205E-4AC0-828B-90F822359B9E}.Release|Any CPU.Build.0 = Release|Any CPU
{4C235092-820C-4DEB-9074-D356FB797D8B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{4C235092-820C-4DEB-9074-D356FB797D8B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4C235092-820C-4DEB-9074-D356FB797D8B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4C235092-820C-4DEB-9074-D356FB797D8B}.Release|Any CPU.Build.0 = Release|Any CPU
{A0D302CB-8866-4AB1-98B9-F0772EABF5DF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A0D302CB-8866-4AB1-98B9-F0772EABF5DF}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A0D302CB-8866-4AB1-98B9-F0772EABF5DF}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A0D302CB-8866-4AB1-98B9-F0772EABF5DF}.Release|Any CPU.Build.0 = Release|Any CPU
{D4EB669D-7C88-48C0-A480-C5CC73A7369B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D4EB669D-7C88-48C0-A480-C5CC73A7369B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D4EB669D-7C88-48C0-A480-C5CC73A7369B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D4EB669D-7C88-48C0-A480-C5CC73A7369B}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(MonoDevelopProperties) = preSolution
StartupItem = crypto\BouncyCastle.csproj
EndGlobalSection
EndGlobal

Wyświetl plik

@ -0,0 +1,26 @@

Microsoft Visual Studio Solution File, Format Version 11.00
# Visual Studio 2010
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BouncyCastle", "crypto\BouncyCastle.csproj", "{4C235092-820C-4DEB-9074-D356FB797D8B}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UnitTests", "crypto\test\UnitTests.csproj", "{D4EB669D-7C88-48C0-A480-C5CC73A7369B}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{4C235092-820C-4DEB-9074-D356FB797D8B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{4C235092-820C-4DEB-9074-D356FB797D8B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4C235092-820C-4DEB-9074-D356FB797D8B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4C235092-820C-4DEB-9074-D356FB797D8B}.Release|Any CPU.Build.0 = Release|Any CPU
{D4EB669D-7C88-48C0-A480-C5CC73A7369B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D4EB669D-7C88-48C0-A480-C5CC73A7369B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D4EB669D-7C88-48C0-A480-C5CC73A7369B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D4EB669D-7C88-48C0-A480-C5CC73A7369B}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(MonoDevelopProperties) = preSolution
StartupItem = crypto\BouncyCastle.csproj
EndGlobalSection
EndGlobal

Plik binarny nie jest wyświetlany.

Wyświetl plik

@ -0,0 +1,119 @@
<?xml version="1.0" encoding="utf-8" ?>
<Dictionary>
<Words>
<Recognized>
<Word>Pgp</Word>
<Word>Pbe</Word>
<Word>Rsa</Word>
<Word>Dsa</Word>
<Word>Gamal</Word>
<Word>Aes</Word>
<Word>a</Word>
<Word>b</Word>
<Word>x</Word>
<Word>X</Word>
<Word>C</Word>
<Word>y</Word>
<Word>k</Word>
<Word>Y</Word>
<Word>p</Word>
<Word>q</Word>
<Word>P</Word>
<Word>n</Word>
<Word>m</Word>
<Word>e</Word>
<Word>g</Word>
<Word>d</Word>
<Word>r</Word>
<Word>s</Word>
<Word>t</Word>
<Word>v</Word>
<Word>str</Word>
<Word>tokenizer</Word>
<Word>oid</Word>
<Word>Bcpg</Word>
<Word>Sqrt</Word>
<Word>Pkcs</Word>
<Word>Asn1</Word>
<Word>Ber</Word>
<Word>Der</Word>
<Word>priv</Word>
<Word>Videotex</Word>
<Word>Subpacket</Word>
<Word>Subpackets</Word>
<Word>unhashed</Word>
<Word>Twofish</Word>
<Word>Paddings</Word>
<Word>dP</Word>
<Word>dQ</Word>
<Word>Tbc</Word>
<Word>Tpb</Word>
<Word>Gnb</Word>
<Word>Kdf</Word>
<Word>Diffie</Word>
<Word>Hellman</Word>
<Word>Ede</Word>
<Word>Cbc</Word>
<Word>Cfb</Word>
<Word>Cts</Word>
<Word>Ofb</Word>
<Word>Sha</Word>
<Word>Oaep</Word>
<Word>ies</Word>
<Word>mgf</Word>
<Word>Naccache</Word>
<Word>ccm</Word>
<Word>gcd</Word>
<Word>Alg</Word>
<Word>Oids</Word>
<Word>Params</Word>
<Word>Pkix</Word>
<Word>Pki</Word>
<Word>Etsi</Word>
<Word>Trus</Word>
<Word>Nist</Word>
<Word>Ecb</Word>
<Word>Cbc</Word>
<Word>Cfb</Word>
<Word>Ofb</Word>
<Word>Smime</Word>
<Word>Unotice</Word>
<Word>Cps</Word>
<Word>Tbs</Word>
<Word>spki</Word>
<Word>Crl</Word>
<Word>Oiw</Word>
<Word>Icao</Word>
<Word>Esf</Word>
<Word>Cmp</Word>
<Word>Pka</Word>
<Word>Crc</Word>
<Word>Infos</Word>
<Word>Ori</Word>
<Word>o</Word>
<Word>datagroup</Word>
<Word>gost</Word>
<Word>param</Word>
<Word>req</Word>
<Word>resp</Word>
<Word>tsa</Word>
<Word>tst</Word>
</Recognized>
</Words>
<Acronyms>
<CasingExceptions>
<Acronym>El</Acronym>
<Acronym>ECDH</Acronym>
<Acronym>ECDHC</Acronym>
<Acronym>ECNR</Acronym>
<Acronym>Fp</Acronym>
<Acronym>F2m</Acronym>
<Acronym>sBox</Acronym>
<Acronym>cL</Acronym>
<Acronym>Gn</Acronym>
<Acronym>Pp</Acronym>
<Acronym>Tp</Acronym>
<Acronym>Qt</Acronym>
</CasingExceptions>
</Acronyms>
</Dictionary>

Some files were not shown because too many files have changed in this diff Show More