123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154 |
- 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<object> Instances = new List<object>();
- public Dictionary<int, Action<BaseEvent>> ResponseDictionary = new Dictionary<int, Action<BaseEvent>>();
- 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<BaseEvent> callback = GetExtensionResponseMethod(requestID);
- ResponseDictionary.Add(requestID, callback);
- callback.Invoke(baseEvent);
- }
- }
- private Action<BaseEvent> GetExtensionResponseMethod(int requestID)
- {
- for (int i = 0; i < Instances.Count; i++)
- {
- Action<BaseEvent> method = (Action<BaseEvent>)Delegate.CreateDelegate(typeof(Action<BaseEvent>), 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<string> changedVars = (List<string>)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<SFSObject>[] 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<SFSObject>[] paramsConstructors)
- {
- SendRequest(int.Parse(requestID), paramsConstructors);
- }
- }
|