DGJ 1 year ago
parent
commit
e4ad090211
29 changed files with 1463 additions and 110 deletions
  1. 14 3
      Assets/DownLoadXR/DownLoadXRManager.cs
  2. 1 1
      Assets/FrameWork/AR.prefab
  3. 4 2
      Assets/FrameWork/Login/Scripts/LoginDataManager.cs
  4. 2 0
      Assets/FrameWork/Login/Scripts/LoginManager.cs
  5. 6 1
      Assets/FrameWork/Login/Scripts/SmallLoginItem.cs
  6. 121 29
      Assets/FrameWork/ProjectManager/Scripts/JinRuRenwu.cs
  7. 216 8
      Assets/FrameWork/ProjectManager/Scripts/Project/XunJian/XunJianDataManager.cs
  8. 24 2
      Assets/FrameWork/ProjectManager/Scripts/Project/XunJian/进入任务/ARSaoTuManager.cs
  9. 42 8
      Assets/FrameWork/ProjectManager/Scripts/Project/XunJian/进入任务/CaoZuoLanManager.cs
  10. 83 27
      Assets/FrameWork/ProjectManager/Scripts/Project/XunJian/进入任务/ChangeCameraSaoMiao.cs
  11. 38 0
      Assets/FrameWork/ProjectManager/Scripts/Project/XunJian/进入任务/RenWuListItemWindow.cs
  12. 13 5
      Assets/FrameWork/ProjectManager/Scripts/Project/XunJian/进入任务/RenWuListWindow.cs
  13. 137 0
      Assets/FrameWork/ProjectManager/Scripts/Project/XunJian/进入任务/RenWuTypeWindow.cs
  14. 25 1
      Assets/FrameWork/ProjectManager/Scripts/Project/XunJianLieBiaoItem.cs
  15. 2 0
      Assets/FrameWork/ProjectManager/Scripts/Project/XunJianLieBiaoWindow.cs
  16. 25 0
      Assets/FrameWork/ProjectManager/Scripts/TopManager.cs
  17. 2 1
      Assets/FrameWork/ProjectManager/Top.prefab
  18. 15 3
      Assets/FrameWork/ProjectManager/项目.prefab
  19. 47 1
      Assets/FrameWork/Scenes/Edustry.unity
  20. 8 0
      Assets/Packages.meta
  21. 85 0
      Assets/Scripts/GetHttpTimer.cs
  22. 11 0
      Assets/Scripts/GetHttpTimer.cs.meta
  23. 7 1
      Assets/Scripts/HttpEdustryAction.cs
  24. 301 0
      Assets/Scripts/MQTTClient.cs
  25. 11 0
      Assets/Scripts/MQTTClient.cs.meta
  26. 164 0
      Assets/Scripts/MQTTManager.cs
  27. 11 0
      Assets/Scripts/MQTTManager.cs.meta
  28. 31 16
      Assets/Scripts/RoomFileMinio.cs
  29. 17 1
      Assets/XR/Settings/OpenXR Package Settings.asset

+ 14 - 3
Assets/DownLoadXR/DownLoadXRManager.cs

