diff --git a/Plane.FormationCreator/App.xaml.cs b/Plane.FormationCreator/App.xaml.cs index 720dc6d..6675677 100644 --- a/Plane.FormationCreator/App.xaml.cs +++ b/Plane.FormationCreator/App.xaml.cs @@ -69,7 +69,7 @@ namespace Plane.FormationCreator }; //new Test().Prepare().Run(); - VersionControl.GetVersionFromIni(); + VersionControl.GetSettingFromIni(); } private ILogger _logger; @@ -177,16 +177,19 @@ namespace Plane.FormationCreator { await Dispatcher.BeginInvoke(new Action(() => { - copter = new Copter(Connection, SynchronizationContext.Current, _mapManager.Center.Lat, _mapManager.Center.Lng) + if (_copterManager.EnAddCopter_Real()) { - Id = ip, - Name = ip.Substring(ip.LastIndexOf('.') + 1) - - }; - int _index; - _index=copters.AddCopter(copter); - copterStatus.Insert(_index,false); - copter.TextReceived += Copter_TextReceived; + copter = new Copter(Connection, SynchronizationContext.Current, _mapManager.Center.Lat, _mapManager.Center.Lng) + { + Id = ip, + Name = ip.Substring(ip.LastIndexOf('.') + 1) + + }; + int _index; + _index = copters.AddCopter(copter); + copterStatus.Insert(_index, false); + copter.TextReceived += Copter_TextReceived; + } })); } else @@ -243,17 +246,21 @@ namespace Plane.FormationCreator var copter = _copterManager.Copters.FirstOrDefault(c => c.Id == id.ToString()); if (copter == null) { - var copterStatus = _copterManager.CopterStatus; - var connection = new CommConnection(); - copter = new Copter(connection, SynchronizationContext.Current, _mapManager.Center.Lat, _mapManager.Center.Lng) + if (_copterManager.EnAddCopter_Real()) { - Id = id.ToString(), - Name = id.ToString(), - }; - int _index; - _index = _copterManager.Copters.AddCopter(copter); - copterStatus.Insert(_index, false); - copter.TextReceived += Copter_TextReceived; + + var copterStatus = _copterManager.CopterStatus; + var connection = new CommConnection(); + copter = new Copter(connection, SynchronizationContext.Current, _mapManager.Center.Lat, _mapManager.Center.Lng) + { + Id = id.ToString(), + Name = id.ToString(), + }; + int _index; + _index = _copterManager.Copters.AddCopter(copter); + copterStatus.Insert(_index, false); + copter.TextReceived += Copter_TextReceived; + } } } })); diff --git a/Plane.FormationCreator/Formation/CopterManager.cs b/Plane.FormationCreator/Formation/CopterManager.cs index 921b8b2..707ff08 100644 --- a/Plane.FormationCreator/Formation/CopterManager.cs +++ b/Plane.FormationCreator/Formation/CopterManager.cs @@ -8,12 +8,25 @@ using System.Linq; using System.Text; using System.Threading.Tasks; using Plane.FormationCreator.Util; +using Microsoft.Practices.ServiceLocation; +using Plane.FormationCreator.ViewModels; +using System.Threading; +using Plane.Communication; +using Plane.Util; +using System.Windows; +using Plane.Windows.Messages; namespace Plane.FormationCreator.Formation { public class CopterCollection : ObservableCollection { + + public int EnCopterNumber = 0; + + public int EnVCopterNumber = 0; + + /// /// 实现排序插入 /// @@ -33,12 +46,39 @@ namespace Plane.FormationCreator.Formation throw new NotImplementedException(); } - +/* if (this.Count >= VersionControl.CopterUpperLimit) { return 0; } + + //网络登录限制 + // if (!VersionControl.IsFullVersion) + { + if (entityObject is FakeCopter) + { + if (this.Count >= EnVCopterNumber) + { + return 0; + } + + } + else + { + if (this.Count >= EnCopterNumber) + { + return 0; + } + + } + } + + */ + + + + int _index = 0; if (this.Count == 0) { @@ -88,6 +128,16 @@ namespace Plane.FormationCreator.Formation public class CopterManager : ObservableObject { + const string supername = "admin"; + const string superpass = "fxmf0622"; + //服务器地址 + const string strUrlPre = "http://111.229.174.37:81/login/checkforapp.php"; + //用户级别 + const int LEVEL_NORMAL = 1; + const int LEVEL_ADMIN = 0; + + + private string superDispname = "超级用户"; public CopterManager() { AppEx.Current.AppModeChanged += (sender, e) => @@ -103,7 +153,7 @@ namespace Plane.FormationCreator.Formation public List ShowCopter = new List(); - + //3维视图显示比例,有些大的图案显示不出来可以缩小 private float _scale3d = 1.0f; public float scale3d @@ -112,9 +162,12 @@ namespace Plane.FormationCreator.Formation set { Set(nameof(scale3d), ref _scale3d, value); } } + public delegate void NetStatusChanged(bool Logined, string status); + public event NetStatusChanged netStatusChanged; public CopterCollection Copters { get;} = new CopterCollection(); - + + //标记某飞机是否需要跳过 public ArrayList CopterStatus = new ArrayList(); //public ObservableCollection Copters //{ @@ -134,6 +187,295 @@ namespace Plane.FormationCreator.Formation // } //} + + + private string _Loginstate = "未登录"; + public string Loginstate + { + get { return _Loginstate; } + set + { + Set(nameof(Loginstate), ref _Loginstate, value); + netStatusChanged(Logined,Loginstate); + } + } + + + private int _EnCopterNumber = 0; + public int EnCopterNumber + { + get { return _EnCopterNumber; } + set + { + Set(nameof(EnCopterNumber), ref _EnCopterNumber, value); + Copters.EnCopterNumber = EnCopterNumber; + } + } + + private int _EnVCopterNumber = 0; + public int EnVCopterNumber + { + get { return _EnVCopterNumber; } + set + { + Set(nameof(EnVCopterNumber), ref _EnVCopterNumber, value); + Copters.EnVCopterNumber = EnVCopterNumber; + } + } + + private bool _Logined = false; + public bool Logined + { + get { return _Logined; } + set + { + Set(nameof(Logined), ref _Logined, value); + netStatusChanged(Logined, Loginstate); + } + } + + private string _UserName = ""; + private string _UserDisplayName = ""; + + public void NetLogined(string UserName,string UserDisplayName,int vEnCopterNumber,int vEnVCopterNumber,int userlever=1) + { + _UserName = UserName; + EnCopterNumber = vEnCopterNumber; + EnVCopterNumber = vEnVCopterNumber; + _UserDisplayName = UserDisplayName; + string dis_EnCopterNumber ="<"+ EnCopterNumber.ToString()+">"; + string dis_EnVCopterNumber = "<" + EnVCopterNumber.ToString() + ">"; + if (EnCopterNumber == -1) dis_EnCopterNumber = "<无限>"; + if (EnVCopterNumber == -1) dis_EnVCopterNumber = "<无限>"; + Loginstate ="["+ UserDisplayName + "]已登录,模拟飞机:"+ dis_EnVCopterNumber + "架,真实飞机:"+ dis_EnCopterNumber + "架"; + Logined = true; + VersionControl.SetUserLever(userlever); + if (UserName != supername) + { + Task.Run(async () => + { + while (Logined) + { + NetActivePost(); + //30秒一次保持活跃 + await Task.Delay(30 * 1000).ConfigureAwait(false); + } + }).ConfigureAwait(false); + } + } + private void NetActivePost() + { + // 发送请求 + StringBuilder sbUrl = new StringBuilder(); // 请求URL内容 + sbUrl.Append(strUrlPre); + sbUrl.Append("?"); + sbUrl.Append("username=" + _UserName); + sbUrl.Append("&type=Active"); + String strUrl = sbUrl.ToString(); + string errorstr; + new AsynDataUtils().AsynGetData(strUrl, null,out errorstr); + } + + private void NetLogoutPost() + { + // 发送请求 + StringBuilder sbUrl = new StringBuilder(); // 请求URL内容 + sbUrl.Append(strUrlPre); + sbUrl.Append("?"); + sbUrl.Append("username=" + _UserName); + + sbUrl.Append("&" + "clientname=" + System.Net.Dns.GetHostName()); + sbUrl.Append("&type=Logout"); + + String strUrl = sbUrl.ToString(); + string errorstr; + new AsynDataUtils().AsynGetData(strUrl, null, out errorstr); + } + public void NetLogout() + { + if (Logined) + NetLogoutPost(); + + + Logined = false; + EnCopterNumber = 0; + EnVCopterNumber = 0; + _UserDisplayName = ""; + _UserName = ""; + VersionControl.SetUserLever(LEVEL_NORMAL); + Loginstate = "未登录"; + } + + + //提交飞行记录 + public void Net_PostStartMission(DateTime MissionTime,double OriginLng, double OriginLat) + { + + // 发送请求 + StringBuilder sbUrl = new StringBuilder(); // 请求URL内容 + sbUrl.Append(strUrlPre); + sbUrl.Append("?"); + sbUrl.Append("username=" + _UserName); + sbUrl.Append("&" + "clientname=" + System.Net.Dns.GetHostName()); + sbUrl.Append("&type=StartMission"); + sbUrl.Append("&mtime="+ MissionTime.ToString()); + sbUrl.Append("&orgLng="+ OriginLng.ToString()); + sbUrl.Append("&orgLat="+ OriginLat.ToString()); + sbUrl.Append("&coptercount=" + Copters.Count().ToString()); + + String strUrl = sbUrl.ToString(); + string errorstr; + new AsynDataUtils().AsynGetData(strUrl, null, out errorstr); + } + + + + + + + + + + + + + + private string tempuser; + private string tempPassword; + private bool tempSavePassword; + + //在这个方法里面接收回调的返回信息 + private void DataResultCallBack(string data,bool haveerror) + { + if (haveerror) + { + Loginstate = "登录失败,"+ data; + return; + } + if (data == "") + { + Loginstate = "登录失败,请检查网络连接"; + return; + } + string[] arr = data.Split(';'); + string loginret = arr[0]; + if (loginret == "Login ok") + { + if (arr.Length!= 5) + { + Alert.Show("系统版本不正确!", "登录提示", MessageBoxButton.OK, MessageBoxImage.Warning); + return; + } + + + string UserDisplayName = arr[1]; + int vEnCopterNumber = int.Parse(arr[2]); + int vEnVCopterNumber = int.Parse(arr[3]); + int userlevel = int.Parse(arr[4]); + NetLogined(tempuser, UserDisplayName, vEnCopterNumber, vEnVCopterNumber, userlevel); + VersionControl.SaveLogininfoToIni(tempuser, tempPassword, tempSavePassword); + //MessageBox.Show(UserDisplayName + " 登录成功!", "登录提示"); + } + else + if (loginret == "username error") + { + NetLogout(); + Alert.Show("账号错误!", "登录提示", MessageBoxButton.OK, MessageBoxImage.Warning); + } + else + if (loginret == "password error") + { + NetLogout(); + Alert.Show("密码错误!", "登录提示", MessageBoxButton.OK, MessageBoxImage.Warning); + } + else + if (loginret == "replogin error") + { + NetLogout(); + Alert.Show("该账号已在其他地方登录!", "登录提示", MessageBoxButton.OK, MessageBoxImage.Warning); + } + } + public void NetLogoin(string username,string password,bool savepassword) + { + Logined = false; + //超级用户,无限制 + if ((username== supername) && (password== superpass)) + { + NetLogined(supername, superDispname, -1, -1, LEVEL_ADMIN); + return; + } + + tempuser = username; + tempPassword = password; + tempSavePassword = savepassword; + // 发送请求 + StringBuilder sbUrl = new StringBuilder(); // 请求URL内容 + sbUrl.Append(strUrlPre); + sbUrl.Append("?"); + sbUrl.Append("username=" + username); + sbUrl.Append("&" + "password=" + password); + sbUrl.Append("&" + "clientname=" + System.Net.Dns.GetHostName()); + String strUrl = sbUrl.ToString(); + string errorstr; + if (new AsynDataUtils().AsynGetData(strUrl, DataResultCallBack, out errorstr)) + Loginstate = "登录中..."; + else Loginstate = "登录失败,"+ errorstr; + } + + + + //在这个方法里面接收回调的返回信息 + private void DataResultCallBack_changepassword(string data, bool haveerror) + { + if (haveerror) + { + MessageBox.Show("更改失败," + data, "提示"); + return; + } + if (data == "") + { + MessageBox.Show("更改失败,请检查网络", "提示"); + return; + } + string[] arr = data.Split(';'); + string loginret = arr[0]; + if (loginret == "chpassword ok") + { + MessageBox.Show( "密码更改成功!", "提示"); + } + else + if (loginret == "username error") + { + + MessageBox.Show("账号错误!", "提示"); + } + else + if (loginret == "password error") + { + MessageBox.Show("原密码错误!", "提示"); + } + + } + + public void NetChangePassword(string username, string oldpassword, string newpassword) + { + tempuser = username; + tempPassword = oldpassword; + // 发送请求 + StringBuilder sbUrl = new StringBuilder(); // 请求URL内容 + sbUrl.Append(strUrlPre); + sbUrl.Append("?"); + sbUrl.Append("username=" + username); + sbUrl.Append("&password=" + oldpassword); + sbUrl.Append("&clientname=" + System.Net.Dns.GetHostName()); + sbUrl.Append("&type=Chpassword"); + sbUrl.Append("&newpassword=" + newpassword); + String strUrl = sbUrl.ToString(); + string errorstr; + if (!new AsynDataUtils().AsynGetData(strUrl, DataResultCallBack_changepassword, out errorstr)) + MessageBox.Show("更改失败," + errorstr, "提示"); + } + public bool shiftkeydown; public IEnumerable SelectedCopters { get { return _selectedCoptersGetter().Cast(); } } @@ -166,10 +508,28 @@ namespace Plane.FormationCreator.Formation SeletedCopterCount = SelectedCopters.Count(); } + + + + public bool EnAddCopter_Real() + { + if (EnCopterNumber == -1) return true; + else + return Copters.Count < EnCopterNumber; + } + + public bool EnAddCopter_Fake() + { + if (EnVCopterNumber == -1) return true; + else + return Copters.Count < EnVCopterNumber; + } + + /// - /// 选择飞机 - /// - /// Null表示清除所有选择 + /// 选择飞机 + /// + /// Null表示清除所有选择 public void Select(ICopter copter) { _selectCopterAction(copter); diff --git a/Plane.FormationCreator/MainWindow.xaml b/Plane.FormationCreator/MainWindow.xaml index 981ec50..694f6f0 100644 --- a/Plane.FormationCreator/MainWindow.xaml +++ b/Plane.FormationCreator/MainWindow.xaml @@ -18,7 +18,9 @@ PreviewKeyUp="MetroWindow_PreviewKeyUp" Style="{StaticResource VSWindowStyleKey}" Width="1920" - Height="1080" > + Height="1080" + Closing="Window_Closing" + >