Browse Source

添加仿真数据TCP发送

wyq 1 year ago
parent
commit
f8ffb6409a

+ 19 - 16
Common/TcpServer.cs

@@ -10,7 +10,7 @@ using DevExpress.XtraEditors;
 
 namespace XzXdDw
 {
-    class TcpServer
+    public class TcpServer
     {
         private TcpListener listener;
         public event Action<byte[]> OnDataReceived;
@@ -31,7 +31,7 @@ namespace XzXdDw
                 TcpClient client = null;
                 try
                 {
-                     client = listener.AcceptTcpClient();
+                    client = listener.AcceptTcpClient();
                 }
                 catch (Exception ex)
                 {
@@ -74,27 +74,30 @@ namespace XzXdDw
         /// <param name="port"></param>
         /// <param name="strjson"></param>
         /// <returns></returns>
-        public bool SendData(string serverIP, int port, string strjson)
+        public async void SendData(string serverIP, int port, string strjson)
         {
-            try
+            await Task.Run(async () =>
             {
-                using (TcpClient client = new TcpClient())
+                try
                 {
-                    client.Connect(serverIP, port);
+                    using (TcpClient client = new TcpClient())
+                    {
+                        await client.ConnectAsync(serverIP, port);
 
-                    NetworkStream stream = client.GetStream();
+                        NetworkStream stream = client.GetStream();
 
-                    byte[] dataToSend = Encoding.UTF8.GetBytes(strjson);
+                        byte[] dataToSend = Encoding.UTF8.GetBytes(strjson);
 
-                    // 将数据发送到服务器
-                    stream.Write(dataToSend, 0, dataToSend.Length);
+                        // 将数据发送到服务器
+                        stream.Write(dataToSend, 0, dataToSend.Length);
+                    }
                 }
-                return true;
-            }
-            catch (Exception ex)
-            {
-                return false;
-            }
+                catch (Exception ex)
+                {
+                   
+                }
+            });
+
         }
     }
 }

+ 23 - 9
XdDw.App/UserControl/CtrlPosXd.cs

@@ -30,7 +30,7 @@ using XdDw.App.Api.星地GDOP误差椭圆;
 using XdDw.App.EditForms;
 using XdDw.App.EFContext;
 using XzXdDw.App.Model;
