void Start()
    {
        TeachIp          = new IPEndPoint(IPAddress.Parse(File.ReadAllText("ip.txt")), 16000);
        this.clientTeach = new UdpClient(12000);
        ip                     = new IPEndPoint(IPAddress.Any, 0);
        angle                  = DefaultAngle;
        lastAngle              = DefaultAngle;
        otherAngle             = DefaultAngle;
        command                = default(TeachingCommand);
        angleWithLocation      = default(AngleWithLocation);
        otherAngleWithLocation = default(AngleWithLocation);

        SendThreading = new Thread(new ThreadStart(SendRotation));
        SendThreading.Start();
        SendThreading.Name = "SendEvent" + base.transform.name;

        RecieveThread = new Thread(new ThreadStart(RecieveData));
        RecieveThread.Start();
        RecieveThread.Name = "RecieveEvent";

        RecieveFromTeachThread = new Thread(new ThreadStart(RecieveDataFromTeach));
        RecieveFromTeachThread.Start();
        RecieveFromTeachThread.Name = "RecieveFromTeachEvent";
        //UdpPlatform.Instance.SendString("Udp Start");

        Task.Run(() =>
        {
            while (true)
            {
                //var ipRe = new IPEndPoint(IPAddress.Parse("192.168.0.135"), 16000);
                //var bytes = this.clientTeach.Receive(ref ipRe);
                var bytes  = this.clientTeach.Receive(ref TeachIp);
                var length = bytes.Length;
                if (length == StructHelper.GetStructSize <TeachingCommand>())
                {
                    command = StructHelper.BytesToStruct <TeachingCommand>(bytes);
                    this.IsSendFromTeachingPlatform = command.IsStart == 1;
                }
            }
        });

        Task.Run(() =>
        {
            while (true)
            {
                UdpPlatform.Instance.SendData(this.angleWithLocation, new IPEndPoint(IPAddress.Broadcast, 16000));
                Thread.Sleep(20);
            }
        });

        if (this.MemDB.Init(this.memName) == 0 || this.MemDB.Init("GAME_SHARED_MEM_0000") == 0)
        {
            Debug.Log("Run");
        }
        else
        {
            Debug.Log("no Run");
            Time.timeScale = 0f;
        }
    }
Example #2
0
 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;
         }
     });
 }
 private void RecieveDataFromTeach()
 {
     while (true)
     {
         var ipRe  = new IPEndPoint(IPAddress.Parse("192.168.0.135"), 16000);
         var bytes = this.clientTeach.Receive(ref ipRe);
         //var bytes = this.clientTeach.Receive(ref TeachIp);
         var length = bytes.Length;
         if (length == StructHelper.GetStructSize <TeachingCommand>())
         {
             command = StructHelper.BytesToStruct <TeachingCommand>(bytes);
             this.IsSendFromTeachingPlatform = command.IsStart == 1;
         }
     }
 }
 private void RecieveData()
 {
     while (true)
     {
         ip = new IPEndPoint(IPAddress.Any, 0);
         var bytes  = UdpPlatform.Instance.RecieveData(ref ip);
         var length = bytes.Length;
         if (length == StructHelper.GetStructSize <AngleWithLocation>())
         {
             var angleAndLocation = StructHelper.BytesToStruct <AngleWithLocation>(bytes);
             var pitchRad         = StructHelper.Deg2Rad((float)angleAndLocation.Pitch);
             var rollRad          = StructHelper.Deg2Rad((float)angleAndLocation.Roll);
             var yawRad           = StructHelper.Deg2Rad((float)angleAndLocation.Yaw);
             var ipstr            = ip.ToString();
             if (ipstr.StartsWith("192.168.0.131") == false && ipstr.StartsWith("192.168.0.136") == false)
             {
                 this.angleWithLocation = angleAndLocation;
                 this.angle.Pitch       = -pitchRad;
                 this.angle.Roll        = -rollRad;
                 this.angle.Yaw         = yawRad;
                 if (this.IsSend == true)
                 {
                     UdpPlatform.Instance.SendData(this.angleWithLocation, TeachIp);
                 }
             }
             else
             {
                 this.otherAngleWithLocation = angleAndLocation;
                 this.otherAngle.Pitch       = pitchRad;
                 this.otherAngle.Roll        = rollRad;
                 this.otherAngle.Yaw         = yawRad;
             }
         }
         if (length == StructHelper.GetStructSize <TeachingCommand>())
         {
             command = StructHelper.BytesToStruct <TeachingCommand>(bytes);
             this.IsSendFromTeachingPlatform = command.IsStart == 1;
         }
     }
 }