using UnityEngine; using System; using System.Collections.Generic; using Sfs2X.Core; using Sfs2X.Entities; using Sfs2X.Requests; using Sfs2X.Entities.Data; public class BaseSFSExtension { public GardenSmartFox GardenSmartFox; public List Instances = new List(); public Dictionary> ResponseDictionary = new Dictionary>(); public BaseSFSExtension(GardenSmartFox smartFox) { GardenSmartFox = smartFox; GardenSmartFox.SmartFox.AddEventListener(SFSEvent.EXTENSION_RESPONSE, OnExtensionResponse); GardenSmartFox.SmartFox.AddEventListener(SFSEvent.USER_VARIABLES_UPDATE, OnUserVariablesUpdate); GardenSmartFox.SmartFox.AddEventListener(SFSEvent.ROOM_JOIN, OnRoomJoin); GardenSmartFox.SmartFox.AddEventListener(SFSEvent.ROOM_JOIN_ERROR, OnRoomJoinError); GardenSmartFox.SmartFox.AddEventListener(SFSEvent.USER_ENTER_ROOM, OnUserEnterRoom); GardenSmartFox.SmartFox.AddEventListener(SFSEvent.USER_EXIT_ROOM, OnUserExitRoom); } public void OnExtensionResponse(BaseEvent baseEvent) { int requestID = int.Parse((string)baseEvent.Params["cmd"]); if (ResponseDictionary.ContainsKey(requestID)) { ResponseDictionary[requestID].Invoke(baseEvent); } else { Action callback = GetExtensionResponseMethod(requestID); ResponseDictionary.Add(requestID, callback); callback.Invoke(baseEvent); } } private Action GetExtensionResponseMethod(int requestID) { for (int i = 0; i < Instances.Count; i++) { Action method = (Action)Delegate.CreateDelegate(typeof(Action), Instances[i], Enum.GetName(typeof(Response), requestID), false, false); if (method != null) return method; } throw new Exception("没有找到方法 : " + requestID); } public void OnUserVariablesUpdate(BaseEvent baseEvent) { //DebugManager.PrintKeysAndValuesOfBaseEvent("OnUserVariablesUpdate", baseEvent); User user = (User)baseEvent.Params["user"]; if (GardenSmartFox.PlazaRoomManager.CurrentPlazaRoom != null && GardenSmartFox.PlazaRoomManager.CurrentPlazaRoom.UserList.Contains(user)) { List changedVars = (List)baseEvent.Params["changedVars"]; GardenSmartFox.PlazaRoomManager.OnUserVariablesUpdate(user, changedVars); } } public void OnRoomJoin(BaseEvent baseEvent) { //DebugManager.PrintKeysAndValuesOfBaseEvent("OnRoomJoin", baseEvent); Room room = (Room) baseEvent.Params["room"]; if (room.GroupId == GardenSmartFox.ExtensionManager.PlazaRoomExtension.PlazaRoomGroupID) { GardenSmartFox.ExtensionManager.PlazaRoomExtension.OnJoinPlazaRoom(room); } } public void OnRoomJoinError(BaseEvent baseEvent) { DebugManager.PrintKeysAndValuesOfBaseEvent("OnRoomJoinError", baseEvent); } public void OnUserExitRoom(BaseEvent baseEvent) { //DebugManager.PrintKeysAndValuesOfBaseEvent("OnUserExitRoom", baseEvent); User user = (User) baseEvent.Params["user"]; Room room = (Room) baseEvent.Params["room"]; if (room.GroupId == GardenSmartFox.ExtensionManager.PlazaRoomExtension.PlazaRoomGroupID) { GardenSmartFox.ExtensionManager.PlazaRoomExtension.OnUserExitPlazaRoom(room, user); } } public void OnUserEnterRoom(BaseEvent baseEvent) { //DebugManager.PrintKeysAndValuesOfBaseEvent("OnUserEnterRoom", baseEvent); User user = (User)baseEvent.Params["user"]; Room room = (Room)baseEvent.Params["room"]; if (room.GroupId == GardenSmartFox.ExtensionManager.PlazaRoomExtension.PlazaRoomGroupID) { GardenSmartFox.ExtensionManager.PlazaRoomExtension.OnUserEnterPlazaRoom(room, user); } } public void SendRequest(int requestID, SFSObject parameter) { GardenSmartFox.SmartFox.Send(new ExtensionRequest(requestID.ToString(), parameter)); Debug.Log("Send request : " + Enum.GetName(typeof(Request), requestID)); } public void SendRequest(string requestID, SFSObject parameter) { SendRequest(int.Parse(requestID), parameter); } public void SendRequest(int requestID, params Action[] paramsConstructors) { SFSObject Params = new SFSObject(); for (int i = 0; i < paramsConstructors.Length; i++) { paramsConstructors[i].Invoke(Params); } GardenSmartFox.SmartFox.Send(new ExtensionRequest(requestID.ToString(), Params)); Debug.Log("Send request : " + Enum.GetName(typeof(Request), requestID)); } public void SendRequest(string requestID, params Action[] paramsConstructors) { SendRequest(int.Parse(requestID), paramsConstructors); } }