Selaa lähdekoodia

修复交互房间Bug

liuqilin 8 vuotta sitten
vanhempi
commit
b1a9ed114a

+ 1 - 1
Assets/Script/Manage/ManaData.cs

@@ -662,7 +662,7 @@ public class ManaData : Regist
         return dressDataIDs;
     }
 
-    public static List<int> GetDressDataIDs(SFSObject parameter)
+    public static List<int> GetDressDataIDs(ISFSObject parameter)
     {
         List<int> ids = parameter.GetIntArray(InfoLabel.Close.GetHashString()).ToList();
 

+ 1 - 1
Assets/Script/Manage/ManaUI.cs

@@ -2847,7 +2847,7 @@ public class ManaUI : Regist
             {
                 ManaAudio.PlayClip(Clip.BtnClip);
 
-                SFSManager.GardenSmartFox.PlazaRoomManager.ExitPlazaRoom();
+                SFSManager.GardenSmartFox.SmartFox.Disconnect();
             }
         );
 

+ 1 - 0
Assets/Script/SFS/Data/PlazaRoomRep.cs

@@ -16,4 +16,5 @@
     ReceiveCustomRoomData=(13),
     ReceiveRoomStatus=(14),
     OtherEnterRoom=(15),
+    OtherExitRoom=(16),
 }

+ 6 - 0
Assets/Script/SFS/Manager/SFSManager.cs

@@ -108,6 +108,12 @@ public class SFSManager : Regist
             GardenSmartFox.Connector.Disconnect();
     }
 
+    public void OnApplicationQuit()
+    {
+        if (GardenSmartFox != null)
+            GardenSmartFox.Connector.Disconnect();
+    }
+
 
     public void Update()
     {

+ 29 - 39
Assets/Script/SFS/Manager/SFSPlazaRoomManager.cs

@@ -147,7 +147,6 @@ public class SFSPlazaRoomManager
 
     public GardenSmartFox GardenSmartFox;
 
-    public User SelfUser;
     public PlazaRoomPlayer SelfInstance;
     public Room CurrentPlazaRoom;
 
@@ -161,7 +160,7 @@ public class SFSPlazaRoomManager
     public bool EnteringPlazaRoom;
     public JoinRoomResult JoinRoomResult;
 
-    public Dictionary<User, PlazaRoomPlayer> UserInstanceDictionary = new Dictionary<User, PlazaRoomPlayer>();
+    public Dictionary<int, PlazaRoomPlayer> UserInstanceDictionary = new Dictionary<int, PlazaRoomPlayer>();
 
     #endregion
 
@@ -261,12 +260,11 @@ public class SFSPlazaRoomManager
         GardenSmartFox.PlazaRoomManager.PlazaRoomCamera = ManaReso.Get<Camera>("MainCamera");
         GardenSmartFox.PlazaRoomManager.CameraOriginPosition = GardenSmartFox.PlazaRoomManager.PlazaRoomCamera.transform.position;
 
-        SelfUser = GardenSmartFox.User;
         PlayerDefaultPosition = ManaReso.Get("PlazaRoomDefaultPosition").position;
-        SelfInstance = InstantiatePlayer(SelfUser, ManaNickName.NickName, PlayerDefaultPosition, PlayerDirection.Left, ManaData.GetDressDataIDs(ManaPlayer.Player));
+        SelfInstance = InstantiatePlayer(ManaNickName.NickName, PlayerDefaultPosition, PlayerDirection.Left, ManaData.GetDressDataIDs(ManaPlayer.Player));
         SelfInstance.Player.transform.position += new Vector3(0, 0, -0.001f);
-
-        UserInstanceDictionary.Add(SelfUser, SelfInstance);
+        
+        UserInstanceDictionary.Add(SFSManager.GardenSmartFox.User.Id, SelfInstance);
 
         SendInstantiateRequset(-1);
 
@@ -314,7 +312,7 @@ public class SFSPlazaRoomManager
                     kv.Value.Save();
                 }
 
