Browse Source

解决获取路线json数据为空的问题,添加获取眼镜电量以及电池状态信息的方法

wangxin 4 years ago
parent
commit
2dcaefbaed

+ 42 - 39
Assets/XDKUnityCloudExamples/Common/Scripts/Test/TestJsonManage.cs

@@ -48,27 +48,30 @@ public class TestJsonManage : MonoBehaviour
     /// 处理Json 数据
     /// </summary>
     /// <param name="message"></param>
-    private void AnalysisJson( string message )
+    private void AnalysisJson(string message)
     {
         if (!state)
-            return; 
+            return;
         Debug.Log("Message  aaa  " + message);
-        if(message == ""||message == "Message")
+        if (message == "" || message == "Message")
         {
             Debug.LogError("未接受到json 数据");
             udpClient.SendIpToBluetooth();
             return;
         }
 
-        if(!isInit)    
-            return;
-        
-        isInit = false;
 
-         data = JsonControl.Instance().ToJsonData(message);
-    //    Debug.Log(data.navLines.Count);
+        data = JsonControl.Instance.ToJsonData(message);
+        //    Debug.Log(data.navLines.Count);
         if (data == null)
+        {
+            udpClient.SendIpToBluetooth();
             return;
+        }
+        if (!isInit)
+            return;
+        state = false;
+        isInit = false;
         //  Debug.Log(data.projectId);
         for (int i = 0; i < data.navLines.Count; i++)
         {
@@ -87,11 +90,11 @@ public class TestJsonManage : MonoBehaviour
     /// <summary>
     ///  设置路径
     /// </summary>
-    private void SettingLuJing( Root data)
+    private void SettingLuJing(Root data)
     {
         for (int i = 0; i < data.navLines.Count; i++)
         {
-            for (int j = 0; j < data.navLines[i].points.Count-1; j++)
+            for (int j = 0; j < data.navLines[i].points.Count - 1; j++)
             {
                 GameObject route = GameObject.Instantiate(meshRoute, meshRoute.transform.parent);
                 Vector3 endPos = new Vector3((float)data.navLines[i].points[j].X, 0, (float)data.navLines[i].points[j].Y);
@@ -105,24 +108,24 @@ public class TestJsonManage : MonoBehaviour
 
     }
 
-    private void SettingLuJing(NavLinesItem data , int Index)
+    private void SettingLuJing(NavLinesItem data, int Index)
     {
         GameObject routes = new GameObject("Route" + Index.ToString());
         routes.transform.parent = meshRoute.transform.parent;
         for (int j = 0; j < data.points.Count - 1; j++)
-            {
-                GameObject route = GameObject.Instantiate(meshRoute, routes.transform);
-                Vector3 endPos = new Vector3((float)data.points[j].X, 0, (float)data.points[j].Y);
-                Vector3 exitPos = new Vector3((float)data.points[j + 1].X, 0, (float)data.points[j + 1].Y);
-                Debug.Log(endPos + "   " + exitPos);      
-                route.GetComponent<TestRoute>().SetRoute(endPos, exitPos , Index);
-                route.SetActive(true);
+        {
+            GameObject route = GameObject.Instantiate(meshRoute, routes.transform);
+            Vector3 endPos = new Vector3((float)data.points[j].X, 0, (float)data.points[j].Y);
+            Vector3 exitPos = new Vector3((float)data.points[j + 1].X, 0, (float)data.points[j + 1].Y);
+            Debug.Log(endPos + "   " + exitPos);
+            route.GetComponent<TestRoute>().SetRoute(endPos, exitPos, Index);
+            route.SetActive(true);
 
 
             // 地图显示路径
             teshMap.ADDMapRoutePoint(endPos);
-                
-            }
+
+        }
         teshMap.ADDMapRoutePoint(new Vector3((float)data.points[data.points.Count - 1].X, 0, (float)data.points[data.points.Count - 1].Y));
         teshMap.SettingMapRoute();
 
@@ -130,7 +133,7 @@ public class TestJsonManage : MonoBehaviour
     }
     public void SettingLuJing(int Index)
     {
-        if(list_route ==null||list_route.Count<Index)
+        if (list_route == null || list_route.Count < Index)
         {
             Debug.LogError(" 未初始化路径 或 所选的路径不存在 ");
             return;
@@ -146,12 +149,12 @@ public class TestJsonManage : MonoBehaviour
 
     private void Update()
     {
-        if(state && UdpClient.logMBSRD!=null)
+        if (state && UdpClient.logMBSRD != null)
         {
             Debug.Log("              UdpClient.logMBSRD");
             UdpClient.logMBSRD(result);
-            UdpClient.logMBSRD -= AnalysisJson;
-            state = false;
+            //    UdpClient.logMBSRD -= AnalysisJson;
+            //state = false;
         }
 
         //times += Time.deltaTime;
@@ -171,7 +174,7 @@ public class TestJsonManage : MonoBehaviour
     ///  设置物体位置 和 触发范围 
     /// </summary>
     /// <param name="data"></param>
-    private void SettingObj( Root data)
+    private void SettingObj(Root data)
     {
         for (int i = 0; i < data.navLines.Count; i++)
         {
@@ -182,7 +185,7 @@ public class TestJsonManage : MonoBehaviour
                     switch (data.navLines[i].points[j].MN)
                     {
                         case "Transformers":
-                            QueryBox("P6", data.navLines[i].points[j]);  
+                            QueryBox("P6", data.navLines[i].points[j]);
                             break;
                         case "Car":
                             QueryBox("P4Car", data.navLines[i].points[j]);
@@ -213,7 +216,7 @@ public class TestJsonManage : MonoBehaviour
     /// <param name="Name"></param>
     /// <param name="points"></param>
     private void QueryBox(string Name, PointsItem points)
-    { 
+    {
         for (int i = 0; i < list_Obj.Count; i++)
         {
             if (list_Obj[i].name == Name)
@@ -225,7 +228,7 @@ public class TestJsonManage : MonoBehaviour
             }
         }
     }
-   
+
     /// <summary>
     /// 设置物体位置 和触发范围
     /// </summary>
@@ -233,33 +236,33 @@ public class TestJsonManage : MonoBehaviour
     /// <param name="obj">显示物体</param>
     /// <param name="crystal">水晶点</param>
     /// <param name="points"></param>
-    private void SettingBox( Transform box , Transform obj, Transform crystal,  PointsItem points )
+    private void SettingBox(Transform box, Transform obj, Transform crystal, PointsItem points)
     {
-        box.position = new Vector3((float)points.X, -1f, (float)points.Y);     
+        box.position = new Vector3((float)points.X, -1f, (float)points.Y);
         crystal.position = new Vector3(box.position.x, -3f, box.position.z);
-        obj.position = new Vector3((float)points.MP[0].X, points.MP[0].Z==-1?obj.position.y:(float)points.MP[0].Z, (float)points.MP[0].Y);
-       
+        obj.position = new Vector3((float)points.MP[0].X, points.MP[0].Z == -1 ? obj.position.y : (float)points.MP[0].Z, (float)points.MP[0].Y);
+
     }
- 
+
     private void SettingBox(Transform obj, MPItem mpItem)
     {
-        obj.position = new Vector3((float)mpItem.X,mpItem.Z==-1?obj.position.y: (float)mpItem.Z, (float)mpItem.Y);
-        
+        obj.position = new Vector3((float)mpItem.X, mpItem.Z == -1 ? obj.position.y : (float)mpItem.Z, (float)mpItem.Y);
+
     }
 
     private void SettingBox(Transform obj, Vector3 mpItem)
     {
         Debug.Log(obj.name);
-        obj.position = new Vector3((float)mpItem.x,  obj.position.y, (float)mpItem.y);
+        obj.position = new Vector3((float)mpItem.x, obj.position.y, (float)mpItem.y);
         list_Crystal[0].position = new Vector3(obj.position.x, -2.5f, obj.position.z);
-       
+
     }
 
     IEnumerator Test()
     {
         WWW www = new WWW(Application.streamingAssetsPath + "/projectInfo.json");
         yield return www;
-        string  message = www.text;
+        string message = www.text;
         Debug.Log(message);
         AnalysisJson(message);
     }

+ 14 - 7
Assets/XDKUnityCloudExamples/Common/UDP/Json/JsonControl.cs

@@ -10,22 +10,29 @@ using UnityEngine;
 public class JsonControl : MonoBehaviour
 {
     private static JsonControl instance;
+    private static readonly object padlock = new object();
 
-
-
-    private JsonControl()
+    public static JsonControl Instance
     {
+        get
+        {
+            lock(padlock)
+            {
+                if (instance == null)
+                    instance = new JsonControl();
 
+                return instance;
+            }
+        }
     }
 
-    public static JsonControl Instance()
+    private JsonControl()
     {
-        if (instance == null)
-            instance = new JsonControl();
 
-        return instance;
     }
 
+   
+
     /// <summary>
     ///  Json 解析
     /// </summary>

+ 12 - 4
Assets/XDKUnityCloudExamples/Common/UDP/Udp/NetProtocol.cs

@@ -2,7 +2,7 @@
 
 public class NetProtocol
 {
-    
+
 }
 
 public class SendNetConnectProtocolBlue
@@ -27,9 +27,9 @@ public class SendNetConnectPointCloud
 
     public string positionType { get; set; }
 
-  //  public string viewpointId { get; set; }
+    //  public string viewpointId { get; set; }
 
-    public Position position ;
+    public Position position;
 
     public SendNetConnectPointCloud()
     {
@@ -60,6 +60,14 @@ public class ReceiveNetConnectProtocol
     public string Tagid { get; set; }
 }
 
+public class SendNetConnectElectricity
+{
+    public string sn;
+    public string cmd = "showElectricity";
+    public int electricity;
+    public string status;
+
+}
 public class ReceiveMessage
 {
     /// <summary>
@@ -86,7 +94,7 @@ public class ReceiveMessage
 
 public class Position
 {
-    
+
 
     /// <summary>
     /// 

+ 69 - 16
Assets/XDKUnityCloudExamples/Common/UDP/Udp/UdpClient.cs

@@ -1,4 +1,5 @@
 using LitJson;
+using System.Collections;
 //引入库
 using System.Net;
 using System.Net.Sockets;
@@ -44,15 +45,15 @@ public class UdpClient : MonoBehaviour
     void InitSocket()
     {
         //定义连接的服务器ip和端口,可以是本机ip,局域网,互联网
-        //ipSocketEnd = new IPEndPoint(IPAddress.Parse("192.168.140.123"), 9981);
+        ipSocketEnd = new IPEndPoint(IPAddress.Parse("192.168.140.123"), 9981);
 
         ipSocketPC = new IPEndPoint(IPAddress.Parse("192.168.3.66"), 9981);
-        ipSocketEnd = new IPEndPoint(IPAddress.Parse("192.168.3.66"), 9981);
+        // ipSocketEnd = new IPEndPoint(IPAddress.Parse("192.168.3.66"), 9981);
 
         ipSocketPCTest = new IPEndPoint(IPAddress.Parse("192.168.178.128"), 9981);
 
         ipEnd = new IPEndPoint(IPAddress.Parse(AddressIP), 9981);
-       // ipEnd = new IPEndPoint(IPAddress.Parse("192.168.220.178"), 9981);
+        // ipEnd = new IPEndPoint(IPAddress.Parse("192.168.220.178"), 9981);
         //定义套接字类型,在主线程中定义
         socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
         socket.Bind(ipEnd);
@@ -74,7 +75,7 @@ public class UdpClient : MonoBehaviour
         sendData = Encoding.ASCII.GetBytes(sendStr);
         //发送给指定服务端
         socket.SendTo(sendData, sendData.Length, SocketFlags.None, ipSocketEnd);
-      //  socket.SendTo(sendData, sendData.Length, SocketFlags.None, ipSocketEnd);
+        //  socket.SendTo(sendData, sendData.Length, SocketFlags.None, ipSocketEnd);
     }
 
     void SocketSendPointCloud(string sendStr)
@@ -84,8 +85,8 @@ public class UdpClient : MonoBehaviour
         //数据类型转换
         sendData = Encoding.ASCII.GetBytes(sendStr);
         //发送给指定服务端
-        Debug.Log(sendStr);
-        socket.SendTo(sendData , ipSocketPC);
+        //Debug.Log(sendStr);
+        socket.SendTo(sendData, ipSocketPC);
         socket.SendTo(sendData, ipSocketPCTest);
 
     }
@@ -104,7 +105,8 @@ public class UdpClient : MonoBehaviour
             //输出接收到的数据
             recvStr = Encoding.ASCII.GetString(recvData, 0, recvLen);
             TestJsonManage.result = recvStr.Trim();
-            Debug.Log(TestJsonManage.state + "          " +"    "+ logMBSRD);
+            // TestUDP.result = recvStr.Trim();
+            Debug.Log(TestJsonManage.state + "          " + "    " + logMBSRD);
             // 当前连接 只需要传输一次数据 传输完成后关闭    
         }
     }
@@ -137,6 +139,7 @@ public class UdpClient : MonoBehaviour
         }
         InitSocket(); //在这里初始化
         SendIpToBluetooth();//发送targeId,端口号
+        InvokeRepeating("SendIpToElectric", 0, 60f);
     }
 
     // Update is called once per frame
@@ -151,7 +154,7 @@ public class UdpClient : MonoBehaviour
         sendNet.Port = 9981;
         string jsonData = JsonMapper.ToJson(sendNet);
 
-        Debug.Log(jsonData);
+        //Debug.Log(jsonData);
         SocketSend(jsonData);
     }
 
@@ -178,17 +181,17 @@ public class UdpClient : MonoBehaviour
         //sendNet.viewpointId = viewpointId;
         //viewpointId = "null";
         string jsonData = JsonMapper.ToJson(sendNet);
-       // Debug.Log(jsonData);
+        // Debug.Log(jsonData);
         SocketSendPointCloud(jsonData);
     }
 
-//projectId:"<uuid>",
-//sn:"<string>",
-//cmdType:"increasePointTrigger",
-//viewpointId:"<uuid>",
-//triggerTs:<int64>
-//
-    public void SendIpToPointTrigger( string pointId , long ts)
+    //projectId:"<uuid>",
+    //sn:"<string>",
+    //cmdType:"increasePointTrigger",
+    //viewpointId:"<uuid>",
+    //triggerTs:<int64>
+    //
+    public void SendIpToPointTrigger(string pointId, long ts)
     {
         if (!isOpen) return;
         SendNetConnectPointTrigger sendNet = new SendNetConnectPointTrigger();
@@ -218,6 +221,56 @@ public class UdpClient : MonoBehaviour
         //Debug.Log("========================================="+jsonData);
         SocketSendPointCloud(jsonData);
     }
+
+    /* 电量数据结构
+     * sn: '3ewqeq2e2qewe'
+     * cmd: 'showElectricity'
+     * electricity: 20
+     * status:""
+    */
+    /// <summary>
+    /// 向服务器发送眼镜的剩余电量以及电池状态
+    /// 在start函数中使用InvokeRepeating60秒调用一次
+    /// </summary>
+    public void SendIpToElectric()
+    {
+        if (!isOpen) return;
+
+        int electricity = (int)((SystemInfo.batteryLevel) * 100f);
+        BatteryStatus batterystate = SystemInfo.batteryStatus;
+        string state = "";
+        switch (batterystate)
+        {
+            case BatteryStatus.Unknown:
+                state = "无法确定设备的电池状态";
+                break;
+            case BatteryStatus.Charging:
+                state = "设备已插入并正在充电";
+                break;
+            case BatteryStatus.Discharging:
+                state = "设备已拔出并放电";
+                break;
+            case BatteryStatus.NotCharging:
+                state = "设备已插入,但无法充电";
+                break;
+            case BatteryStatus.Full:
+                state = "设备已插入并且电池已充满";
+                break;
+            default:
+                state = "无法确定设备的电池状态";
+                break;
+        }
+        SendNetConnectElectricity sendNet = new SendNetConnectElectricity();
+        sendNet.sn = DeviceSN.GetInstance().SendSerialBy16();
+        sendNet.electricity = electricity;
+        sendNet.status = state;
+        string jsonData = JsonMapper.ToJson(sendNet);
+
+        SocketSendPointCloud(jsonData);
+        //SocketSend(jsonData);
+        // Debug.Log("SendIpToElectric");
+    }
+
     void OnApplicationQuit()
     {
         SocketQuit();