@@ -10,13 +10,16 @@ public class DownLoadXRManager
     public static Dictionary<string, byte[]> downLoadCache = new Dictionary<string, byte[]>();
     public static bool DownLoadForBytes(string msg, Action<byte[]> bytes, Action<float> presson)
     {
+
+      
         JsonData data = JsonMapper.ToObject(msg);
         if(data["drive"].ToString()== "minio")
         {
-            string bucket = data["data"]["bucket"].ToString();
-            string objectName = data["data"]["bucket"].ToString();
+            //string bucket = data["data"]["bucket"].ToString();
+            //string objectName = data["data"]["bucket"].ToString();
             string Url = data["url"].ToString();
-            RoomFileMinio.Instance.getFile(bucket, objectName, (RoomFileMinio.RoomFileData roomFile) =>
+            Debug.Log("DGJ ===> DownLoadForBytes " + msg);
+            RoomFileMinio.Instance.getFile(RoomFileMinio.Instance.bucket, Url, (RoomFileMinio.RoomFileData roomFile) =>
             {
                 bytes?.Invoke(roomFile.bytes);             
             });
@@ -164,6 +167,14 @@ public class DownLoadXRManager
         data["url"] = url;
         return data.ToJson();
     }
+
+    public static string getTestData(string url,string drive)
+    {
+        JsonData data = new JsonData();
+        data["drive"] = drive;
+        data["url"] = url;
+        return data.ToJson();
+    }
     public class DownLoadUrlConfig
     {
         public string url;

+ 1 - 1
Assets/FrameWork/AR.prefab

@@ -334,7 +334,7 @@ MonoBehaviour:
   CameraSize: {x: 1280, y: 960}
   CameraOpenMethod: 1
   CameraType: 1
-  CameraIndex: 2
+  CameraIndex: 0
   cameraPreference: 0
 --- !u!1 &2351110680108509795
 GameObject:

+ 4 - 2
Assets/FrameWork/Login/Scripts/LoginDataManager.cs

@@ -43,7 +43,7 @@ public class LoginDataManager:Singleton<LoginDataManager>
             {
                 Debug.Log("DGJ ==> "+ jObject["data"]["list"].ToString());
 
-                Debug.Log(JsonConvert.DeserializeObject<List<AccountData2>>(jObject["data"]["list"].ToString()).Count);
+                //Debug.Log(JsonConvert.DeserializeObject<List<AccountData>>(jObject["data"]["list"].ToString()).Count);
                 ldata.AddRange(JsonConvert.DeserializeObject<List<AccountData>>(jObject["data"]["list"].ToString()));
                 Debug.Log(ldata.Count);
                 WindowsManager.Instance.StartCoroutine(testBack(callback));
@@ -184,6 +184,8 @@ public class AccountData2
 public class AccountAvatar
 {
     public int id { get; set; }
-    public string name { get; set; }
+ //   public string name { get; set; }
     public string path { get; set; }
+
+    public string host { get; set; }
 }

+ 2 - 0
Assets/FrameWork/Login/Scripts/LoginManager.cs

@@ -177,6 +177,8 @@ public class LoginManager : MonoSingleton<LoginManager>
             TimerMgr.Instance.CreateTimer(() => { testOk(); }, 1f);
             isTongxun = true;
             ShowInfoTipManager.Instance.showTip("正在登录,请稍后");
+
+            RoomFileMinio.Instance.islogin = true;
         }
         else
         {

+ 6 - 1
Assets/FrameWork/Login/Scripts/SmallLoginItem.cs

@@ -22,7 +22,12 @@ public class SmallLoginItem : MonoBehaviour
             ad.avatar.path = Application.streamingAssetsPath + "/icon/1.png";
         }
 
-        DownLoadXRManager.DownLoadForTexture(DownLoadXRManager.getTestData(( ad.avatar.path)), (Texture2D tex) => {
+        //if(ad.avatar.path!=null)
+        //{
+        //    RoomFileMinio.Instance.getFile()
+        //}
+
+        DownLoadXRManager.DownLoadForTexture(DownLoadXRManager.getTestData((ad.avatar.host+"/"+ ad.avatar.path)), (Texture2D tex) => {
             texture = tex;
             iconImg.texture = tex;
         }, null);

+ 121 - 29
Assets/FrameWork/ProjectManager/Scripts/JinRuRenwu.cs

@@ -10,7 +10,8 @@ using static XunJianDataManager;
 
 public class JinRuRenwu : WindowSingleton<JinRuRenwu>
 {
-    RenWuItem rwitem;
+    //RenWuItem rwitem;
+    XunJianTasks rwitem;
     public GameObject WenJianLan;
     public TextMeshProUGUI info;
 
@@ -138,10 +139,12 @@ public class JinRuRenwu : WindowSingleton<JinRuRenwu>
         switch (XunJianDataManager.Instance.chooseXunJian.renwuModelType)
         {
             case RenWuModelType.SaoTu:
-                ChangeCameraSaoMiao.Instance.showsaomiao(XunJianDataManager.Instance.chooseXunJian.itemList[0]);
+                //ChangeCameraSaoMiao.Instance.showsaomiao(XunJianDataManager.Instance.chooseXunJian.itemList[0]);
+                ChangeCameraSaoMiao.Instance.showsaomiao(XunJianDataManager.Instance.chooseXunJian.tasksList[0]);
                 break;
             case RenWuModelType.DingWeiBan:
-                ChangeCameraSaoMiao.Instance.showsaomiao(XunJianDataManager.Instance.chooseXunJian.itemList[0]);
+                // ChangeCameraSaoMiao.Instance.showsaomiao(XunJianDataManager.Instance.chooseXunJian.itemList[0]);
+                ChangeCameraSaoMiao.Instance.showsaomiao(XunJianDataManager.Instance.chooseXunJian.tasksList[0]);
                 break;
         }
         //  TimerMgr.Instance.CreateTimer(()=> { showInit(); },5f);
@@ -155,7 +158,8 @@ public class JinRuRenwu : WindowSingleton<JinRuRenwu>
         }
         Debug.Log("showshowshowshowshowshow");
         //updateListRef();
-        rwitem = XunJianDataManager.Instance.chooseXunJian.itemList[XunJianDataManager.Instance.chooseXunJian.nowIndex+1];
+        // rwitem = XunJianDataManager.Instance.chooseXunJian.itemList[XunJianDataManager.Instance.chooseXunJian.nowIndex+1];
+        rwitem = XunJianDataManager.Instance.chooseXunJian.tasksList[XunJianDataManager.Instance.chooseXunJian.nowIndex + 1];
         if (XunJianDataManager.Instance.chooseXunJian.renwuModelType == RenWuModelType.DianYun)
         {
             LineManager.Instance.setRoad(rwitem.roadList);
@@ -178,50 +182,111 @@ public class JinRuRenwu : WindowSingleton<JinRuRenwu>
         ImageBT.SetActive(false);
         Image2BT.SetActive(false);
         TextBT.SetActive(false);
-        rwitem = XunJianDataManager.Instance.chooseXunJian.itemList[XunJianDataManager.Instance.chooseXunJian.nowIndex];
-
+        // rwitem = XunJianDataManager.Instance.chooseXunJian.itemList[XunJianDataManager.Instance.chooseXunJian.nowIndex];
+        rwitem = XunJianDataManager.Instance.chooseXunJian.tasksList[XunJianDataManager.Instance.chooseXunJian.nowIndex];
         indexText.text = (rwitem.index+1).ToString();
-        info.text = rwitem.info;
-        if (rwitem.typeList.Count > 0)
+        // info.text = rwitem.info;
+        info.text = rwitem.title;
+        #region MyRegion
+        //if (rwitem.typeList.Count > 0)
+        //{
+        //    int img = 0;
+        //    for (int i = 0; i < rwitem.typeList.Count; i++)
+        //    {
+        //        switch (rwitem.typeList[i].type)
+        //        {
+        //            case RenWuType.Image:
+        //                if(img==0)
+        //                {
+        //                    ImageBT.SetActive(true);
+        //                    Image.GetComponent<RenWuTypeWindow>().updateData(rwitem.typeList[i]);
+        //                }
+        //                else
+        //                {
+
+        //                    Image2BT.SetActive(false);
+        //                    Image2.GetComponent<RenWuTypeWindow>().updateData(rwitem.typeList[i]);
+        //                }
+        //                img++;
+        //                break;
+        //            case RenWuType.Model:
+        //                ModelBT.SetActive(true);
+        //                Model.GetComponent<RenWuTypeWindow>().updateData(rwitem.typeList[i]);
+        //                break;
+        //            case RenWuType.Text:
+        //                TextBT.SetActive(true);
+        //                Text.GetComponent<RenWuTypeWindow>().updateData(rwitem.typeList[i]);
+        //                break;
+        //            case RenWuType.Video:
+        //                VideoBT.SetActive(true);
+        //                Video.GetComponent<RenWuTypeWindow>().updateData(rwitem.typeList[i]);
+        //                break;
+        //        }
+        //    }
+
+        //    if(rwitem.typeList.Count < 2)
+        //    {
+        //        AllBT.SetActive(false);
+        //    }else
+        //    {
+
+        //        AllBT.SetActive(true);
+        //    }
+
+        //    WenJianLan.SetActive(true);
+        //}
+        //else
+        //{
+        //    WenJianLan.SetActive(false);
+        //} 
+        #endregion
+
+
+        if (rwitem.resources.Count > 0)
         {
             int img = 0;
-            for (int i = 0; i < rwitem.typeList.Count; i++)
+            for (int i = 0; i < rwitem.resources.Count; i++)
             {
-                switch (rwitem.typeList[i].type)
+                switch (rwitem.resources[i].loadingMethod)
                 {
-                    case RenWuType.Image:
-                        if(img==0)
+                    case 1:
+                        if (img == 0)
                         {
                             ImageBT.SetActive(true);
-                            Image.GetComponent<RenWuTypeWindow>().updateData(rwitem.typeList[i]);
+                            Image.GetComponent<RenWuTypeWindow>().updateData(rwitem.resources[i]);
                         }
                         else
                         {
 
                             Image2BT.SetActive(false);
-                            Image2.GetComponent<RenWuTypeWindow>().updateData(rwitem.typeList[i]);
+                            Image2.GetComponent<RenWuTypeWindow>().updateData(rwitem.resources[i]);
                         }
                         img++;
                         break;
-                    case RenWuType.Model:
+                    case 2:
                         ModelBT.SetActive(true);
-                        Model.GetComponent<RenWuTypeWindow>().updateData(rwitem.typeList[i]);
+                        Model.GetComponent<RenWuTypeWindow>().updateData(rwitem.resources[i]);
                         break;
-                    case RenWuType.Text:
+                    case -1:
                         TextBT.SetActive(true);
-                        Text.GetComponent<RenWuTypeWindow>().updateData(rwitem.typeList[i]);
+                        Text.GetComponent<RenWuTypeWindow>().updateData(rwitem.resources[i]);
                         break;
-                    case RenWuType.Video:
+                    case 3:
                         VideoBT.SetActive(true);
-                        Video.GetComponent<RenWuTypeWindow>().updateData(rwitem.typeList[i]);
+                        Video.GetComponent<RenWuTypeWindow>().updateData(rwitem.resources[i]);
                         break;
                 }
             }
 
-            if(rwitem.typeList.Count < 2)
+            //if (rwitem.typeList.Count < 2)
+            //{
+            //    AllBT.SetActive(false);
+            //}
+            if (rwitem.resources.Count < 2)
             {
                 AllBT.SetActive(false);
-            }else
+            }
+            else
             {
 
                 AllBT.SetActive(true);
@@ -243,11 +308,37 @@ public class JinRuRenwu : WindowSingleton<JinRuRenwu>
     {
         List<GameObject> list = new List<GameObject>();
         int img = 0;
-        for (int i = 0; i < rwitem.typeList.Count; i++)
-        {
-            switch (rwitem.typeList[i].type)
+        //for (int i = 0; i < rwitem.typeList.Count; i++)
+        //{
+        //    switch (rwitem.typeList[i].type)
+        //    {
+        //        case RenWuType.Image:
+        //            if (img == 0)
+        //            {
+        //                list.Add(Image);
+        //            }
+        //            else
+        //            {
+        //                list.Add(Image2);
+        //            }
+        //            img++;
+        //            break;
+        //        case RenWuType.Model:
+        //            list.Add(Model);
+        //            break;
+        //        case RenWuType.Text:
+        //            list.Add(Text);
+        //            break;
+        //        case RenWuType.Video:
+        //            list.Add(Video);
+        //            break;
+        //    }
+        //}
+        for (int i = 0; i < rwitem.resources.Count; i++)
+        {
+            switch (rwitem.resources[i].loadingMethod)
             {
-                case RenWuType.Image:
+                case 1:
                     if (img == 0)
                     {
                         list.Add(Image);
@@ -258,17 +349,18 @@ public class JinRuRenwu : WindowSingleton<JinRuRenwu>
                     }
                     img++;
                     break;
-                case RenWuType.Model:
+                case 2:
                     list.Add(Model);
                     break;
-                case RenWuType.Text:
+                case -1:
                     list.Add(Text);
                     break;
-                case RenWuType.Video:
+                case 3:
                     list.Add(Video);
                     break;
             }
         }
+
         return list;
     }
 

+ 216 - 8
Assets/FrameWork/ProjectManager/Scripts/Project/XunJian/XunJianDataManager.cs

@@ -4,6 +4,7 @@ using Newtonsoft.Json.Linq;
 using System;
 using System.Collections;
 using System.Collections.Generic;
+using System.Linq;
 using UnityEngine;
 using XRTool.Util;
 using static easyar.ImageTargetController;
@@ -92,7 +93,8 @@ public class XunJianDataManager : Singleton<XunJianDataManager>
         xj.projectType = "未开始 ";
         xj.projectTime = "2023/11/23 10:53 ";
         xj.renwuModelType = RenWuModelType.SaoTu;
-        xj.itemList = getRenwuData();
+        //  xj.itemList = getRenwuData();
+        xj.tasksList = new List<XunJianTasks>();
         xj.people = "员工A";
         return xj;
     }
@@ -108,7 +110,8 @@ public class XunJianDataManager : Singleton<XunJianDataManager>
         xj.projectType = "未开始 ";
         xj.projectTime = "2023/11/23 10:53 ";
         xj.renwuModelType = RenWuModelType.DianYun;
-        xj.itemList = getRenwuData();
+        // xj.itemList = getRenwuData();
+        xj.tasksList = new List<XunJianTasks>();
         xj.people = "员工B";
 
         return xj;
@@ -125,7 +128,8 @@ public class XunJianDataManager : Singleton<XunJianDataManager>
         xj.projectType = "未开始 ";
         xj.projectTime = "2023/11/23 10:53 ";
         xj.renwuModelType = RenWuModelType.None;
-        xj.itemList = getRenwuData();
+        // xj.itemList = getRenwuData();
+        xj.tasksList = new List<XunJianTasks>();
         xj.people = "员工C";
         xj.listWall = getWallData();
         return xj;
@@ -392,7 +396,89 @@ public class XunJianDataManager : Singleton<XunJianDataManager>
                     xjDataList.Add(testData());
                     xjDataList.Add(testData2());
                 }
-                xjDataList.AddRange(XunJianDataParetListData(data));
+
+                /*
+      * 1是否为异常巡检>2是否逾期>3是否更新>4接收时间
+         1. 异常巡检项目>常规巡检项目
+         2. 已逾期>即将开始>未到逾期提醒>进行中>已完成
+         3. 新项目>已更新>未更新项目
+         4. 新接收时间>老接收时间
+
+
+         新项目 : 接受发布时间在24小时内
+     */
+                // 排序
+
+
+
+                // var data2 = data.OrderBy(XunJianData => XunJianData.projectType);
+                //                   .ThenBy(XunJianData => XunJianData.projectState)
+                //                   .ThenBy(XunJianData => XunJianData.projectTime);
+
+                for (int i = 0; i < data.Count; i++)
+                {
+                    int sortStatus = 10;
+                    switch (data[i].status)
+                    {
+                        case 1:
+                            sortStatus = 3;
+                            break;
+                        case 2:
+                            sortStatus = 2;
+                            break;
+                        case 3:
+                            sortStatus = 1;
+                            break;
+                        case 4:
+                            sortStatus = 4;
+                            break;
+                        case 5:
+                            sortStatus = 5;
+                            break;
+                        default:
+                            break;
+                    }
+
+                    int sortType = 10;
+                    if(data[i].publishTime == data[i].firstPublishTime)
+                    {
+                        DateTime publishTime = UnixTimeStampToDateTime(data[i].publishTime);
+                        DateTime nowTime = UnixTimeStampToDateTime(GetHttpTimer.Instance.timestamp);
+
+                        if (IsWithin24Hours(publishTime, nowTime))
+                        {
+                            sortType = 1;
+                        }
+                        else
+                        {
+                            sortType = 3;
+                        }
+                    }
+                    else
+                    {
+                        sortType = 2;
+                    }
+                    data[i].sort_projectStatus = sortStatus;
+                    data[i].sort_status = sortStatus;
+
+
+                    
+                }
+
+                var data2 = data.OrderByDescending(XunJianData => XunJianData.type)
+                                .ThenBy(XunJianData => XunJianData.sort_status)
+                                .ThenBy(XunJianData => XunJianData.sort_projectStatus)
+                                .ThenByDescending(XunJianData => XunJianData.publishTime);
+
+                List<XunJianData> data3 = new List<XunJianData>();
+                foreach (XunJianData item in data2)
+                {
+                    data3.Add(item);
+                }
+
+                Debug.Log("DGJ  ===>  排序后   " + JsonConvert.SerializeObject(data3));
+
+                xjDataList.AddRange(XunJianDataParetListData(data3));
 
 
                 peopleList = new Dictionary<string, List<XunJianListData>>();
@@ -422,6 +508,11 @@ public class XunJianDataManager : Singleton<XunJianDataManager>
                     }
                 }
 
+          
+
+
+
+
                 callback(xjDataList);
             }
             else
@@ -453,14 +544,43 @@ public class XunJianDataManager : Singleton<XunJianDataManager>
             xj.projectState = ((ProjectStatus)data[i].status).ToString();
             xj.projectType = ((ProjectType)data[i].type).ToString();
             xj.projectTime = data[i].inspectionTime.ToString();
-            xj.updateState = data[i].status > 2 ? "已更新" : "新项目";
+            xj.updateState = data[i].status > 3 ? "已更新" : "新项目";
             xj.listWall = data[i].listWall;
+          
+            switch (data[i].regionMapType)
+            {
+                case 0:
+                    xj.renwuModelType = RenWuModelType.None;
+                    break;
+                case 1:
+                    xj.renwuModelType = RenWuModelType.SaoTu;
+                    break;
+                case 2:
+                    xj.renwuModelType = RenWuModelType.DianYun;
+                    break;
+                default:
+                    break;
+            }
             listData.Add(xj);
         }
 
         return listData;
     }
 
+    // 将Unix时间戳转换为DateTime对象
+    DateTime UnixTimeStampToDateTime(long unixTimeStamp)
+    {
+        DateTime epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
+        return epoch.AddSeconds(unixTimeStamp).ToLocalTime();
+    }
+
+    // 判断两个时间是否相差在24小时以内
+    bool IsWithin24Hours(DateTime dateTime1, DateTime dateTime2)
+    {
+        TimeSpan difference = dateTime2 - dateTime1;
+        return Math.Abs(difference.TotalHours) <= 24;
+    }
+
     public class XunJianListData
     {
         public int nowIndex = 0;
@@ -471,8 +591,10 @@ public class XunJianDataManager : Singleton<XunJianDataManager>
         public string projectState;
         public string projectType;
         public string projectTime;
-        public List<RenWuItem> itemList;
+       // public List<RenWuItem> itemList;
+        public List<XunJianTasks> tasksList;
         public RenWuModelType renwuModelType;
+        public int regionMapType; 
         public string url;
         public string people = "未知员工";
         public List<Wall> listWall;
@@ -487,6 +609,27 @@ public class XunJianDataManager : Singleton<XunJianDataManager>
         public int type { get; set; }
         public int status { get; set; }
         public int inspectionTime { get; set; }
+        /// <summary>
+        /// 第一次发布时间
+        /// </summary>
+        public int firstPublishTime { get; set; }
+        /// <summary>
+        /// 当前发布时间
+        /// </summary>
+        public int publishTime { get; set; }
+        /// <summary>
+        ///  排序用的 状态  已逾期>即将开始>未到逾期提醒>进行中>已完成
+        /// </summary>
+        public int sort_status { get; set; }
+        /// <summary>
+        ///  当前项目状态 新项目>已更新>未更新项目
+        /// </summary>
+        public int sort_projectStatus { get; set; }
+
+        /// <summary>
+        /// 区域地图类型 默认0  1:2d  2:3d 点云
+        /// </summary>
+        public int regionMapType { get; set; }
         public List<EmployeesData> listEmployees { get; set; }
 
         public List<Wall> listWall { get; set; }
@@ -508,7 +651,8 @@ public class XunJianDataManager : Singleton<XunJianDataManager>
 
     public void gotoNext()
     {
-        if(chooseXunJian.itemList.Count-1 > chooseXunJian.nowIndex)
+        // if(chooseXunJian.itemList.Count-1 > chooseXunJian.nowIndex)
+        if (chooseXunJian.tasksList.Count - 1 > chooseXunJian.nowIndex)
         {
             chooseXunJian.nowIndex++;
             if (JinRuRenwu.Instance != null)
@@ -520,7 +664,7 @@ public class XunJianDataManager : Singleton<XunJianDataManager>
                 RenWuListWindow.Instance.UpdateData();
             }
             if (CaoZuoLanManager.Instance)
-                CaoZuoLanManager.Instance.nextInteractable(false);
+                CaoZuoLanManager.Instance.nextInteractable(chooseXunJian.tasksList[chooseXunJian.nowIndex].confirmNormal);
         }
         else
         {
@@ -564,6 +708,70 @@ public class XunJianDataManager : Singleton<XunJianDataManager>
 
         
     }
+
+    public class XunJianTasks
+    {
+        /// <summary>
+        /// // 任务ID
+        /// </summary>
+        public int id { get; set; } 
+        /// <summary>
+        ///  任务类型
+        /// </summary>
+        public int type { get; set; }
+        /// <summary>
+        /// 任务标题
+        /// </summary>
+        public string title { get; set; }
+        /// <summary>
+        ///  任务详情描述
+        /// </summary>
+        public string description { get; set; }
+        /// <summary>
+        /// 定位方式 1:标识图 2:定位器   目前两个都走一套逻辑
+        /// </summary>
+        public int targetingMethod { get; set; }
+        /// <summary>
+        /// 定位器编号
+        /// </summary>
+        public string locatorNumber { get; set; }
+        /// <summary>
+        /// 确认状态   如果是true 可以直接点下一步  
+        /// </summary>
+        public bool confirmNormal { get; set; }
+        /// <summary>
+        ///  识别图列表
+        /// </summary>
+        public List<MinioResources> diagram { get; set; }
+        /// <summary>
+        ///  资源文件列表
+        /// </summary>
+        public List<MinioResources> resources { get; set; }
+        /// <summary>
+        ///  当前项目任务下标
+        /// </summary>
+        public int index { get; set; }
+        /// <summary>
+        ///  任务路径
+        /// </summary>
+        public List<Vector3> roadList { get; set; }
+
+         public ImageFileSourceData imageData { get; set; }
+
+        public RenWuState state =  RenWuState.None;
+    }
+
+    public class MinioResources
+    {
+        public int id { get; set; }
+        public string path { get; set; }
+        public string uuid { get; set; }
+
+        public int loadingMethod { get; set; }
+     //   public string name { get; set; }
+    }
+
+
     public class RenWuTypeModel
     {
         public RenWuType type;

+ 24 - 2
Assets/FrameWork/ProjectManager/Scripts/Project/XunJian/进入任务/ARSaoTuManager.cs

@@ -18,6 +18,21 @@ public class ARSaoTuManager : MonoSingleton<ARSaoTuManager>
         closeDevice();
     }
 
+    private void Update()
+    {
+        // °´KÌø¹ýɨͼ
+        if (Input.GetKeyDown(KeyCode.K))
+        {
+            if (XunJianDataManager.Instance.chooseXunJian.tasksList[XunJianDataManager.Instance.chooseXunJian.nowIndex + 1].imageData != null)
+            {
+                Debug.Log("showshowshowshowshowshow");
+                JinRuRenwu.Instance.show();
+                closeDevice();
+            }
+
+        }
+    }
+
     public void closeDevice()
     {
         Debug.Log("¹Ø±ÕcloseDevice");
@@ -35,14 +50,21 @@ public class ARSaoTuManager : MonoSingleton<ARSaoTuManager>
         {
             arg1.TargetFound += ()=> {
 
-                if (XunJianDataManager.Instance.chooseXunJian.itemList[XunJianDataManager.Instance.chooseXunJian.nowIndex + 1].imageData!=null&&arg1.name== "TargetImage_" + XunJianDataManager.Instance.chooseXunJian.itemList[ XunJianDataManager.Instance.chooseXunJian.nowIndex+1].imageData.Name)
+                //if (XunJianDataManager.Instance.chooseXunJian.itemList[XunJianDataManager.Instance.chooseXunJian.nowIndex + 1].imageData!=null&&arg1.name== "TargetImage_" + XunJianDataManager.Instance.chooseXunJian.itemList[ XunJianDataManager.Instance.chooseXunJian.nowIndex+1].imageData.Name)
+                //{
+                //    Debug.Log("showshowshowshowshowshow");
+                //    JinRuRenwu.Instance.show();
+                //    closeDevice();
+                //}
+
+
+                if (XunJianDataManager.Instance.chooseXunJian.tasksList[XunJianDataManager.Instance.chooseXunJian.nowIndex + 1].imageData != null && arg1.name == "TargetImage_" + XunJianDataManager.Instance.chooseXunJian.tasksList[XunJianDataManager.Instance.chooseXunJian.nowIndex + 1].imageData.Name)
                 {
                     Debug.Log("showshowshowshowshowshow");
                     JinRuRenwu.Instance.show();
                     closeDevice();
                 }
 
-
             };
         }
     }

+ 42 - 8
Assets/FrameWork/ProjectManager/Scripts/Project/XunJian/进入任务/CaoZuoLanManager.cs

@@ -24,18 +24,34 @@ public class CaoZuoLanManager : MonoSingleton<CaoZuoLanManager>
     {
         JinRuRenwu.Instance.successItem();
         nextInteractable(true);
-        if (XunJianDataManager.Instance.chooseXunJian.itemList.Count > (XunJianDataManager.Instance.chooseXunJian.nowIndex + 1))
+        //if (XunJianDataManager.Instance.chooseXunJian.itemList.Count > (XunJianDataManager.Instance.chooseXunJian.nowIndex + 1))
+        //{
+        //    switch (XunJianDataManager.Instance.chooseXunJian.renwuModelType)
+        //    {
+        //        case RenWuModelType.SaoTu:
+        //            ChangeCameraSaoMiao.Instance.showsaomiao(XunJianDataManager.Instance.chooseXunJian.itemList[XunJianDataManager.Instance.chooseXunJian.nowIndex + 1]);
+        //            break;
+        //        case RenWuModelType.DianYun:
+        //            LineManager.Instance.setRoad(XunJianDataManager.Instance.chooseXunJian.itemList[XunJianDataManager.Instance.chooseXunJian.nowIndex + 1].roadList);
+        //            break;
+        //        case RenWuModelType.DingWeiBan:
+        //            ChangeCameraSaoMiao.Instance.showsaomiao(XunJianDataManager.Instance.chooseXunJian.itemList[XunJianDataManager.Instance.chooseXunJian.nowIndex + 1]);
+        //            break;
+        //    }
+        //}
+
+        if (XunJianDataManager.Instance.chooseXunJian.tasksList.Count > (XunJianDataManager.Instance.chooseXunJian.nowIndex + 1))
         {
             switch (XunJianDataManager.Instance.chooseXunJian.renwuModelType)
             {
                 case RenWuModelType.SaoTu:
-                    ChangeCameraSaoMiao.Instance.showsaomiao(XunJianDataManager.Instance.chooseXunJian.itemList[XunJianDataManager.Instance.chooseXunJian.nowIndex + 1]);
+                    ChangeCameraSaoMiao.Instance.showsaomiao(XunJianDataManager.Instance.chooseXunJian.tasksList[XunJianDataManager.Instance.chooseXunJian.nowIndex + 1]);
                     break;
                 case RenWuModelType.DianYun:
-                    LineManager.Instance.setRoad(XunJianDataManager.Instance.chooseXunJian.itemList[XunJianDataManager.Instance.chooseXunJian.nowIndex + 1].roadList);
+                    LineManager.Instance.setRoad(XunJianDataManager.Instance.chooseXunJian.tasksList[XunJianDataManager.Instance.chooseXunJian.nowIndex + 1].roadList);
                     break;
                 case RenWuModelType.DingWeiBan:
-                    ChangeCameraSaoMiao.Instance.showsaomiao(XunJianDataManager.Instance.chooseXunJian.itemList[XunJianDataManager.Instance.chooseXunJian.nowIndex + 1]);
+                    ChangeCameraSaoMiao.Instance.showsaomiao(XunJianDataManager.Instance.chooseXunJian.tasksList[XunJianDataManager.Instance.chooseXunJian.nowIndex + 1]);
                     break;
             }
         }
@@ -53,19 +69,37 @@ public class CaoZuoLanManager : MonoSingleton<CaoZuoLanManager>
         JinRuRenwu.Instance.failItem();
         nextInteractable(true);
 
-        if (XunJianDataManager.Instance.chooseXunJian.itemList.Count > (XunJianDataManager.Instance.chooseXunJian.nowIndex + 1))
+        //if (XunJianDataManager.Instance.chooseXunJian.itemList.Count > (XunJianDataManager.Instance.chooseXunJian.nowIndex + 1))
+        //{
+
+        //    switch (XunJianDataManager.Instance.chooseXunJian.renwuModelType)
+        //    {
+        //        case RenWuModelType.SaoTu:
+        //            ChangeCameraSaoMiao.Instance.showsaomiao(XunJianDataManager.Instance.chooseXunJian.itemList[XunJianDataManager.Instance.chooseXunJian.nowIndex + 1]);
+        //            break;
+        //        case RenWuModelType.DianYun:
+        //            LineManager.Instance.setRoad(XunJianDataManager.Instance.chooseXunJian.itemList[XunJianDataManager.Instance.chooseXunJian.nowIndex + 1].roadList);
+        //            break;
+        //        case RenWuModelType.DingWeiBan:
+        //            ChangeCameraSaoMiao.Instance.showsaomiao(XunJianDataManager.Instance.chooseXunJian.itemList[XunJianDataManager.Instance.chooseXunJian.nowIndex + 1]);
+        //            break;
+        //    }
+
+        //}
+
+        if (XunJianDataManager.Instance.chooseXunJian.tasksList.Count > (XunJianDataManager.Instance.chooseXunJian.nowIndex + 1))
         {
 
             switch (XunJianDataManager.Instance.chooseXunJian.renwuModelType)
             {
                 case RenWuModelType.SaoTu:
-                    ChangeCameraSaoMiao.Instance.showsaomiao(XunJianDataManager.Instance.chooseXunJian.itemList[XunJianDataManager.Instance.chooseXunJian.nowIndex + 1]);
+                    ChangeCameraSaoMiao.Instance.showsaomiao(XunJianDataManager.Instance.chooseXunJian.tasksList[XunJianDataManager.Instance.chooseXunJian.nowIndex + 1]);
                     break;
                 case RenWuModelType.DianYun:
-                    LineManager.Instance.setRoad(XunJianDataManager.Instance.chooseXunJian.itemList[XunJianDataManager.Instance.chooseXunJian.nowIndex + 1].roadList);
+                    LineManager.Instance.setRoad(XunJianDataManager.Instance.chooseXunJian.tasksList[XunJianDataManager.Instance.chooseXunJian.nowIndex + 1].roadList);
                     break;
                 case RenWuModelType.DingWeiBan:
-                    ChangeCameraSaoMiao.Instance.showsaomiao(XunJianDataManager.Instance.chooseXunJian.itemList[XunJianDataManager.Instance.chooseXunJian.nowIndex + 1]);
+                    ChangeCameraSaoMiao.Instance.showsaomiao(XunJianDataManager.Instance.chooseXunJian.tasksList[XunJianDataManager.Instance.chooseXunJian.nowIndex + 1]);
                     break;
             }
 

+ 83 - 27
Assets/FrameWork/ProjectManager/Scripts/Project/XunJian/进入任务/ChangeCameraSaoMiao.cs

@@ -1,5 +1,6 @@
 using easyar;
 using LitJson;
+using Newtonsoft.Json;
 using RenderHeads.Media.AVProMovieCapture;
 using System;
 using System.Collections;
@@ -47,7 +48,45 @@ public class ChangeCameraSaoMiao : MonoSingleton<ChangeCameraSaoMiao>
         saomiao.SetActive(false);
 
     }
-    public void showsaomiao(RenWuItem ri)
+    //public void showsaomiao(RenWuItem ri)
+    //{
+    //    checkLuXiang();
+    //    JinRuRenwu.Instance.paizhaoanniu.SetActive(false);
+    //    JinRuRenwu.Instance.paizhaoGo.SetActive(false);
+    //    paizhao.SetActive(false);
+    //    luxiang.SetActive(false);
+    //    saomiao.SetActive(true);
+    //    RenWuItem rw = ri;
+    //    DownLoadXRManager.DownLoadForFilePath(DownLoadXRManager.getTestData(rw.imageUrl), (string bytes) => {
+    //        if(bytes==null)
+    //        {
+    //            close();
+    //            JsonData data = new JsonData();
+    //            data["type"] = "20001";
+    //            List<string> backTip = new List<string>();
+    //            backTip.Add(data.ToJson());
+    //            backTip.Add(data.ToJson());
+    //            backTip.Add(data.ToJson());
+    //            WindowsManager.Instance.show(WindowConfig.windowType.Error, false, WindowsManager.Instance.getErrorData("提示", "识别图未找到!"+ rw.imageUrl, Color.gray, "icon", backTip, true, "识别图错误", 5).ToJson());
+
+    //        }
+    //        else
+    //        {
+    //            ImageFileSourceData data = new ImageFileSourceData();
+    //            data.Name = bytes.Split("/")[bytes.Split("/").Length - 1];
+    //            data.Path = bytes;
+    //            data.PathType = PathType.Absolute;
+    //            data.Scale = 0.1f;
+    //            rw.imageData = data;
+    //            ARSaoTuManager.Instance.AddARGameObj(data);
+    //        }
+    //    }, (float f) => {
+
+
+    //    });
+    //}
+
+    public void showsaomiao(XunJianTasks ri)
     {
         checkLuXiang();
         JinRuRenwu.Instance.paizhaoanniu.SetActive(false);
@@ -55,36 +94,53 @@ public class ChangeCameraSaoMiao : MonoSingleton<ChangeCameraSaoMiao>
         paizhao.SetActive(false);
         luxiang.SetActive(false);
         saomiao.SetActive(true);
-        RenWuItem rw = ri;
-        DownLoadXRManager.DownLoadForFilePath(DownLoadXRManager.getTestData(rw.imageUrl), (string bytes) => {
-            if(bytes==null)
+        XunJianTasks rw = ri;
+
+        Debug.Log("DGJ ====》showsaomiao " + JsonConvert.SerializeObject(ri));
+
+
+        //});
+
+        for (int i = 0; i < ri.diagram.Count; i++)
+        {
+            // 下载识别图 处理
+
+            DownLoadXRManager.DownLoadForFilePath(DownLoadXRManager.getTestData(ri.diagram[i].path, "minio"), (string bytes) =>
             {
-                close();
-                JsonData data = new JsonData();
-                data["type"] = "20001";
-                List<string> backTip = new List<string>();
-                backTip.Add(data.ToJson());
-                backTip.Add(data.ToJson());
-                backTip.Add(data.ToJson());
-                WindowsManager.Instance.show(WindowConfig.windowType.Error, false, WindowsManager.Instance.getErrorData("提示", "识别图未找到!"+ rw.imageUrl, Color.gray, "icon", backTip, true, "识别图错误", 5).ToJson());
-
-            }
-            else
+                if (bytes == null)
+                {
+                    close();
+                    JsonData data = new JsonData();
+                    data["type"] = "20001";
+                    List<string> backTip = new List<string>();
+                    backTip.Add(data.ToJson());
+                    backTip.Add(data.ToJson());
+                    backTip.Add(data.ToJson());
+                    WindowsManager.Instance.show(WindowConfig.windowType.Error, false, WindowsManager.Instance.getErrorData("提示", "识别图未找到!" + rw.diagram, Color.gray, "icon", backTip, true, "识别图错误", 5).ToJson());
+
+                }
+                else
+                {
+                    ImageFileSourceData data = new ImageFileSourceData();
+                    data.Name = bytes.Split("/")[bytes.Split("/").Length - 1];
+                    data.Path = bytes;
+                    data.PathType = PathType.Absolute;
+                    data.Scale = 0.1f;
+                    rw.imageData = data;
+                    ARSaoTuManager.Instance.AddARGameObj(data);
+                }
+            }, (float f) =>
             {
-                ImageFileSourceData data = new ImageFileSourceData();
-                data.Name = bytes.Split("/")[bytes.Split("/").Length - 1];
-                data.Path = bytes;
-                data.PathType = PathType.Absolute;
-                data.Scale = 0.1f;
-                rw.imageData = data;
-                ARSaoTuManager.Instance.AddARGameObj(data);
-            }
-        }, (float f) => {
-
-
-        });
+
+            });
+
+
+         }
+
     }
 
+   
+
     public void close()
     {
         checkLuXiang();

+ 38 - 0
Assets/FrameWork/ProjectManager/Scripts/Project/XunJian/进入任务/RenWuListItemWindow.cs

@@ -7,6 +7,7 @@ using static XunJianDataManager;
 public class RenWuListItemWindow : WindowSingleton<RenWuListItemWindow>
 {
     public RenWuItem data;
+    public XunJianTasks data2;
     public GameObject NoneGo;
     public GameObject FailGo;
     public GameObject SuccessGo;
@@ -49,6 +50,43 @@ public class RenWuListItemWindow : WindowSingleton<RenWuListItemWindow>
         }
     }
 
+    public void UpdateData(XunJianTasks data)
+    {
+        this.data2 = data;
+        info.text = (data.index + 1) + "." + data.title;
+
+        switch (data.state)
+        {
+            case RenWuState.None:
+                info.color = Color.white;
+                NoneGo.SetActive(true);
+                FailGo.SetActive(false);
+                SuccessGo.SetActive(false);
+                break;
+            case RenWuState.Fail:
+                info.color = Color.red;
+                NoneGo.SetActive(false);
+                FailGo.SetActive(true);
+                SuccessGo.SetActive(false);
+                break;
+            case RenWuState.Success:
+                info.color = Color.green;
+                NoneGo.SetActive(false);
+                FailGo.SetActive(false);
+                SuccessGo.SetActive(true);
+                break;
+
+        }
+        if (XunJianDataManager.Instance.chooseXunJian.nowIndex == data.index)
+        {
+
+            info.color = Color.yellow;
+            NoneGo.SetActive(true);
+            FailGo.SetActive(false);
+            SuccessGo.SetActive(false);
+        }
+    }
+
     public void chooseItem()
     {
        // XunJianDataManager.Instance.chooseItem(data.index);

+ 13 - 5
Assets/FrameWork/ProjectManager/Scripts/Project/XunJian/进入任务/RenWuListWindow.cs

@@ -22,14 +22,22 @@ public class RenWuListWindow : WindowSingleton<RenWuListWindow>
         removeData();
         objlist = new List<GameObject>();
         GameObject item = WindowsManager.Instance.GetPrefab(WindowConfig.windowType.XunJian, "RenWuListItem");
-        for (int i = 0; i < XunJianDataManager.Instance.chooseXunJian.itemList.Count; i++)
+        //for (int i = 0; i < XunJianDataManager.Instance.chooseXunJian.itemList.Count; i++)
+        //{
+        //    GameObject RenwuItem = GameObject.Instantiate(item,this.transform);
+        //    RenwuItem.transform.localPosition = new Vector3(0,0,-1f);
+        //    RenwuItem.GetComponent<RenWuListItemWindow>().UpdateData(XunJianDataManager.Instance.chooseXunJian.itemList[i]) ;
+        //    objlist.Add(RenwuItem);
+        //}
+
+        for (int i = 0; i < XunJianDataManager.Instance.chooseXunJian.tasksList.Count; i++)
         {
-            GameObject RenwuItem = GameObject.Instantiate(item,this.transform);
-            RenwuItem.transform.localPosition = new Vector3(0,0,-1f);
-            RenwuItem.GetComponent<RenWuListItemWindow>().UpdateData(XunJianDataManager.Instance.chooseXunJian.itemList[i]) ;
+            GameObject RenwuItem = GameObject.Instantiate(item, this.transform);
+            RenwuItem.transform.localPosition = new Vector3(0, 0, -1f);
+            RenwuItem.GetComponent<RenWuListItemWindow>().UpdateData(XunJianDataManager.Instance.chooseXunJian.tasksList[i]);
             objlist.Add(RenwuItem);
         }
-        
+
     }
 
     void removeData()

+ 137 - 0
Assets/FrameWork/ProjectManager/Scripts/Project/XunJian/进入任务/RenWuTypeWindow.cs

@@ -1,5 +1,7 @@
+using System;
 using System.Collections;
 using System.Collections.Generic;
+using System.IO;
 using TMPro;
 using TriLibCore;
 using UnityEngine;
@@ -10,6 +12,8 @@ public class RenWuTypeWindow : MonoBehaviour
 {
     public RenWuTypeModel data;
 
+    public MinioResources data2;
+
     public TextMeshProUGUI info;
     Texture2D tex;
 
@@ -58,4 +62,137 @@ public class RenWuTypeWindow : MonoBehaviour
                 break;
         }
     }