-                UserInstanceDictionary = new Dictionary<User, PlazaRoomPlayer>();
+                UserInstanceDictionary = new Dictionary<int, PlazaRoomPlayer>();
             }
         );
     }
@@ -460,45 +458,45 @@ public class SFSPlazaRoomManager
         TryEnterPlazaRoom();
     }
 
-    public void OnUserExitPlazaRoom(User user)
+    public void OnUserExitPlazaRoom(int userID)
     {
-        UserInstanceDictionary[user].Save();
+        UserInstanceDictionary[userID].Save();
 
-        UserInstanceDictionary.Remove(user);
+        UserInstanceDictionary.Remove(userID);
     }
 
-    public void OnUserEnterPlazaRoom(User user)
+    public void OnUserEnterPlazaRoom(int senderID)
     {
-        SendInstantiateRequset(user);
+        SendInstantiateRequset(senderID);
     }
 
 
-    public void Synchronize(User sender, SFSObject parameter)
+    public void Synchronize(int senderID, ISFSObject parameter)
     {
-        if (!UserInstanceDictionary.ContainsKey(sender))
+        if (!UserInstanceDictionary.ContainsKey(senderID))
             return;
 
-        if (sender.IsItMe)
+        if (SFSManager.GardenSmartFox.User.Id == senderID)
             return;
 
         if (parameter.ContainsKey(InfoLabel.Destination.GetHashString()))
         {
             Vector3 destination = parameter.GetUtfString(InfoLabel.Destination.GetHashString()).StringToVector();
 
-            SynchronizeDestination(destination, sender);
+            SynchronizeDestination(destination, senderID);
         }
 
         if (parameter.ContainsKey(InfoLabel.Close.GetHashString()))
         {
             List<int> closeIDs = parameter.GetIntArray(InfoLabel.Destination.GetHashString()).ToList();
 
-            SynchronizeClose(closeIDs, sender);
+            SynchronizeClose(closeIDs, senderID);
         }
     }
 
-    public void SynchronizeClose(List<int> closeIDs, User sender)
+    public void SynchronizeClose(List<int> closeIDs, int senderID)
     {
-        Player player = UserInstanceDictionary[sender].Player;
+        Player player = UserInstanceDictionary[senderID].Player;
 
         foreach (var closeID in closeIDs)
         {
@@ -508,15 +506,15 @@ public class SFSPlazaRoomManager
         }
     }
 
-    public void SynchronizeDestination(Vector3 destination, User sender)
+    public void SynchronizeDestination(Vector3 destination, int senderID)
     {
-        UserInstanceDictionary[sender].MoveTo(destination);
+        UserInstanceDictionary[senderID].MoveTo(destination);
     }
 
     private float ExpressionDuration = 1;
-    public void ReceiveExpression(int expressionID, User sender)
+    public void ReceiveExpression(int expressionID, int senderID)
     {
-        PlazaRoomPlayer plazaRoomPlayer = UserInstanceDictionary[sender];
+        PlazaRoomPlayer plazaRoomPlayer = UserInstanceDictionary[senderID];
 
         string expressionName = Enum.GetName(typeof(ExpressionID), expressionID);
         plazaRoomPlayer.Player.ChangeExpression(expressionName, ExpressionDuration);
@@ -526,10 +524,9 @@ public class SFSPlazaRoomManager
         ManaReso.SetText("X_CurrentInfoLab", message);
     }
 
-    public void ReceivePublicMessage(string message, User sender)
+    public void ReceivePublicMessage(string message, int senderID)
     {
-        //Debug.Log(sender.Id);
-        PlazaRoomPlayer plazaRoomPlayer = UserInstanceDictionary[sender];
+        PlazaRoomPlayer plazaRoomPlayer = UserInstanceDictionary[senderID];
 
         plazaRoomPlayer.ShowMessage(message);
 
@@ -538,12 +535,12 @@ public class SFSPlazaRoomManager
         ManaReso.SetText("X_CurrentInfoLab", message);
     }
 
