kopia lustrzana https://github.com/dl2alf/AirScout
344 wiersze
9.7 KiB
C#
344 wiersze
9.7 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Collections;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading;
|
|
using System.ComponentModel;
|
|
using System.Windows;
|
|
using System.Windows.Forms;
|
|
using System.Globalization;
|
|
using System.Net;
|
|
using System.IO;
|
|
using System.Xml.Serialization;
|
|
using AirScout.Core;
|
|
using AirScout.Aircrafts;
|
|
using ScoutBase.Core;
|
|
|
|
namespace AirScout.PlaneFeeds.Generic
|
|
{
|
|
// enum for ReportProgress messages
|
|
public enum PROGRESS
|
|
{
|
|
ERROR = -1,
|
|
STATUS = 0,
|
|
PLANES = 1,
|
|
FINISHED = 100
|
|
}
|
|
|
|
// enum for PlaneFeed status
|
|
public enum STATUS
|
|
{
|
|
ERROR = -1,
|
|
OK = 0
|
|
}
|
|
|
|
// class for PlaneFeed property setting
|
|
public class PlaneFeedProperty
|
|
{
|
|
public string Info = "";
|
|
public string Value = "";
|
|
|
|
public PlaneFeedProperty(string info, string value)
|
|
{
|
|
Info = info;
|
|
Value = value;
|
|
}
|
|
}
|
|
|
|
public class PlaneFeedWorkEventArgs
|
|
{
|
|
public string AppDirectory = "";
|
|
public string AppDataDirectory = "";
|
|
public string LogDirectory = "";
|
|
public string TmpDirectory = "";
|
|
public string DatabaseDirectory = "";
|
|
|
|
public double MaxLat = 0;
|
|
public double MinLon = 0;
|
|
public double MinLat = 0;
|
|
public double MaxLon = 0;
|
|
|
|
public int MinAlt = 0;
|
|
public int MaxAlt = 0;
|
|
|
|
public double MyLat = 0;
|
|
public double MyLon = 0;
|
|
public double DXLat = 0;
|
|
public double DXLon = 0;
|
|
|
|
public bool KeepHistory = false;
|
|
}
|
|
|
|
[Serializable]
|
|
public class PlaneFeedSettings
|
|
{
|
|
}
|
|
|
|
[DefaultPropertyAttribute("Name")]
|
|
public class PlaneFeed : BackgroundWorker
|
|
{
|
|
[Browsable(false)]
|
|
public virtual string Name
|
|
{
|
|
get
|
|
{
|
|
return Properties.Settings.Default.Generic_Name;
|
|
}
|
|
protected set
|
|
{
|
|
Properties.Settings.Default.Generic_Name = value;
|
|
Properties.Settings.Default.Save();
|
|
}
|
|
}
|
|
|
|
[Browsable(false)]
|
|
public virtual string Disclaimer
|
|
{
|
|
get
|
|
{
|
|
return Properties.Settings.Default.Generic_Disclaimer;
|
|
}
|
|
protected set
|
|
{
|
|
Properties.Settings.Default.Generic_Disclaimer = value;
|
|
Properties.Settings.Default.Save();
|
|
}
|
|
}
|
|
|
|
[Browsable(false)]
|
|
public virtual string DisclaimerAccepted
|
|
{
|
|
get
|
|
{
|
|
return Properties.Settings.Default.Generic_Disclaimer_Accepted;
|
|
}
|
|
set
|
|
{
|
|
Properties.Settings.Default.Generic_Disclaimer_Accepted = value;
|
|
Properties.Settings.Default.Save();
|
|
}
|
|
}
|
|
|
|
[Browsable(false)]
|
|
public virtual string Info
|
|
{
|
|
get
|
|
{
|
|
return Properties.Settings.Default.Generic_Info;
|
|
}
|
|
protected set
|
|
{
|
|
Properties.Settings.Default.Generic_Info = value;
|
|
Properties.Settings.Default.Save();
|
|
}
|
|
}
|
|
|
|
[Browsable(false)]
|
|
public bool HasSettings;
|
|
|
|
[Browsable(false)]
|
|
public bool CanImport;
|
|
|
|
[Browsable(false)]
|
|
public bool CanExport;
|
|
|
|
public PlaneFeedSettings FeedSettings = new PlaneFeedSettings();
|
|
|
|
public STATUS Status;
|
|
|
|
public string AppDirectory = "";
|
|
public string AppDataDirectory = "";
|
|
public string LogDirectory = "";
|
|
public string TmpDirectory = "";
|
|
public string DatabaseDirectory = "";
|
|
|
|
public double MaxLat = 60;
|
|
public double MinLon = -15;
|
|
public double MinLat = 30;
|
|
public double MaxLon = 35;
|
|
|
|
public int MinAlt = 5000;
|
|
public int MaxAlt = 12200;
|
|
|
|
public double MyLat;
|
|
public double MyLon;
|
|
public double DXLat;
|
|
public double DXLon;
|
|
|
|
public bool KeepHistory = false;
|
|
|
|
protected VarConverter VC;
|
|
|
|
protected LogWriter Log = LogWriter.Instance;
|
|
|
|
public PlaneFeed()
|
|
: base()
|
|
{
|
|
this.WorkerReportsProgress = true;
|
|
this.WorkerSupportsCancellation = true;
|
|
this.CanImport = false;
|
|
this.CanExport = false;
|
|
this.HasSettings = false;
|
|
// Initailize variables
|
|
VC = new VarConverter();
|
|
|
|
}
|
|
|
|
protected override void OnDoWork(DoWorkEventArgs e)
|
|
{
|
|
Log.WriteMessage("Started.");
|
|
PlaneFeedWorkEventArgs args = (PlaneFeedWorkEventArgs)e.Argument;
|
|
// set parameters from arguments
|
|
|
|
AppDirectory = args.AppDirectory;
|
|
AppDataDirectory = args.AppDataDirectory;
|
|
LogDirectory = args.LogDirectory;
|
|
TmpDirectory = args.TmpDirectory;
|
|
DatabaseDirectory = args.DatabaseDirectory;
|
|
MaxLat = args.MaxLat;
|
|
MinLon = args.MinLon;
|
|
MinLat = args.MinLat;
|
|
MaxLon = args.MaxLon;
|
|
MyLat = args.MyLat;
|
|
MyLon = args.MyLon;
|
|
DXLat = args.DXLat;
|
|
DXLon = args.DXLon;
|
|
MinAlt = args.MinAlt;
|
|
MaxAlt = args.MaxAlt;
|
|
|
|
// keep history settings from arguments
|
|
KeepHistory = args.KeepHistory;
|
|
|
|
|
|
Status = STATUS.OK;
|
|
|
|
// narrow args according to QSO partners
|
|
if (MyLat > DXLat)
|
|
{
|
|
MaxLat = MyLat;
|
|
MinLat = DXLat;
|
|
}
|
|
else
|
|
{
|
|
MaxLat = DXLat;
|
|
MinLat = MyLat;
|
|
}
|
|
if (MyLon > DXLon)
|
|
{
|
|
MaxLon = MyLon;
|
|
MinLon = DXLon;
|
|
}
|
|
else
|
|
{
|
|
MaxLon = DXLon;
|
|
MinLon = MyLon;
|
|
}
|
|
int interval = 60;
|
|
do
|
|
{
|
|
int count = 100;
|
|
DateTime start = DateTime.UtcNow;
|
|
List<PlaneInfo> planes = new List<PlaneInfo>();
|
|
Random rnd = new Random();
|
|
for (int ii = 0; ii < count; ii++)
|
|
{
|
|
PlaneInfo info = new PlaneInfo();
|
|
info.Call = "RND" + ii.ToString("0000");
|
|
info.Hex = ii.ToString("X4");
|
|
info.Lat = rnd.NextDouble() * (MaxLat-MinLat) + MinLat;
|
|
info.Lon = rnd.NextDouble() * (MaxLon - MinLon) + MinLon;
|
|
info.Alt = rnd.Next((int)UnitConverter.m_ft(MinAlt), (int)UnitConverter.m_ft(MaxAlt));
|
|
info.Speed = rnd.Next(200, 600);
|
|
info.Track = rnd.Next(0, 360);
|
|
int t = rnd.Next(0, 100);
|
|
info.Type = "C206";
|
|
if (ii > 10)
|
|
info.Type = "A320";
|
|
if (ii > 70)
|
|
info.Type = "B744";
|
|
if(ii > 95)
|
|
info.Type = "A388";
|
|
AircraftTypeDesignator type = AircraftData.Database.AircraftTypeFindByICAO(info.Type);
|
|
if (info != null)
|
|
{
|
|
info.Manufacturer = type.Manufacturer;
|
|
info.Model = type.Model;
|
|
info.Category = type.Category;
|
|
}
|
|
else
|
|
{
|
|
info.Manufacturer = "[unknown]";
|
|
info.Model = "[unknown]";
|
|
info.Category = PLANECATEGORY.NONE;
|
|
}
|
|
planes.Add(info);
|
|
}
|
|
ReportProgress((int)PROGRESS.PLANES, planes);
|
|
// do not update anything in database
|
|
// AircraftData.Database.PlaneInfoBulkInsertOrUpdateIfNewer(planes);
|
|
string msg = "[" + start.ToString("HH:mm:ss") + "] " +
|
|
count.ToString() + " Positions randomized.";
|
|
this.ReportProgress((int)PROGRESS.STATUS, msg);
|
|
int i = 0;
|
|
while (!CancellationPending && (i < interval))
|
|
{
|
|
Thread.Sleep(1000);
|
|
i++;
|
|
}
|
|
}
|
|
while (!CancellationPending);
|
|
this.ReportProgress((int)PROGRESS.FINISHED);
|
|
Log.WriteMessage("Finished.");
|
|
}
|
|
|
|
public virtual Object GetFeedSettings()
|
|
{
|
|
return FeedSettings;
|
|
}
|
|
|
|
public virtual void Import()
|
|
{
|
|
|
|
}
|
|
|
|
public virtual void Export()
|
|
{
|
|
SaveFileDialog Dlg = new SaveFileDialog();
|
|
Dlg.DefaultExt = "feed";
|
|
Dlg.Filter = "Plane Feeds | .feed";
|
|
Dlg.OverwritePrompt = true;
|
|
if (Dlg.ShowDialog() == DialogResult.OK)
|
|
{
|
|
XmlSerializer s = new XmlSerializer(typeof(PlaneFeed));
|
|
s.Serialize(File.Create(Dlg.FileName), this);
|
|
}
|
|
|
|
}
|
|
|
|
public override string ToString()
|
|
{
|
|
return Name;
|
|
}
|
|
|
|
}
|
|
|
|
public class PlaneFeedEnumeration
|
|
{
|
|
public ArrayList EnumFeeds()
|
|
{
|
|
ArrayList feeds = new ArrayList();
|
|
feeds.Add(new PlaneFeed());
|
|
feeds.Add(new PlaneFeed_AS());
|
|
feeds.Add(new PlaneFeed_PF());
|
|
feeds.Add(new PlaneFeed_VR());
|
|
// feeds.Add(new PlaneFeed_FR());
|
|
feeds.Add(new PlaneFeed_AJ());
|
|
feeds.Add(new PlaneFeed_FJ());
|
|
feeds.Add(new PlaneFeed_ADSB());
|
|
feeds.Add(new PlaneFeed_RTL());
|
|
return feeds;
|
|
}
|
|
}
|
|
}
|