+
+    public void updateData(MinioResources data)
+    {
+        if (tex != null)
+        {
+            Destroy(tex);
+        }
+        this.data2 = data;
+
+        // Minio  下载对应资源 处理
+        switch (data.loadingMethod)
+        {
+            case 3:
+                //DownLoadXRManager.DownLoadForFilePath(DownLoadXRManager.getTestData(data.url), (string bytes) => {
+                //    this.GetComponent<ShowVideoManager>().url = bytes;
+                //}, (float f) => {
+                //    // info.gameObject.SetActive(true);
+                //    //info.text = "视频加载中" + f.ToString("F2")+"%";
+                //});
+                RoomFileMinio.Instance.getFile(RoomFileMinio.Instance.bucket, data.path, rfd =>
+                  {
+                      Debug.Log(rfd.url);
+                      Debug.Log(rfd.bytes.Length);
+                      StartCoroutine(SaveMp4(Application.persistentDataPath + "/" + data.uuid +".mp4", rfd.bytes));
+
+                  });
+                break;
+            case -1:
+               // this.gameObject.GetComponentInChildren<TextMeshProUGUI>().text = data.info;
+                break;
+            case 1:
+                //DownLoadXRManager.DownLoadForTexture(DownLoadXRManager.getTestData(data.url), (Texture2D bytes) => {
+
+                //    tex = bytes;
+                //    this.GetComponent<RawImage>().texture = tex;
+                //}, (float f) => {
+
+
+                //    //  info.gameObject.SetActive(true);
+                //    //  info.text = "图片加载中" + f.ToString("F2") + "%";
+                //});
+
+                RoomFileMinio.Instance.getFile(RoomFileMinio.Instance.bucket, data.path, rfd =>
+                  {
+                      Debug.Log(rfd.url);
+                      Debug.Log(rfd.bytes.Length);
+
+                      this.GetComponent<RawImage>().texture = GetSprite(rfd.bytes).texture;
+                  });
+                break;
+            case 2:
+                //DownLoadXRManager.DownLoadForFilePath(DownLoadXRManager.getTestData(data.url), (string bytes) => {
+                //    info.gameObject.SetActive(false);
+                //    this.GetComponent<ShowModelManager>().Onupdate(bytes);
+                //}, (float f) => {
+
+
+                //    info.gameObject.SetActive(true);
+                //    info.text = "模型下载中" + f.ToString("F2") + "%";
+                //});
+                RoomFileMinio.Instance.getFile(RoomFileMinio.Instance.bucket, data.path, rfd =>
+                {
+                    Debug.Log(rfd.url);
+                    Debug.Log(rfd.bytes.Length);
+
+                    StartCoroutine(SaveModel(Application.persistentDataPath + "/" + data.uuid + ".zip", rfd.bytes));
+                });
+
+                break;
+        }
+    }
+
+    private IEnumerator SaveMp4(string path, byte[] bytes)
+    {
+        Debug.Log(" Path  ==> " + path);
+        FileInfo file = new FileInfo(path);
+        if (file.Exists)
+        {
+            // file.Delete();
+            yield return new WaitForSeconds(0.02f);
+            this.GetComponent<ShowVideoManager>().url = path;
+
+        }
+        else
+        {
+            Stream sw = File.Create(path);
+            // FileStream sw = new FileStream(path);
+
+            sw.Write(bytes, 0, bytes.Length);
+
+            sw.Close();
+            sw.Dispose();
+            yield return new WaitForSeconds(0.02f);
+            this.GetComponent<ShowVideoManager>().url = path;
+        }
+
+    }
+
+    private IEnumerator SaveModel(string path, byte[] bytes)
+    {
+        Debug.Log(" Path  ==> " + path);
+        FileInfo file = new FileInfo(path);
+        if (file.Exists)
+        {
+            // file.Delete();
+            yield return new WaitForSeconds(0.02f);
+            this.GetComponent<ShowModelManager>().Onupdate(path);
+
+        }
+        else
+        {
+            Stream sw = File.Create(path);
+            // FileStream sw = new FileStream(path);
+
+            sw.Write(bytes, 0, bytes.Length);
+
+            sw.Close();
+            sw.Dispose();
+            yield return new WaitForSeconds(0.02f);
+            this.GetComponent<ShowModelManager>().Onupdate(path);
+        }
+
+    }
+
+    private Sprite GetSprite(Byte[] bytes)
+    {
+        //先创建一个Texture2D对象,用于把流数据转成Texture2D
+        Texture2D texture = new Texture2D(10, 10);
+        texture.LoadImage(bytes);//流数据转换成Texture2D
+        //创建一个Sprite,以Texture2D对象为基础
+        Sprite sp = Sprite.Create(texture, new Rect(0, 0, texture.width, texture.height), Vector2.zero);
+        return sp;
+    }
 }