-
+using XzXdDw;
 namespace XdDw.App.UserControl
 {
     /// <summary>
@@ -39,9 +39,11 @@ namespace XdDw.App.UserControl
     public partial class CtrlPosXd : DevExpress.XtraEditors.XtraUserControl
     {
         DtXDParam dtxdctrl = null;
+        TcpServer tcpServer;
         public CtrlPosXd()
         {
             InitializeComponent();
+            tcpServer = new TcpServer();
         }
 
         private async void CtrlXdPos_Load(object sender, EventArgs e)
@@ -86,8 +88,9 @@ namespace XdDw.App.UserControl
                     .AddMenu("手动定位", SvgHelper.LoadFromFile("Image\\Pos.svg"), XdPos)
                     .AddMenu("绘制时差线", SvgHelper.LoadFromFile("Image\\DrawLine.svg"), DrawDtoLine)
                     .AddMenu("加载仿真数据", SvgHelper.LoadFromFile("Image\\LoadData.svg"), LoadSimulationData)
-                    .AddMenu("绘制误差椭圆", SvgHelper.LoadFromFile("Image\\误差椭圆.svg"),()=> {
-                         var ctrl = new X2D1ErrEllipseParam();
+                    .AddMenu("绘制误差椭圆", SvgHelper.LoadFromFile("Image\\误差椭圆.svg"), () =>
+                    {
+                        var ctrl = new X2D1ErrEllipseParam();
                         PopupHelper.ShowPopup(ctrl, mapControl1, mapControl1.Width / 4, onHide: hideReason =>
                         {
                             if (hideReason == HideReason.Defalut) return;
@@ -208,15 +211,16 @@ namespace XdDw.App.UserControl
             {
                 return;
             }
-           
-            //"Simulation_Data2023.dat"
+
             string simulationFile = editor.SimulationFile;
+
             stoped = false;
 
             //在列表控件中全选+右键可以删除所有测试结果
             using (RHDWContext db = new RHDWContext())
             {
                 var listTx = db.TxInfos.ToList();
+                var sysSetings = await db.SysSetings.FirstOrDefaultAsync();
                 var lines = File.ReadAllLines(simulationFile);
                 Random r = new Random();
                 foreach (var item in lines)
@@ -268,6 +272,8 @@ namespace XdDw.App.UserControl
                     };
                     db.XDPosRes.Add(posRes);//定位结果入库
                     await db.SaveChangesAsync();
+
+                    SendPosData(posRes, sysSetings);
                     //更新定位结果UI列表和地图
                     var currentTask = gridView1.GetFocusedRow() as TaskInfo;
                     var ds = this.gridPos.DataSource as List<XDPosRes>;
@@ -281,7 +287,15 @@ namespace XdDw.App.UserControl
                 }
             }
         }
-
+        private void SendPosData(XDPosRes pos, SysSetings setings)
+        {
+            if (setings == null || string.IsNullOrEmpty(setings.ServerIp) || setings.Port < 0 || setings.Port > 65535)
+            {
+                return;
+            }
+            string json = Newtonsoft.Json.JsonConvert.SerializeObject(pos);
+             tcpServer.SendData(setings.ServerIp, setings.Port, json);
+        }
         private async void XdPos()
         {
             try
@@ -390,7 +404,7 @@ namespace XdDw.App.UserControl
             }
         }
 
-        private void DrawErrorEllipse2X1D(double[] MsEph, double[] NsEph, double[] CDBAnt, double[] RefGeod,double DtoErr,double EphErr)
+        private void DrawErrorEllipse2X1D(double[] MsEph, double[] NsEph, double[] CDBAnt, double[] RefGeod, double DtoErr, double EphErr)
         {
             try
             {
@@ -410,13 +424,13 @@ namespace XdDw.App.UserControl
                 }
                 var satTx = listTx.Find(p => p.TxType == EnumTxType.MainSat);
                 var satNTx = listTx.Find(p => p.TxType == EnumTxType.AdjaSat);
-                XdDw.App.Api.低轨GDOP误差椭圆.ErrorEllipseDTO2X1DOption Option = new XdDw.App.Api.低轨GDOP误差椭圆.ErrorEllipseDTO2X1DOption();               
+                XdDw.App.Api.低轨GDOP误差椭圆.ErrorEllipseDTO2X1DOption Option = new XdDw.App.Api.低轨GDOP误差椭圆.ErrorEllipseDTO2X1DOption();
                 Option.MsEph = MsEph;
                 Option.NsEph = NsEph;
                 Option.CDBAnt = CDBAnt;
                 Option.RefGeod = RefGeod;
                 Option.SelectPoint = new double[3] { item.PosLon, item.PosLat, 0 };
-                Option.DtoErr = DtoErr*1e-6;
+                Option.DtoErr = DtoErr * 1e-6;
                 Option.EphErr = EphErr;
                 var points = XdDw.App.Api.低轨GDOP误差椭圆.ErrEllipseHelper.ErrorEllipse2X1D(Option);
                 mapControl1.DrawDtoPonit($"双星[{listSat.FirstOrDefault(m => m.ID == satTx.ID)?.Sat},{listSat.FirstOrDefault(m => m.ID == satNTx.ID)?.Sat}]误差椭圆线", points);

+ 1 - 1
XzDw.App/MainForm.cs

@@ -30,7 +30,7 @@ namespace XzXdDw
             this.bar1.OptionsBar.DistanceBetweenItems = 20;
             this.tabbedView1.UseDefault();
 
-            btnSet.Visibility = BarItemVisibility.Never;
+            //btnSet.Visibility = BarItemVisibility.Never;
         }
         protected override void OnLoad(EventArgs e)
         {

+ 13 - 2
XzDw.App/UserControl/CtrlPosSingle.cs

@@ -45,10 +45,12 @@ namespace XzXdDw.App.UserControl
     {
         DtXDParam dtxdctrl = null;
         double MBfu;
+        TcpServer tcpServer;
         public CtrlPosSingle()
         {
             InitializeComponent();
             MBfu = ConfigurationManager.AppSettings["MBUpFreq"].To(3.1085e8);
+            tcpServer = new TcpServer();
         }
 
         private async void CtrlXdPos_Load(object sender, EventArgs e)
@@ -216,6 +218,7 @@ namespace XzXdDw.App.UserControl
             //在列表控件中全选+右键可以删除所有测试结果
             using (RHDWContext db = new RHDWContext())
             {
+                var sysSetings = await db.SysSetings.FirstOrDefaultAsync();
                 var lines = File.ReadAllLines(simulationFile);
                 Random r = new Random();
                 foreach (var item in lines)
@@ -305,7 +308,7 @@ namespace XzXdDw.App.UserControl
                         MirrLat = res[4]
                     };
                     db.PosRes.Add(posRes);//定位结果入库
-
+                    SendPosData(posRes, sysSetings);
                     //更新定位结果UI列表和地图
                     var currentTask = gridView1.GetFocusedRow() as TaskInfo;
                     var ds = this.gridPos.DataSource as List<PosRes>;
@@ -319,7 +322,15 @@ namespace XzXdDw.App.UserControl
                 }
             }
         }
-
+        private void SendPosData(PosRes pos, SysSetings setings)
+        {
+            if (setings == null || string.IsNullOrEmpty(setings.ServerIp) || setings.Port < 0 || setings.Port > 65535)
+            {
+                return;
+            }
+            string json = Newtonsoft.Json.JsonConvert.SerializeObject(pos);
+            tcpServer.SendData(setings.ServerIp, setings.Port, json);
+        }
         private void DrawErrorEllipse1X(double[] MsEph, double[] NsEph1, double[] NsEph2,double DfoErr,double EphPosErr,double EphVelErr,double fu)
         {
             try

+ 17 - 0
XzDw.App/UserControl/CtrlPosXz.cs

@@ -48,6 +48,8 @@ namespace XzXdDw.App.UserControl
         double MBfu;
         double CKfu;
         private TxInfo refTx;
+
+        TcpServer tcpServer;
         public CtrlPosXz()
         {
             InitializeComponent();
@@ -63,6 +65,8 @@ namespace XzXdDw.App.UserControl
             MBfu = ConfigurationManager.AppSettings["MBUpFreq"].To(3.1085e8);
             CKfu = ConfigurationManager.AppSettings["CKUpFreq"].To(2.95e8);
 
+            tcpServer = new TcpServer();
+
 
         }
 
@@ -236,6 +240,8 @@ namespace XzXdDw.App.UserControl
             using (RHDWContext db = new RHDWContext())
             {
                 var listTx = db.TxInfos.ToList();
+
+                var sysSetings = await db.SysSetings.FirstOrDefaultAsync();
                 var lines = File.ReadAllLines(simulationFile);
                 Random r = new Random();
                 foreach (var item in lines)
@@ -308,6 +314,8 @@ namespace XzXdDw.App.UserControl
                     };
                     db.XZPosRes.Add(posRes);//定位结果入库
 
+
+                    SendPosData(posRes, sysSetings);
                     //更新定位结果UI列表和地图
                     var currentTask = gridView1.GetFocusedRow() as TaskInfo;
                     var ds = this.gridPos.DataSource as List<XZPosRes>;
@@ -321,6 +329,15 @@ namespace XzXdDw.App.UserControl
                 }
             }
         }
+        private void SendPosData(XZPosRes pos, SysSetings setings)
+        {
+            if (setings == null || string.IsNullOrEmpty(setings.ServerIp) || setings.Port < 0 || setings.Port > 65535)
+            {
+                return;
+            }
+            string json = Newtonsoft.Json.JsonConvert.SerializeObject(pos);
+            tcpServer.SendData(setings.ServerIp, setings.Port, json);
+        }
         private async void X2Pos()
         {
             try

+ 1 - 1
XzXdDw.App/MainForm.cs

@@ -36,7 +36,7 @@ namespace XzXdDw
             this.bar1.OptionsBar.DistanceBetweenItems = 20;
             this.tabbedView1.UseDefault();
 
-            btnSet.Visibility = BarItemVisibility.Never;
+            //btnSet.Visibility = BarItemVisibility.Never;
             btnWCPJ.Visibility = BarItemVisibility.Never;
         }
         protected override void OnLoad(EventArgs e)

+ 34 - 1
XzXdDw.App/TcpServer.cs

@@ -9,7 +9,7 @@ using System.Threading.Tasks;
 
 namespace XzXdDw.App
 {
-    class TcpServer
+    public class TcpServer
     {
         private TcpListener listener;
         public event Action<byte[]> OnDataReceived;
@@ -65,5 +65,38 @@ namespace XzXdDw.App
             listener?.Stop();
             listener = null;
         }
+
+        /// <summary>
+        /// TCP发送数据
+        /// </summary>
+        /// <param name="serverIP"></param>
+        /// <param name="port"></param>
+        /// <param name="strjson"></param>
+        /// <returns></returns>
+        public async void SendData(string serverIP, int port, string strjson)
+        {
+            await Task.Run(async () =>
+            {
+                try
+                {
+                    using (TcpClient client = new TcpClient())
+                    {
+                        await client.ConnectAsync(serverIP, port);
+
+                        NetworkStream stream = client.GetStream();
+
+                        byte[] dataToSend = Encoding.UTF8.GetBytes(strjson);
+
+                        // 将数据发送到服务器
+                        stream.Write(dataToSend, 0, dataToSend.Length);
+                    }
+                }
+                catch (Exception ex)
+                {
+
+                }
+            });
+
+        }
     }
 }