-    public void OnInstantiate(User user, SFSObject parameter)
+    public void OnInstantiate(int senderID, ISFSObject parameter)
     {
-        if (user.IsItMe)
+        if (SFSManager.GardenSmartFox.User.Id == senderID)
             return;
 
-        UserInstanceDictionary.Add(user, InstantiatePlayer(user, parameter));
+        UserInstanceDictionary.Add(senderID, InstantiatePlayer(parameter));
     }
 
 
@@ -570,12 +567,6 @@ public class SFSPlazaRoomManager
         }
     }
 
-
-    public void SendInstantiateRequset(User receiver)
-    {
-        SendInstantiateRequset(receiver.Id);
-    }
-
     public void SendInstantiateRequset(int receiverID)
     {
         SFSObject parameter = new SFSObject();
@@ -593,13 +584,12 @@ public class SFSPlazaRoomManager
         }
     }
 
-
     public void SendSynchronizeDestination(Vector3 destination)
     {
         SFSManager.GardenSmartFox.EventManager.PlazaRoomEvent.SendSynchronizeDestination(destination);
     }
 
-    public PlazaRoomPlayer InstantiatePlayer(User user, string nickName, Vector3 position, PlayerDirection direction, List<int> dressDataIDs)
+    public PlazaRoomPlayer InstantiatePlayer(string nickName, Vector3 position, PlayerDirection direction, List<int> dressDataIDs)
     {
         Transform parent = ManaReso.Get("PlazaRoom", false);
         Transform tra = ManaReso.Get("Player", Folder.Scene, false, parent, false, ObjType.Player);
@@ -629,14 +619,14 @@ public class SFSPlazaRoomManager
         return new PlazaRoomPlayer(player, nickName);
     }
 
-    public PlazaRoomPlayer InstantiatePlayer(User user, SFSObject parameter)
+    public PlazaRoomPlayer InstantiatePlayer(ISFSObject parameter)
     {
         List<int> dressDatas = ManaData.GetDressDataIDs(parameter);
         Vector3 position = parameter.GetUtfString(InfoLabel.Position.GetHashString()).StringToVector();
         PlayerDirection direction = (PlayerDirection) parameter.GetInt(InfoLabel.PlayerDirection.GetHashString());
         string nickName = parameter.GetUtfString(InfoLabel.NickName.GetHashString());
 
-        PlazaRoomPlayer plazaRoomPlayer = InstantiatePlayer(user, nickName, position, direction, dressDatas);
+        PlazaRoomPlayer plazaRoomPlayer = InstantiatePlayer(nickName, position, direction, dressDatas);
 
         return plazaRoomPlayer;
     }

+ 7 - 15
Assets/Script/SFS/SFSEvent/EventDispatcher.cs

@@ -16,14 +16,13 @@ public class EventDispatcher
     {
         SFSEventManager = eventManager;
         SFSEventManager.GardenSmartFox.SmartFox.AddEventListener(SFSEvent.EXTENSION_RESPONSE, OnExtensionResponse);
-        SFSEventManager.GardenSmartFox.SmartFox.AddEventListener(SFSEvent.USER_EXIT_ROOM, OnUserExitRoom);
     }
 
 
     public void OnExtensionResponse(BaseEvent baseEvent)
     {
         string cmd = baseEvent.Params["cmd"].ToString();
-        //Debug.Log("receive cmd " + cmd);
+
         if (cmd == PlazaRoomRep.JoinRoomError.GetHashString())
         {
             SFSEventManager.PlazaRoomEvent.OnJoinPlazaRoomError(baseEvent);
@@ -70,7 +69,7 @@ public class EventDispatcher
         }
         else if (cmd == PlazaRoomRep.ReceiveAllChestData.GetHashString())
         {
-
+            
         }
         else if (cmd == PlazaRoomRep.ReceiveRoomData.GetHashString())
         {
@@ -86,22 +85,15 @@ public class EventDispatcher
         }
         else if (cmd == PlazaRoomRep.OtherEnterRoom.GetHashString())
         {
-            
+            SFSEventManager.PlazaRoomEvent.OnOtherEnterRoom(baseEvent);
         }
-        else
+        else if (cmd == PlazaRoomRep.OtherExitRoom.GetHashString())
         {
-            throw new Exception();
+            SFSEventManager.PlazaRoomEvent.OnOtherExitRoom(baseEvent);
         }
-    }
-
-    public void OnUserExitRoom(BaseEvent baseEvent)
-    {
-        User user = (User) baseEvent.Params["user"];
-        Room room = (Room) baseEvent.Params["room"];
-
-        if (room.GroupId == PlazaRoomEvent.PlazaRoomGroupID)
+        else
         {
-            SFSEventManager.PlazaRoomEvent.OnUserExitPlazaRoom(room, user);
+            throw new Exception();
         }
     }
 }