+ 25 - 1
Assets/FrameWork/ProjectManager/Scripts/Project/XunJianLieBiaoItem.cs

@@ -4,6 +4,9 @@ using UnityEngine;
 using static XunJianDataManager;
 using UnityEngine.UI;
 using TMPro;
+using Newtonsoft.Json.Linq;
+using LitJson;
+using Newtonsoft.Json;
 
 public class XunJianLieBiaoItem : MonoBehaviour
 {
@@ -28,6 +31,27 @@ public class XunJianLieBiaoItem : MonoBehaviour
 
     public void gotoXunJian()
     {
-        XunJianDataManager.Instance.GotoXunJian(data);
+        // »ñȡѲ¼ìÈÎÎñ   
+        JsonData jsonData = new JsonData();
+
+        jsonData["projectId"] = int.Parse(data.id);
+        HttpTool.Instance.Post(HttpEdustryAction.projectTasks, jsonData.ToJson(), (string msg) => {
+
+            Debug.Log(msg);
+            JObject jObject = JObject.Parse(msg);
+            if (jObject["code"].ToString() == "200")
+            {
+                data.tasksList = JsonConvert.DeserializeObject<List<XunJianTasks>>(jObject["data"]["tasks"].ToString());
+
+                XunJianDataManager.Instance.GotoXunJian(data);
+            }
+            else
+            {
+                data.tasksList = new List<XunJianTasks>();
+            }
+        });
+
+
+      
     }
 }

