static void BuildTcpUdpNet() { lockobj = new object(); packetBuilder = new ATCDataPacketBuilder(); comConfig = JsonFileConfig.Instance.ComConfig; Console.WriteLine($"Me is {WswHelper.GetFlightKindFromIp(comConfig.SelfIp)}"); udpClient = new UdpClient(comConfig.SelfPort); tcpClient = new TcpClient(); sendInterval = comConfig.SendDataIntervalMs; isTest = comConfig.IsTCPTest; }
static void Main(string[] args) { ShowHeaderInfo(); SetConsoleCtrlHandler(cancelHandler, true); BuildTcpUdpNet(); UdpTask(); DoTcpConnect(); TcpTask(); Console.WriteLine("Press enter to exit"); while (true) { var line = Console.ReadLine(); if (line == "exit") { break; } if (line == "udp") { Console.WriteLine($"udp state is {isRevcUdp}, count is {udpCount} and error is {isUdpError}"); } if (line == "tcp") { Console.WriteLine($"tcp state is {tcpClient.Connected} and error is {isTcpError}"); } if (line == "me" || line == "self") { Console.WriteLine($"Me is {WswHelper.GetFlightKindFromIp(comConfig.SelfIp)}"); } if (line == "run udp" && isUdpError == true) { UdpTask(); Console.WriteLine("udp run success"); } if (line == "run tcp" && isUseTCP == true && isTcpError == true) { DoTcpConnect(); TcpTask(); Console.WriteLine("tcp run success"); } if (line == "config") { Process.Start(JsonFileConfig.PathAndFileName); } if (line == "save config") { JsonFileConfig.Instance.WriteToFile(); Console.WriteLine("save file success"); } } CloseTcpUdpNet(); }
static void UdpTask() { Task.Run(() => { try { while (true) { // 从WswTHUSim接收飞行模拟器姿态和经纬度坐标 var ipEndPoint = new IPEndPoint(IPAddress.Any, 0); var recieveBytes = udpClient.Receive(ref ipEndPoint); var ip = ipEndPoint.Address.ToString(); var length = recieveBytes.Length; if (length == StructHelper.GetStructSize <AngleWithLocation>() && (ip.StartsWith(comConfig.SelfIp) == true || ip.StartsWith("127.0.0.1"))) { // 地球坐标系坐标 x y z roll pitch yaw var angleWithLocation = StructHelper.BytesToStruct <AngleWithLocation>(recieveBytes); var lon = PositionHelper.XYZToLon(angleWithLocation.X, angleWithLocation.Y, angleWithLocation.Z); var lat = PositionHelper.XYZToLat(angleWithLocation.X, angleWithLocation.Y, angleWithLocation.Z); var height = PositionHelper.XYZToHeight(angleWithLocation.X, angleWithLocation.Y, angleWithLocation.Z); var rolldeg = (angleWithLocation.Roll); var pitchdeg = (angleWithLocation.Pitch); var yawdeg = (angleWithLocation.Yaw); var kind = WswHelper.GetFlightKindFromIp(ip); if (kind == WswModelKind.EH101) { rolldeg = -rolldeg; pitchdeg = -pitchdeg; yawdeg = -yawdeg; } udpCount++; isRevcUdp = true; lock (lockobj) { packetBuilder.SetAngles(rolldeg, pitchdeg, yawdeg) .SetPositions(lon, lat, height) .SetStatus(true, false, true, 80) .SetFlightSimulatorKind(kind); } } } } catch (Exception ex) { Console.WriteLine("udp error as follows:"); Console.WriteLine(ex.ToString()); isUdpError = true; } }); }