+ 23 - 34
Assets/Script/SFS/SFSEvent/PlazaRoomEvent.cs

@@ -210,48 +210,41 @@ public class PlazaRoomEvent
 
     public void OnInstantiate(BaseEvent baseEvent)
     {
-        SFSObject parameter = (SFSObject)baseEvent.Params["params"];
+        ISFSObject parameter = (ISFSObject)baseEvent.Params["params"];
 
         int senderID = parameter.GetInt(InfoLabel.SenderID.GetHashString());
 
-        User sender = CurrentPlazaRoom.GetUserById(senderID);
-
-        SFSEventManager.GardenSmartFox.PlazaRoomManager.OnInstantiate(sender, parameter);
+        SFSEventManager.GardenSmartFox.PlazaRoomManager.OnInstantiate(senderID, parameter.GetSFSObject(Label.Data));
     }
 
     public void OnSynchronize(BaseEvent baseEvent)
     {
-        SFSObject parameter = (SFSObject)baseEvent.Params["params"];
+        ISFSObject parameter = (ISFSObject)baseEvent.Params["params"];
         
         int senderID = parameter.GetInt(InfoLabel.SenderID.GetHashString());
 
-        User sender = CurrentPlazaRoom.GetUserById(senderID);
-
-        SFSEventManager.GardenSmartFox.PlazaRoomManager.Synchronize(sender, parameter);
+        SFSEventManager.GardenSmartFox.PlazaRoomManager.Synchronize(senderID, parameter.GetSFSObject(Label.Data));
     }
 
     public void OnReceiveExpression(BaseEvent baseEvent)
     {
-        SFSObject parameter = (SFSObject)baseEvent.Params["params"];
-
+        ISFSObject parameter = (ISFSObject)baseEvent.Params["params"];
         int senderID = parameter.GetInt(InfoLabel.SenderID.GetHashString());
-        int expressionID = parameter.GetInt(InfoLabel.Expression.GetHashString());
 
-        User sender = CurrentPlazaRoom.GetUserById(senderID);
+        parameter = parameter.GetSFSObject(Label.Data);
+        int expressionID = parameter.GetInt(InfoLabel.Expression.GetHashString());
 
-        SFSEventManager.GardenSmartFox.PlazaRoomManager.ReceiveExpression(expressionID, sender);
+        SFSEventManager.GardenSmartFox.PlazaRoomManager.ReceiveExpression(expressionID, senderID);
     }
 
     public void OnReceivePublicMessage(BaseEvent baseEvent)
     {
-        SFSObject parameter = (SFSObject)baseEvent.Params["params"];
-
+        ISFSObject parameter = (ISFSObject)baseEvent.Params["params"];
         int senderID = parameter.GetInt(InfoLabel.SenderID.GetHashString());
+        parameter = parameter.GetSFSObject(Label.Data);
         string message = parameter.GetUtfString(InfoLabel.Message.GetHashString());
 
-        User sender = CurrentPlazaRoom.GetUserById(senderID);
-
-        SFSEventManager.GardenSmartFox.PlazaRoomManager.ReceivePublicMessage(message, sender);
+        SFSEventManager.GardenSmartFox.PlazaRoomManager.ReceivePublicMessage(message, senderID);
     }
 
 