+ 2 - 0
Assets/FrameWork/ProjectManager/Scripts/Project/XunJianLieBiaoWindow.cs

@@ -1,5 +1,6 @@
 using System.Collections;
 using System.Collections.Generic;
+using System.Linq;
 using TMPro;
 using UnityEngine;
 using UnityEngine.UI;
@@ -76,6 +77,7 @@ public class XunJianLieBiaoWindow : WindowSingleton<XunJianLieBiaoWindow>
         RemoveAll();
         GameObject liebiao = WindowsManager.Instance.GetPrefab(WindowConfig.windowType.XunJian, "liebiao");
         XunJianDataManager.Instance.GetAreaList(chooseArea.options[arg0].text, (List<XunJianListData> data) => {
+           
             for (int i = 0; i < data.Count; i++)
             {
                 GameObject itemGo = GameObject.Instantiate(liebiao, parentGo.transform);

+ 25 - 0
Assets/FrameWork/ProjectManager/Scripts/TopManager.cs

@@ -2,11 +2,17 @@ using LitJson;
 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
+using TMPro;
+using System;
 
 public class TopManager : MonoSingleton<TopManager>
 {
     public GameObject root;
     public GameObject icon;
+
+    public TMP_Text timeText;
+    private DateTime times;
+    private Coroutine timeCoroutine;
     public void exitUser()
     {
         List<string> backTip = new List<string>();
@@ -43,5 +49,24 @@ public class TopManager : MonoSingleton<TopManager>
             TopManager.Instance.root.SetActive(false);
             UserManager.Instance.MoveIcon(Vector3.zero, TopManager.Instance.icon.transform, () => { TopManager.Instance.root.SetActive(true); });
         }
+
+        timeCoroutine= StartCoroutine(UpdataTimer());
+    }
+
+    private void OnDisable()
+    {
+        StopCoroutine(timeCoroutine);
+    }
+
+    private IEnumerator UpdataTimer()
+    {
+        while (true)
+        {
+            yield return new WaitForSeconds(1f);
+            times = GetHttpTimer.Instance.GetTimer();
+            //Debug.Log(times);
+            //Debug.Log(times.Hour + ":" + times.Minute);
+            timeText.text = times.Hour + ":" + times.Minute;
+        }
     }
 }

+ 2 - 1
Assets/FrameWork/ProjectManager/Top.prefab

@@ -376,6 +376,7 @@ MonoBehaviour:
   global: 1
   root: {fileID: 3047541838007228991}
   icon: {fileID: 3810714472908856940}
+  timeText: {fileID: 5193801265989600823}
 --- !u!1 &6534738419992894973
 GameObject:
   m_ObjectHideFlags: 0
@@ -450,7 +451,7 @@ MonoBehaviour:
     y: 0
     width: 1
     height: 1
-  Radius: 10
+  Radius: 35
 --- !u!114 &8127082801962897804
 MonoBehaviour:
   m_ObjectHideFlags: 0

+ 15 - 3
Assets/FrameWork/ProjectManager/项目.prefab

@@ -11,6 +11,7 @@ GameObject:
   - component: {fileID: 2012759580409433135}
   - component: {fileID: 6550115606090857905}
   - component: {fileID: 8634858922757082739}
+  - component: {fileID: 1573922950574443463}
   m_Layer: 5
   m_Name: "\u9879\u76EE"
   m_TagString: Untagged
@@ -62,6 +63,17 @@ MonoBehaviour:
   m_Script: {fileID: 11500000, guid: 3904bd5cd495c194fb39a24e213f6e8a, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
-  data: 
-  Main: {fileID: 0}
-  Project: {fileID: 0}
+--- !u!114 &1573922950574443463
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 988561293055497038}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 15cdb3fe447ea0a4f9c9fe0385982f36, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  global: 1
+  timestamp: -1

+ 47 - 1
Assets/FrameWork/Scenes/Edustry.unity

@@ -154,7 +154,7 @@ MonoBehaviour:
   m_Name: 
   m_EditorClassIdentifier: 
   global: 1
-  isTest: 1
+  isTest: 0
   isShowTip: 0
   wConfig: {fileID: 11400000, guid: 0667bace594664440902795c5cce1cf3, type: 2}
   canvasRoot: {fileID: 0}
@@ -461,3 +461,49 @@ PrefabInstance:
       objectReference: {fileID: 0}
     m_RemovedComponents: []
   m_SourcePrefab: {fileID: 100100000, guid: 7cd0ceba7525bdc42a36be841a8aad16, type: 3}
+--- !u!1 &1470815437
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 1470815438}
+  - component: {fileID: 1470815439}
+  m_Layer: 0
+  m_Name: Minio
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &1470815438
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1470815437}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 0}
+  m_RootOrder: 4
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &1470815439
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1470815437}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: cd1ffb18c74b5664584b51b6933a3b04, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  global: 1
+  bucket: 

