using Newtonsoft.Json; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO; using System.Linq; using System.Net; using System.Net.Http; using System.Net.Sockets; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; using XdCxRhDw.Dto; using XdCxRhDW.Dto; using XdCxRhDW.Sender.Properties; namespace XdCxRhDW.Sender { public partial class Form1 : DevExpress.XtraEditors.XtraForm { public Form1() { InitializeComponent(); } CancellationTokenSource cts1; private async void btn1_Click(object sender, EventArgs e) { layoutControlItem1.Enabled = false; layoutControlItem7.Enabled = false; if (btn1.Text == "推送") { try { cts1 = new CancellationTokenSource(); btn1.Text = "停止"; var addrArr = txtAddr1.Text.Trim().Replace(":", ":").Split(":".ToCharArray(), StringSplitOptions.RemoveEmptyEntries); string ip = addrArr[0]; int port = Convert.ToInt32(addrArr[1]); if (txtTskType.EditValue == null) { Log($"请选择定位类型"); return; } string tskType = txtTskType.EditValue.ToString(); using (var client = new HttpClient()) { try { string url = string.Format("http://{0}:{1}/Api/Pos/", ip, port); if (tskType == "X1D1CX")//一星一地测向定位 { var lines = File.ReadAllLines("Simulation_Data2023.dat"); int idx = 1; url += "PosX1D1Async"; foreach (var line in lines) { if (string.IsNullOrWhiteSpace(line)) continue; var items = line.Split(" ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries); X1D1PosDto dto = new X1D1PosDto() { SigTime = DateTime.Now, XdDto = Convert.ToDouble(items[1]), MainYbDto = Convert.ToDouble(items[2]), CxRes = Convert.ToDouble(items[4]), MainX = Convert.ToDouble(items[7]), MainY = Convert.ToDouble(items[8]), MainZ = Convert.ToDouble(items[9]), SatTxLon = IniFiles.ReadValue("Station_Data2023", "卫星接收天线", "Lon"), SatTxLat = IniFiles.ReadValue("Station_Data2023", "卫星接收天线", "Lat"), CdbTxLon = IniFiles.ReadValue("Station_Data2023", "超短波接收天线", "Lon"), CdbTxLat = IniFiles.ReadValue("Station_Data2023", "超短波接收天线", "Lat"), CxLon = IniFiles.ReadValue("Station_Data2023", "侧向站", "Lon"), CxLat = IniFiles.ReadValue("Station_Data2023", "侧向站", "Lat"), RefLon = IniFiles.ReadValue("Station_Data2023", "参考站", "Lon"), RefLat = IniFiles.ReadValue("Station_Data2023", "参考站", "Lat"), }; var content = new StringContent(JsonConvert.SerializeObject(dto), System.Text.Encoding.UTF8, "application/json"); var response = await client.PostAsync(url, content); Log($"已向[{txtAddr1.Text}]发送第{idx++}条仿真结果"); } } if (tskType == "X2D1")//两星一地定位 { var lines = File.ReadAllLines("Simulation_Data2023.dat"); int idx = 1; url += "PosX2D1Async"; foreach (var line in lines) { if (string.IsNullOrWhiteSpace(line)) continue; var items = line.Split(" ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries); X2D1PosDto X2D1PosDto = new X2D1PosDto(); X2D1PosDto.SigTime = DateTime.Now; X2D1PosDto.SxDto = Convert.ToDouble(items[0]); X2D1PosDto.XdDto = Convert.ToDouble(items[1]); X2D1PosDto.MainYbDto = Convert.ToDouble(items[2]); X2D1PosDto.AdjaYbDto = Convert.ToDouble(items[3]); X2D1PosDto.MainX = Convert.ToDouble(items[7]); X2D1PosDto.MainY = Convert.ToDouble(items[8]); X2D1PosDto.MainZ = Convert.ToDouble(items[9]); X2D1PosDto.AdjaX = Convert.ToDouble(items[10]); X2D1PosDto.AdjaY = Convert.ToDouble(items[11]); X2D1PosDto.AdjaZ = Convert.ToDouble(items[12]); X2D1PosDto.SatTxLon = IniFiles.ReadValue("Station_Data2023", "卫星接收天线", "Lon"); X2D1PosDto.SatTxLat = IniFiles.ReadValue("Station_Data2023", "卫星接收天线", "Lat"); X2D1PosDto.CdbTxLon = IniFiles.ReadValue("Station_Data2023", "超短波接收天线", "Lon"); X2D1PosDto.CdbTxLat = IniFiles.ReadValue("Station_Data2023", "超短波接收天线", "Lat"); X2D1PosDto.RefLon = IniFiles.ReadValue("Station_Data2023", "参考站", "Lon"); X2D1PosDto.RefLat = IniFiles.ReadValue("Station_Data2023", "参考站", "Lat"); var content = new StringContent(JsonConvert.SerializeObject(X2D1PosDto), System.Text.Encoding.UTF8, "application/json"); var response = await client.PostAsync(url, content); Log($"已向[{txtAddr1.Text}]发送第{idx++}条仿真结果"); } } if (tskType == "X2D1NoPar")//两星一地无参定位 { url += "PosX2D1NoParAsync"; var res = X2D1NoPar(); var content = new StringContent(JsonConvert.SerializeObject(res), System.Text.Encoding.UTF8, "application/json"); var response = await client.PostAsync(url, content); Log($"已向[{txtAddr1.Text}]发送两星一地无参定位仿真结果"); } if (tskType == "RH")//融合定位 { var lines = File.ReadAllLines("Simulation_Data2023.dat"); int idx = 1; url += "PosRHAsync"; foreach (var line in lines) { if (string.IsNullOrWhiteSpace(line)) continue; var items = line.Split(" ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries); RHPosDto RHPosDto = new RHPosDto(); RHPosDto.SigTime = DateTime.Now; RHPosDto.SxDto = Convert.ToDouble(items[0]); RHPosDto.XdDto = Convert.ToDouble(items[1]); RHPosDto.MainYbDto = Convert.ToDouble(items[2]); RHPosDto.AdjaYbDto = Convert.ToDouble(items[3]); RHPosDto.CxRes = Convert.ToDouble(items[4]); RHPosDto.MainX = Convert.ToDouble(items[7]); RHPosDto.MainY = Convert.ToDouble(items[8]); RHPosDto.MainZ = Convert.ToDouble(items[9]); RHPosDto.AdjaX = Convert.ToDouble(items[10]); RHPosDto.AdjaY = Convert.ToDouble(items[11]); RHPosDto.AdjaZ = Convert.ToDouble(items[12]); RHPosDto.SatTxLon = IniFiles.ReadValue("Station_Data2023", "卫星接收天线", "Lon"); RHPosDto.SatTxLat = IniFiles.ReadValue("Station_Data2023", "卫星接收天线", "Lat"); RHPosDto.CdbTxLon = IniFiles.ReadValue("Station_Data2023", "超短波接收天线", "Lon"); RHPosDto.CdbTxLat = IniFiles.ReadValue("Station_Data2023", "超短波接收天线", "Lat"); RHPosDto.CxLon = IniFiles.ReadValue("Station_Data2023", "侧向站", "Lon"); RHPosDto.CxLat = IniFiles.ReadValue("Station_Data2023", "侧向站", "Lat"); RHPosDto.RefLon = IniFiles.ReadValue("Station_Data2023", "参考站", "Lon"); RHPosDto.RefLat = IniFiles.ReadValue("Station_Data2023", "参考站", "Lat"); var content = new StringContent(JsonConvert.SerializeObject(RHPosDto), System.Text.Encoding.UTF8, "application/json"); var response = await client.PostAsync(url, content); Log($"已向[{txtAddr1.Text}]发送第{idx++}条仿真结果"); } } if (tskType == "X3TwoDto")//三星双时差定位 { url += "PosX3TwoDtoAsync"; } if (tskType == "X3TwoDfo")//三星双频差定位 { url += "PosX3TwoDfoAsync"; } if (tskType == "X2Dfo")//双星时频差定位 { url += "PosX2DtoDfoAsync"; } } catch (Exception ex) { Log($"向[{txtAddr1.Text}]发送结果失败.{ex.Message}"); } } } catch (Exception ex) { Log(ex); } finally { btn1.Text = "推送"; layoutControlItem1.Enabled = true; layoutControlItem7.Enabled = true; } } else { cts1?.Cancel(); } } /// /// 两星一地定位无参 /// private X2D1PosDto X2D1NoPar() { X2D1PosDto X2D1PosDto = new X2D1PosDto(); X2D1PosDto.SigTime = DateTime.Now; X2D1PosDto.SxDto = 2198.485309353; X2D1PosDto.XdDto = 245961.726007262; X2D1PosDto.MainX = -38209016; X2D1PosDto.MainY = 17858458; X2D1PosDto.MainZ = 13250; X2D1PosDto.AdjaX = 4750323; X2D1PosDto.AdjaY = 41902879; X2D1PosDto.AdjaZ = 50515; X2D1PosDto.SatTxLon = 118.8833; X2D1PosDto.SatTxLat = 32.0667; X2D1PosDto.CdbTxLon = 109.4082; X2D1PosDto.CdbTxLat = 18.3878; return X2D1PosDto; } private void Log(string msg) { try { if (this.InvokeRequired) { this.Invoke(new Action(() => { if (listBoxControl1.ItemCount > 5000) listBoxControl1.Items.Clear(); listBoxControl1.Items.Insert(0, $"{DateTime.Now:yyyy-MM-dd HH:mm:ss}--{msg}"); listBoxControl1.SelectedIndex = 0; })); } else { if (listBoxControl1.ItemCount > 5000) listBoxControl1.Items.Clear(); listBoxControl1.Items.Insert(0, $"{DateTime.Now:yyyy-MM-dd HH:mm:ss}--{msg}"); listBoxControl1.SelectedIndex = 0; } } catch { } } private void Log(Exception ex) { try { if (this.InvokeRequired) { this.Invoke(new Action(() => { if (listBoxControl1.ItemCount > 5000) listBoxControl1.Items.Clear(); listBoxControl1.Items.Insert(0, $"{DateTime.Now:yyyy-MM-dd HH:mm:ss}--{ex.Message}"); listBoxControl1.SelectedIndex = 0; })); } else { if (listBoxControl1.ItemCount > 5000) listBoxControl1.Items.Clear(); listBoxControl1.Items.Insert(0, $"{DateTime.Now:yyyy-MM-dd HH:mm:ss}--{ex.Message}"); listBoxControl1.SelectedIndex = 0; } } catch { } } private void listBoxControl1_MouseClick(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Right) { popupMenu1.ShowPopup(MousePosition); } } private void btnClear_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { listBoxControl1.Items.Clear(); } private void btnCopyAll_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { StringBuilder sb = new StringBuilder(); foreach (var item in listBoxControl1.Items) { sb.AppendLine(item.ToString()); } var data = sb.ToString(); if (string.IsNullOrWhiteSpace(data)) return; Clipboard.SetText(sb.ToString()); } } }