@@ -272,35 +265,29 @@ public class PlazaRoomEvent
         SFSEventManager.GardenSmartFox.PlazaRoomManager.OnJoinPlazaRoomError(joinRoomRequest);
     }
 
-    public void OnUserExitPlazaRoom(Room room, User user)
+    public void OnOtherExitRoom(BaseEvent baseEvent)
     {
-        if (room.Id == CurrentPlazaRoom.Id)
-        {
-            OnUserExitCurrentPlazaRoom(user);
-        }
-    }
+        ISFSObject arg = (ISFSObject)baseEvent.Params["params"];
+        int userID = arg.GetInt(Label.UserID);
 
-    public void OnUserExitCurrentPlazaRoom(User user)
-    {
-        Debug.LogWarning($"User : {user.Name} left room");
+        if (userID != SFSManager.GardenSmartFox.User.Id)
+        {
+            Debug.LogWarning($"User : {userID} left room");
 
-        SFSEventManager.GardenSmartFox.PlazaRoomManager.OnUserExitPlazaRoom(user);
+            SFSEventManager.GardenSmartFox.PlazaRoomManager.OnUserExitPlazaRoom(userID);
+        }
     }
 
     public void OnOtherEnterRoom(BaseEvent baseEvent)
     {
         ISFSObject arg = (ISFSObject) baseEvent.Params["params"];
         int userID = arg.GetInt(Label.UserID);
-        //int roomID = arg.GetInt(Label.RoomID);
-
-        User user = new SFSUser(userID, Random.Range(0f, 100f).ToString());
-        //Room room = new SFSRoom(roomID, Random.Range(0f, 100f).ToString());
 
         if (userID != SFSManager.GardenSmartFox.User.Id)
         {
-            Debug.LogWarning($"User : {user.Name} joined room");
+            Debug.LogWarning($"User : {userID} joined room");
 
-            SFSEventManager.GardenSmartFox.PlazaRoomManager.OnUserEnterPlazaRoom(user);
+            SFSEventManager.GardenSmartFox.PlazaRoomManager.OnUserEnterPlazaRoom(userID);
         }
     }
 
@@ -309,9 +296,11 @@ public class PlazaRoomEvent
     {
         SFSObject obj = new SFSObject();
 
+        obj.PutInt(Label.CommandID, PlazaRoomReq.SendInfo.GetHashCode());
         obj.PutInt(Label.RoomID, roomID);
         obj.PutInt(Label.TargetUserID, targetUserID);
         obj.PutInt(Label.InfoID, infoID.GetHashCode());
+        obj.PutInt(InfoLabel.SenderID.GetHashString(), SFSManager.GardenSmartFox.User.Id);
         obj.PutSFSObject(Label.Data, parameter);
 
         return obj;

+ 1 - 7
Assets/Script/Tool/Auxiliary.cs

@@ -142,13 +142,7 @@ public class Auxiliary : Regist
 
         if (Input.GetKeyDown(KeyCode.Space))
         {
-            SFSManager.GardenSmartFox.ExecuteAfterCheckConection
-            (
-                () =>
-                {
-                    SFSManager.GardenSmartFox.EventManager.PlazaRoomEvent.GetRoomData(1);
-                }
-            );
+            SFSManager.GardenSmartFox.SmartFox.Disconnect();
             //ManaReso.Get<VerticalLayoutGroup>("R_Grid").CalculateLayoutInputVertical();
             //ManaReso.Get<VerticalLayoutGroup>("R_Grid").SetLayoutVertical();
         }

+ 2 - 0
第三期.txt

@@ -1,3 +1,5 @@
+不隐藏系统房间
+
 房间已过期 房间已满的后续处理
 
 测试每过一段时间刷新一次状态(两种模式)