+ 8 - 0
Assets/Packages.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: e36f56de6946da14db35de57325f5560
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 85 - 0
Assets/Scripts/GetHttpTimer.cs

@@ -0,0 +1,85 @@
+using Newtonsoft.Json.Linq;
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class GetHttpTimer : MonoSingleton<GetHttpTimer>
+{
+
+    public long timestamp = -1;
+
+    private float nowTimes = 0;
+
+    private void Start()
+    {
+        StartCoroutine(HttpTool.Instance.SendHttp(HttpEdustryAction.timestamp, "", (string msg) =>
+        {
+            Debug.Log(msg);
+            JObject data = JObject.Parse(msg);
+            if (data["code"].ToString() == "200")
+            {
+                timestamp = long.Parse(data["data"]["timestamp"].ToString());
+                nowTimes = 0;
+
+                Debug.Log(timestamp);
+            }
+            else
+            {
+                Debug.LogError(HttpEdustryAction.timestamp + "  Error   " + data["code"].ToString());
+            }
+
+        }));
+    }
+    void Update()
+    {
+        if (timestamp !=-1)
+        {
+            nowTimes += Time.deltaTime;
+
+           // timestamp += Convert.ToInt64(Time.deltaTime);
+        }
+    }
+
+    public DateTime GetTimer()
+    {
+        if (timestamp == -1)
+            return System.DateTime.Now;
+
+        return UnixTimeStampToDateTime((timestamp+(long)nowTimes));
+    }
+
+    // 将Unix时间戳转换为DateTime
+    DateTime UnixTimeStampToDateTime(long unixTimeStamp)
+    {
+
+      //  string times = unixTimeStamp.ToString() + "000";
+
+      //  long timestamp = long.Parse(times);
+        // Unix起始时间
+      //  DateTime unixEpoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.);
+
+
+        DateTime startTime = System.TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1));//获取时间戳
+        DateTime dt = startTime.AddSeconds(unixTimeStamp);
+        // 将时间戳转换为DateTime
+        return dt;
+
+
+        
+      
+    }
+
+    /// <summary>    
+    /// 时间戳转为C#格式时间    
+    /// </summary>    
+    /// <param name=”timeStamp”></param>    
+    /// <returns></returns>    
+    public static DateTime ConvertStringToDateTime(string timeStamp)
+    {
+        DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));
+        long lTime = long.Parse(timeStamp + "0000");
+        TimeSpan toNow = new TimeSpan(lTime);
+        return dtStart.Add(toNow);
+    }
+}

+ 11 - 0
Assets/Scripts/GetHttpTimer.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 15cdb3fe447ea0a4f9c9fe0385982f36
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 7 - 1
Assets/Scripts/HttpEdustryAction.cs

@@ -7,7 +7,13 @@ public class HttpEdustryAction
 
     public static string InspectionList = "/mr-endustry/v1/project/inspectionList";
 
+    public static string timestamp = "/mr-endustry/v1/user/timestamp";
+
+    public static string projectTasks =  "/mr-endustry/v1/project/tasks";
+
     public static string Token = "";
 
-    public static string storage_roomCredential = "";
+    public static string storage_projectCredential = "/mr-endustry/v1/storage/projectCredential";
+
+    public static string storage_regionCredential = "/mr-endustry/v1/storage/regionCredential";
 }

+ 301 - 0
Assets/Scripts/MQTTClient.cs