+ 13 - 1
XzXdDw.App/UserControl/CtrlPosSingle.cs

@@ -45,10 +45,12 @@ namespace XzXdDw.App.UserControl
     {
         DtXDParam dtxdctrl = null;
         double MBfu;
+        TcpServer tcpServer;
         public CtrlPosSingle()
         {
             InitializeComponent();
             MBfu = ConfigurationManager.AppSettings["MBUpFreq"].To(3.1085e8);
+            tcpServer = new TcpServer();
         }
 
         private async void CtrlXdPos_Load(object sender, EventArgs e)
@@ -216,6 +218,7 @@ namespace XzXdDw.App.UserControl
             //在列表控件中全选+右键可以删除所有测试结果
             using (RHDWContext db = new RHDWContext())
             {
+                var sysSetings = await db.SysSetings.FirstOrDefaultAsync();
                 var lines = File.ReadAllLines(simulationFile);
                 Random r = new Random();
                 foreach (var item in lines)
@@ -305,7 +308,7 @@ namespace XzXdDw.App.UserControl
                         MirrLat = res[4]
                     };
                     db.PosRes.Add(posRes);//定位结果入库
-
+                    SendPosData(posRes, sysSetings);
                     //更新定位结果UI列表和地图
                     var currentTask = gridView1.GetFocusedRow() as TaskInfo;
                     var ds = this.gridPos.DataSource as List<PosRes>;
@@ -319,6 +322,15 @@ namespace XzXdDw.App.UserControl
                 }
             }
         }
