Browse Source

GetUsers & FindUser

Rimmon 4 years ago
parent
commit
27992dc0d6

+ 1 - 1
Assets/Scripts/Controllers/CompanyController.cs

@@ -147,7 +147,7 @@ public class CompanyController : MonoBehaviour
                 Destroy(m.Value.marker_line.gameObject);
                 Destroy(m.Value.toggle_user);
             } 
-        Client.instance.SendGetUsers();
+        User.SendGetUsers();
         player.users = new Dictionary<uint, User>();
         Location.LocationsRequest(0);
     }

+ 44 - 5
Assets/Scripts/Models/User.cs

@@ -8,6 +8,7 @@ using UnityEngine.UI;
 
 public class User
 {
+    enum GetUserFlags { CompanyID, UserID };
     public uint id { get; set; }
     public string name { get; set; }
     public bool online { get; set; }
@@ -41,17 +42,55 @@ public class User
         player.users_load = true;
     }
 
+    public static void SendGetUsers()
+    {
+        SendGetUsersForCompany(Client.instance.company_id);
+    }
+    
+    //companyId: 1 = Тайшет, 2 = Тестовая, 3 = Братское
+    public static void SendGetUsersForCompany(uint companyId)
+    {
+        List<byte> list = new List<byte>();
+        list.Add(47);
+        list.Add((byte)GetUserFlags.CompanyID);
+        list.AddRange(BitConverter.GetBytes(companyId));
+        Client.SendEnqueue(list.ToArray());
+    }
+
+    public static void SendGetUser(uint userId)
+    {
+        List<byte> list = new List<byte>();
+        list.Add(47);
+        list.Add((byte)GetUserFlags.UserID);
+        list.AddRange(BitConverter.GetBytes(userId));
+        Client.SendEnqueue(list.ToArray());
+    }
+
+    public static User Find(uint id)
+    {
+        User user;
+        PlayerController.instance.users.TryGetValue(id, out user);
+        return user;
+    }
+
     public static void LogInOut(byte[] bytedata)
     {
         var accid = BitConverter.ToUInt32(bytedata, 1);
         var cmd = bytedata[5];
 
-        var player = PlayerController.instance;
-        var u = player.users[accid];
+        var u = User.Find(accid);
 
-        var b = cmd != 0;
-        u.toggle_user.SetActive(b);
-        u.marker.SetActive(b);
+        if (u != null)
+        {
+            var b = cmd != 0;
+            u.toggle_user.SetActive(b);
+            u.marker.SetActive(b);
+        }
+        else
+        {
+            Debug.LogError($"LogInOut accid {accid} not found");
+            SendGetUser(accid);
+        }
 
         Debug.Log($"LogInOut accid {accid} cmd {cmd}");
     }

+ 1 - 16
Assets/Scripts/Net/Client.cs

@@ -459,8 +459,7 @@ public class Client : MonoBehaviour
         entered = true;
         CreateCameraImage();
         RemoteAssistInit();
-        RemoteAssistCanvas = GameObject.Find("RemoteAssistCanvas");
-        RemoteAssistCanvas.SetActive(false);
+        RemoteAssistCanvas = GameObject.Find("RemoteAssistCanvas");        
     }
 
     void CreateCameraImage()
@@ -880,20 +879,6 @@ public class Client : MonoBehaviour
         SendEnqueue(list.ToArray());
     }
 
-    public void SendGetUsers()
-    {
-        SendGetUsers(instance.company_id);
-    }
-
-    //companyId: 1 = Тайшет, 2 = Тестовая, 3 = Братское
-    public static void SendGetUsers(uint companyId)
-    {
-        List<byte> list = new List<byte>();
-        list.Add(47);
-        list.AddRange(BitConverter.GetBytes(companyId));
-        SendEnqueue(list.ToArray());
-    }
-
     public static byte[] ConstructVariablePacket(byte num, byte[] vardatabytes)
     {
         List<byte> bytedata = new List<byte>();

+ 1 - 0
Assets/Scripts/RemoteAssist/RemoteClickAction.cs

@@ -61,6 +61,7 @@ public class RemoteClickAction : MonoBehaviour, IVideoCallSession
 
         drawToolsCanvas_.SetActive(false); //TODO
         RemoteTextureTestFill();
+        Client.instance.RemoteAssistCanvas.SetActive(false);
     }
 
     private void RemoteTextureTestFill()