@@ -0,0 +1,301 @@
+using LitJson;
+using login;
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Text;
+using UnityEngine;
+using UnityEngine.Android;
+using uPLibrary.Networking.M2Mqtt.Messages;
+using static QTTManager;
+
+public class MQTTClient : MonoSingleton<MQTTClient>
+{
+    //public string front = "client/";
+    // public string id = "";
+    //public string username = "u@unity3";// 需要根据服务器设置
+    //public string password = null;// 需要根据服务器设置
+    public string rid = "mqttx_b4c02ddc"; //其他人的ID
+    //public string account;
+    //public string roomId;
+    //public string email;
+    //public string phone;
+    //public string roleId;
+    //public string resourcePool;
+    //public string expertType;
+    //public string _username;
+
+    public event Action<JsonData> OnCoordinate;
+    public static byte[] bytes;
+    // public static string certification;
+    // public static byt ta;
+    QTTManager qt;
+    // Start is called before the first frame update
+    void Start()
+    {
+        // 请求文件读取和写入权限
+        if (!Permission.HasUserAuthorizedPermission(Permission.ExternalStorageRead) ||
+            !Permission.HasUserAuthorizedPermission(Permission.ExternalStorageWrite))
+        {
+            Permission.RequestUserPermission(Permission.ExternalStorageRead);
+            Permission.RequestUserPermission(Permission.ExternalStorageWrite);
+        }
+        bytes = (Resources.Load("emqxsl-ca") as TextAsset).bytes;
+
+        Debug.Log(" DGJ  ===> emqxsl-ca.bytes " + bytes.Length);
+    }
+    Queue<MqttMsgPublishEventArgs> rlist = new Queue<MqttMsgPublishEventArgs>();
+    private void OnReceived(MqttMsgPublishEventArgs obj)
+    {
+        rlist.Enqueue(obj);
+
+
+    }
+
+    private void OnConnecting()
+    {
+        Debug.Log("MQtt  连接中");
+    }
+
+    private void onSucceed()
+    {
+        // Subscribe(MQTTManager.Instance.front + "online/" + MQTTManager.Instance.phone);
+
+        //Subscribe(MQTTManager.Instance.front + "personnel/" + MQTTManager.Instance.resourcePool);
+        Subscribe(MQTTManager.Instance.front + "personnel/" + MQTTManager.Instance.resourcePoolId);
+        Subscribe(MQTTManager.Instance.front + "online/" + MQTTManager.Instance.id);
+    }
+
+
+
+    private void onFaild()
+    {
+        Debug.Log("MQtt  连接失败");
+    }
+
+    // Update is called once per frame
+    void Update()
+    {
+        if (rlist.Count > 0)
+        {
+            for (int i = 0; i < rlist.Count; i++)
+            {
+                OnUnityReceived(rlist.Dequeue());
+            }
+        }
+    }
+    //MQTT接收到的数据
+    public void OnUnityReceived(MqttMsgPublishEventArgs obj)
+    {
+        string msg = Encoding.UTF8.GetString(obj.Message);
+        Debug.Log("uid => " + obj.Topic + ":\n" + msg);
+        //   UILogManager.Instance.text3.text = msg;
+        MQTTManager.Instance.Received(msg);
+    }
+
+    private void OnDestroy()
+    {
+        DisConnect();
+    }
+
+    //连接
+    public void Connect()
+    {
+
+      //  Debug.Log("DGJ ===> MQTT " + HttpActionLang.Instance.mqttSocket);
+        //if (DeviceType.type == "Phone")
+        //{
+        //    id =UserInfo.Instance.name + "_Phone";
+        //    rid = front+UserInfo.Instance.name + "_Glasses";
+
+        //}
+        //else
+        //{
+        //    id = UserInfo.Instance.name + "_Glasses";
+        //    rid = front+UserInfo.Instance.name + "_Phone";
+        //}
+
+        //  Debug.Log("DGJ ==>MQTT " + id + account + "  " + username + "   " + certification + "  " + HttpActionLang.Instance.mqttSocket);
+
+        DisConnect();
+     //   qt = new QTTManager(MQTTManager.Instance.clientId, MQTTManager.Instance.username, MQTTManager.certification, HttpActionLang.Instance.mqttSocket, "1883");
+
+        qt.ConnectionFailed += onFaild;
+        qt.ConnectionSucceeded += onSucceed;
+        qt.OnConnecting += OnConnecting;
+        qt.OnReceived += OnReceived;
+        qt.OnClose += OnClose;
+        qt.Connect();
+        StartCoroutine(Reconnection());
+        //  StartSendCameraPos();
+    }
+
+    private void OnClose(EventArgs obj)
+    {
+        Debug.Log("断开连接");
+
+
+    }
+
+    private IEnumerator Reconnection()
+    {
+        while (true)
+        {
+            yield return new WaitForSeconds(5);
+            if (qt != null && !qt.IsConnect())
+            {
+                Debug.Log(" DGJ ===>  Reconnection ");
+                Connect();
+            }
+        }
+    }
+
+
+
+    //断开连接
+    public void DisConnect()
+    {
+        if (qt != null && qt.IsConnect())
+            qt.DisConnect();
+
+    }
+
+    /// <summary>
+    /// 订阅频道
+    /// </summary>
+    /// <param name="channelID"></param>
+    public void Subscribe(string channelID)
+    {
+        Debug.Log(" DGJ   =====> Subscribe " + channelID);
+        if (qt != null && qt.IsConnect())
+        {
+            ushort s = qt.Subscribe(
+                        new string[]
+                        {
+                              channelID
+                              //front+"room/"+roomId
+
+                        },
+                        new byte[]
+                        {
+                                MqttMsgBase.QOS_LEVEL_AT_MOST_ONCE,
+                                //MqttMsgBase.QOS_LEVEL_EXACTLY_ONCE
+
+                        });
+
+
+            Debug.Log(" DGJ   =====> Subscribe2");
+        }
+        else
+            Debug.LogError(" MQTT 未连接 !!!");
+
+
+
+    }
+
+    public void UnSubscribe(string channelID)
+    {
+        if (qt != null && qt.IsConnect())
+        {
+            ushort s = qt.Unsubscribe(new string[] { channelID });
+        }
+    }
+
+
+    public void StartSendCameraPos()
+    {
+        StartCoroutine(sendCameraPos());
+    }
+
+    //眼镜端像手机端发送实时位置
+    IEnumerator sendCameraPos()
+    {
+        Debug.Log("DGJ  =====>  sendCameraPos" + qt.IsConnect());
+        while (true)
+        {
+            yield return new WaitForSeconds(1f);
+            if (qt != null && qt.IsConnect())
+            {
+                JsonData json = new JsonData();
+                json["type"] = "CamPos";
+                //  json["x"] = OpenXRCamera.Instance.head.position.x;
+                //json["y"] = OpenXRCamera.Instance.head.position.y;
+                //json["z"] = OpenXRCamera.Instance.head.position.z;
+                //json["x"] = GameManager.Instance.Player.transform.localPosition.x;
+                //json["y"] = GameManager.Instance.Player.transform.localPosition.y;
+                //json["z"] = GameManager.Instance.Player.transform.localPosition.z;
+                json["Sid"] = "sid";//选择的场景id
+                publish(Encoding.UTF8.GetBytes(json.ToJson()));
+            }
+
+
+        }
+    }
+    //眼镜发送触发的景点
+    public void sendActiveSp(string spid, bool isOpen)
+    {
+        JsonData json = new JsonData();
+        json["type"] = "ActiveSp";
+        json["Sid"] = "sid";//选择的场景id
+        json["spid"] = spid;//景点id
+        json["isOpen"] = isOpen;//是否打开
+        publish(Encoding.UTF8.GetBytes(json.ToJson()));
+        Debug.Log("MQtt  发送manage");
+    }
+
+
+    //眼镜发送触发的视频
+    public void sendActiveVideo(string spid, string videoId, bool isplay, float jindu)
+    {
+        JsonData json = new JsonData();
+        json["type"] = "ActiveVideo";
+        json["Sid"] = "sid";//选择的场景id
+        json["spid"] = spid;//景点id
+        json["videoId"] = videoId;//视频id
+        json["isplay"] = isplay;//是否播放
+        json["jindu"] = jindu;//视频进度
+        publish(Encoding.UTF8.GetBytes(json.ToJson()));
+        Debug.Log("MQtt  发送manage");
+    }
+
+    public void SendCoord()
+    {
+        JsonData json = new JsonData();
+        json["id"] = UserInfo.Instance.name;
+        json["type"] = "Coord";
+        json["x"] = 0.1f;
+        json["y"] = 0.1f;
+        json["z"] = 0.1f;
+
+    }
+
+
+
+    public void publish(byte[] bs)
+    {
+        if (qt != null && qt.IsConnect())
+        {
+            // Debug.Log(id + account + "  DGJ  publish =====>  " + front + "room/" + roomId + "   " + bs.Length);
+            //  qt.Publish(front + "room/" + roomId, bs, MqttMsgBase.QOS_LEVEL_EXACTLY_ONCE, false);
+        }
+        else
+        {
+            Debug.LogError(" MQTT  未连接 ");
+        }
+
+    }
+
+    public void publish(string channelID, byte[] bs)
+    {
+        if (qt != null && qt.IsConnect())
+        {
+            Debug.Log(MQTTManager.Instance.clientId + MQTTManager.Instance.account + "  DGJ  publish =====>  " + channelID + "   " + bs.Length);
+            qt.Publish(channelID, bs, MqttMsgBase.QOS_LEVEL_EXACTLY_ONCE, false);
+        }
+        else
+        {
+            Debug.LogError(" MQTT  未连接 ");
+        }
+
+    }
+}

+ 11 - 0
Assets/Scripts/MQTTClient.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: f489e63d740a102439dff57dcf7a6081
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 164 - 0
Assets/Scripts/MQTTManager.cs