+        private void SendPosData(PosRes pos, SysSetings setings)
+        {
+            if (setings == null || string.IsNullOrEmpty(setings.ServerIp) || setings.Port < 0 || setings.Port > 65535)
+            {
+                return;
+            }
+            string json = Newtonsoft.Json.JsonConvert.SerializeObject(pos);
+            tcpServer.SendData(setings.ServerIp, setings.Port, json);
+        }
 
         private void DrawErrorEllipse1X(double[] MsEph, double[] NsEph1, double[] NsEph2,double DfoErr,double EphPosErr,double EphVelErr,double fu)
         {

+ 15 - 1
XzXdDw.App/UserControl/CtrlPosXd.cs

@@ -39,9 +39,12 @@ namespace XzXdDw.App.UserControl
     public partial class CtrlPosXd : DevExpress.XtraEditors.XtraUserControl
     {
         DtXDParam dtxdctrl = null;
+        TcpServer tcpServer;
         public CtrlPosXd()
         {
             InitializeComponent();
+
+            tcpServer = new TcpServer();
         }
 
         private async void CtrlXdPos_Load(object sender, EventArgs e)
@@ -217,6 +220,7 @@ namespace XzXdDw.App.UserControl
             using (RHDWContext db = new RHDWContext())
             {
                 var listTx = db.TxInfos.ToList();
+                var sysSetings = await db.SysSetings.FirstOrDefaultAsync();
                 var lines = File.ReadAllLines(simulationFile);
                 Random r = new Random();
                 foreach (var item in lines)
@@ -268,6 +272,8 @@ namespace XzXdDw.App.UserControl
                     };
                     db.XDPosRes.Add(posRes);//定位结果入库
                     await db.SaveChangesAsync();
+
+                    SendPosData(posRes, sysSetings);
                     //更新定位结果UI列表和地图
                     var currentTask = gridView1.GetFocusedRow() as TaskInfo;
                     var ds = this.gridPos.DataSource as List<XDPosRes>;
@@ -281,7 +287,15 @@ namespace XzXdDw.App.UserControl
                 }
             }
         }