@@ -0,0 +1,164 @@
+using LitJson;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+using System.Collections;
+using System.Collections.Generic;
+using System.Text;
+using UnityEngine;
+
+
+public class MQTTManager : MonoSingleton<MQTTManager>
+{
+
+    public string front = "client/";
+    public string id = "";
+    public string username = "u@unity3";// 需要根据服务器设置
+    public string password = null;// 需要根据服务器设置
+    public string rid = "mqttx_b4c02ddc"; //其他人的ID
+    public string clientId = "";
+    public string account;
+    public string roomId;
+    public string email;
+    public string phone;
+    public string roleId;
+    //  public string resourcePool;
+    public string resourcePoolId;
+    public string expertType;
+    public string _username;
+    public string room;
+    public static string certification;
+
+    /// <summary>
+    ///  获取信令
+    /// </summary>
+    public void Signal()
+    {
+      //  GameStart.Instance.StartCoroutine(HttpTool.Instance.SendHttp(HttpActionLang.signal_certification, "", SignalCallBack));
+
+        //  GameStart.Instance.StartCoroutine(HttpTool.Instance.SendHttp(HttpActionLang.userinfo, "", UserInfoCallBack));
+        // HttpTool.Instance.PostMqtt(HttpAction.signal_certification, "", SignalCallBack);
+    }
+
+
+    public void SetAccoutInfo(string account)
+    {
+        MQTTManager.Instance.account = account;
+
+    }
+    private void SignalCallBack(string msg)
+    {
+        Debug.Log(msg);
+
+        JObject obj = JObject.Parse(msg);
+        if (obj["code"].ToString() == "200")
+        {
+          //  HttpActionLang.Instance.mqttSocket = obj["data"]["host"].ToString();
+            MQTTManager.certification = obj["data"]["certification"].ToString();
+            MQTTManager.Instance.front = obj["data"]["topicPrefix"].ToString();
+            MQTTManager.Instance.clientId = obj["data"]["clientId"].ToString();
+            MQTTManager.Instance.username = obj["data"]["username"].ToString();
+         //   MQTTClient.Instance.Connect();
+
+            //  StartCoroutine(TestCreateRoom());
+        }
+        else
+        {
+            Debug.LogError("MQTT 获取信令失败 !!!" + obj["code"].ToString());
+        }
+    }
+
+
+
+    private void UserInfoCallBack(string msg)
+    {
+        Debug.Log(msg);
+
+        JObject obj = JObject.Parse(msg);
+        if (obj["code"].ToString() == "200")
+        {
+            MQTTManager.Instance._username = obj["data"]["name"].ToString();
+            MQTTManager.Instance.roleId = obj["data"]["roleId"].ToString();
+            MQTTManager.Instance.email = obj["data"]["email"].ToString();
+            MQTTManager.Instance.phone = obj["data"]["phone"].ToString();
+            //   MQTTManager.Instance.resourcePool = obj["data"]["resourcePool"].ToString();
+            MQTTManager.Instance.resourcePoolId = obj["data"]["resourcePoolId"].ToString();
+            MQTTManager.Instance.expertType = obj["data"]["expertType"].ToString();
+        }
+        else
+        {
+            Debug.LogError("获取用户信息失败 !!!" + obj["code"].ToString());
+        }
+    }
+
+    public void SetRoomId(string id)
+    {
+        MQTTManager.Instance.roomId = id;
+        //   MQTTClient.Instance.roomId = "9527";
+
+        // 订阅房间频道
+
+        MQTTClient.Instance.Subscribe(MQTTManager.Instance.front + "room/" + id);
+
+
+
+    }
+
+    public void UnSubscribe(string id)
+    {
+        MQTTClient.Instance.UnSubscribe(MQTTManager.Instance.front + "room/" + id);
+    }
+
+    /// <summary>
+    /// 发送消息
+    /// </summary>
+    /// <param name="msg"></param>
+    public void PushMsg(string msg)
+    {
+        if (!string.IsNullOrEmpty(msg))
+        {
+            JsonData json = new JsonData();
+            json["account"] = MQTTManager.Instance.account;
+            json["Sid"] = "sid";//选择的场景id
+            json["msg"] = msg;
+            MQTTClient.Instance.publish(Encoding.UTF8.GetBytes(json.ToJson()));
+
+        }
+
+    }
+
+    /// <summary>
+    /// 发送消息
+    /// </summary>
+    /// <param name="msg"></param>
+    public void PushMsg(string channelID, string msg)
+    {
+
+        Debug.Log("DGJ ===> MQTT Test " + msg);
+        if (!string.IsNullOrEmpty(msg))
+        {
+            MQTTClient.Instance.publish(channelID, Encoding.UTF8.GetBytes(msg));
+
+        }
+
+    }
+
+    /// <summary>
+    ///  接受消息
+    /// </summary>
+    /// <param name="msg"></param>
+    public void Received(string msg)
+    {
+        JObject obj = JObject.Parse(msg);
+
+        Debug.Log("Received  ===>  " + obj["action"].ToString());
+
+        switch (obj["action"].ToString())
+        {
+          
+            default:
+                break;
+        }
+
+
+    }
+}

+ 11 - 0
Assets/Scripts/MQTTManager.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 700549127e3adfd46a9a5823f45edaa9
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 31 - 16
Assets/Scripts/RoomFileMinio.cs

@@ -14,19 +14,24 @@ public class RoomFileMinio : MonoSingleton<RoomFileMinio>
 {
     IMinioClient minio;
     string path;
-    string bucket;
+   public string bucket;
+    public bool islogin;
     string host;
+    string region;
 
     string tmpSecretId;
     string tmpSecretKey;
     string minioToken;
-
+    
     string projectId;
     Thread thread;
     private void Start()
     {
         thread = new Thread(DoSomeWork);
         thread.Start();
+        islogin = false;
+
+
     }
 
     bool isminioUpdate;
@@ -113,11 +118,11 @@ public class RoomFileMinio : MonoSingleton<RoomFileMinio>
     }
     void initMinIo(Action<bool> callBack)
     {
-        JsonData data = new JsonData();
-        data["roomId"] = projectId;
+       
         //获取上传凭证, 根据上传凭证获取的数据初始化 MInio
-        StartCoroutine(HttpTool.Instance.SendHttp(HttpEdustryAction.storage_roomCredential, data.ToJson(), async (string str) =>
+        StartCoroutine(HttpTool.Instance.SendHttp(HttpEdustryAction.storage_projectCredential, "", async (string str) =>
         {
+            Debug.Log("DGJ ===> initMinIo " + str);
             try
             {
 
@@ -127,34 +132,43 @@ public class RoomFileMinio : MonoSingleton<RoomFileMinio>
                 tmpSecretKey = d["data"]["credentials"]["tmpSecretKey"].ToString();
                 host = d["data"]["host"].ToString();
                 bucket = d["data"]["bucket"].ToString();
-                path = d["data"]["path"].ToString();
+              //  path = d["data"]["path"].ToString();
                 Debug.Log(str);
                 bool isHttps = host.Contains("https");
                 var endpoint = host.Split("//")[1];
                 var accessKey = tmpSecretId;//"tr6Nh5D8bnlGaLJE6vb5";
                 var secretKey = tmpSecretKey;// "aVOYdXLnX4MCiKbit8aomZNWvAx8YSpzhiwzFhrI";
                 Debug.Log("endpoint===>" + endpoint + "    isHttps==>" + isHttps);
-                minio = new MinioClient()
+                
+                if (d["data"]["region"] != null && !string.IsNullOrEmpty(d["data"]["region"].ToString()) && d["data"]["region"].ToString() != "null")
+                {
+                    region = d["data"]["region"].ToString();
+                    minio = new MinioClient()
                                     .WithEndpoint(endpoint)
                                     .WithCredentials(accessKey, secretKey)
                                     .WithSessionToken(minioToken)
                                     .WithSSL(isHttps)
+                                    .WithRegion(region)
                                     .Build();
 
-                var minioTest = new MinioClient()
+
+
+                }
+                else
+                {
+                    minio = new MinioClient()
                                     .WithEndpoint(endpoint)
                                     .WithCredentials(accessKey, secretKey)
                                     .WithSessionToken(minioToken)
                                     .WithSSL(isHttps)
                                     .Build();
 
+                }
 
-
-                //TimerMgr.Instance.CreateTimer(() =>
-                //{
-
-                //    // minio = null;
-                //}, 1200);
+                TimerMgr.Instance.CreateTimer(() =>
+                {
+                    minio = null;
+                }, 1800);
                 callBack?.Invoke(true);
             }
             catch
@@ -169,6 +183,7 @@ public class RoomFileMinio : MonoSingleton<RoomFileMinio>
     Queue<GetFileData> fdQueue = new Queue<GetFileData>();
     public void getFile( string bucket, string objectName, Action<RoomFileData> callBack, string roomId=null)//, string path
     {
+        Debug.Log(" DGJ  getFile " +bucket+"  "+ objectName);
         if (this.projectId != roomId)
         {
             this.projectId = roomId;
@@ -201,7 +216,7 @@ public class RoomFileMinio : MonoSingleton<RoomFileMinio>
         }
         if (minio == null)
         {
-            if (projectId != null && !isminioUpdate)
+            if (islogin&&!isminioUpdate)
             {
                 isminioUpdate = true;
                 initMinIo((bool b) =>
@@ -221,7 +236,7 @@ public class RoomFileMinio : MonoSingleton<RoomFileMinio>
             }
             catch
             {
-
+                
             }
             isUpdate = false;
             Nowfd = null;

+ 17 - 1
Assets/XR/Settings/OpenXR Package Settings.asset

@@ -40,6 +40,21 @@ MonoBehaviour:
   company: Unity
   priority: 0
   required: 0
+--- !u!114 &-8202465470782634198
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: b5a1f07dc5afe854f9f12a4194aca3fb, type: 3}
+  m_Name: WebGL
+  m_EditorClassIdentifier: 
+  features: []
+  m_renderMode: 1
+  m_depthSubmissionMode: 0
 --- !u!114 &-7827567102760189088
 MonoBehaviour:
   m_ObjectHideFlags: 0
@@ -368,11 +383,12 @@ MonoBehaviour:
   m_Script: {fileID: 11500000, guid: 9f0ebc320a151d3408ea1e9fce54d40e, type: 3}
   m_Name: OpenXR Package Settings
   m_EditorClassIdentifier: 
-  Keys: 010000000400000007000000
+  Keys: 0100000004000000070000000d000000
   Values:
   - {fileID: -7827567102760189088}
   - {fileID: 3791760985272178814}
   - {fileID: -1976151159784538485}
+  - {fileID: -8202465470782634198}
 --- !u!114 &524626373193399667
 MonoBehaviour:
   m_ObjectHideFlags: 0