-
+        private void SendPosData(XDPosRes pos, SysSetings setings)
+        {
+            if (setings == null || string.IsNullOrEmpty(setings.ServerIp) || setings.Port < 0 || setings.Port > 65535)
+            {
+                return;
+            }
+            string json = Newtonsoft.Json.JsonConvert.SerializeObject(pos);
+            tcpServer.SendData(setings.ServerIp, setings.Port, json);
+        }
         private async void XdPos()
         {
             try

+ 16 - 2
XzXdDw.App/UserControl/CtrlPosXz.cs

@@ -48,6 +48,8 @@ namespace XzXdDw.App.UserControl
         double MBfu;
         double CKfu;
         private TxInfo refTx;
+
+        TcpServer tcpServer;
         public CtrlPosXz()
         {
             InitializeComponent();
@@ -62,7 +64,7 @@ namespace XzXdDw.App.UserControl
 
             MBfu = ConfigurationManager.AppSettings["MBUpFreq"].To(3.1085e8);
             CKfu = ConfigurationManager.AppSettings["CKUpFreq"].To(2.95e8);
-
+            tcpServer = new TcpServer();
 
         }
 
@@ -236,6 +238,8 @@ namespace XzXdDw.App.UserControl
             using (RHDWContext db = new RHDWContext())
             {
                 var listTx = db.TxInfos.ToList();
+
+                var sysSetings = await db.SysSetings.FirstOrDefaultAsync();
                 var lines = File.ReadAllLines(simulationFile);
                 Random r = new Random();
                 foreach (var item in lines)
@@ -307,7 +311,7 @@ namespace XzXdDw.App.UserControl
                         MirrLat = res[4],
                     };
                     db.XZPosRes.Add(posRes);//定位结果入库
-
+                    SendPosData(posRes, sysSetings);
                     //更新定位结果UI列表和地图
                     var currentTask = gridView1.GetFocusedRow() as TaskInfo;
                     var ds = this.gridPos.DataSource as List<XZPosRes>;
@@ -321,6 +325,16 @@ namespace XzXdDw.App.UserControl
                 }
             }
         }
+
+        private void SendPosData(XZPosRes pos, SysSetings setings)
+        {
+            if (setings == null || string.IsNullOrEmpty(setings.ServerIp) || setings.Port < 0 || setings.Port > 65535)
+            {
+                return;
+            }
+            string json = Newtonsoft.Json.JsonConvert.SerializeObject(pos);
+            tcpServer.SendData(setings.ServerIp, setings.Port, json);
+        }
         private async void X2Pos()
         {
             try