BaseSFSExtension.cs 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. using UnityEngine;
  2. using System;
  3. using System.Collections.Generic;
  4. using Sfs2X.Core;
  5. using Sfs2X.Entities;
  6. using Sfs2X.Requests;
  7. using Sfs2X.Entities.Data;
  8. public class BaseSFSExtension
  9. {
  10. public GardenSmartFox GardenSmartFox;
  11. public List<object> Instances = new List<object>();
  12. public Dictionary<int, Action<BaseEvent>> DatabaseDictionary = new Dictionary<int, Action<BaseEvent>>();
  13. public Dictionary<int, Action<BaseEvent>> CommandDictionary = new Dictionary<int, Action<BaseEvent>>();
  14. public BaseSFSExtension Init(GardenSmartFox smartFox)
  15. {
  16. GardenSmartFox = smartFox;
  17. GardenSmartFox.SmartFox.AddEventListener(SFSEvent.EXTENSION_RESPONSE, OnExtensionResponse);
  18. GardenSmartFox.SmartFox.AddEventListener(SFSEvent.ROOM_JOIN, OnRoomJoin);
  19. GardenSmartFox.SmartFox.AddEventListener(SFSEvent.ROOM_JOIN_ERROR, OnRoomJoinError);
  20. GardenSmartFox.SmartFox.AddEventListener(SFSEvent.USER_ENTER_ROOM, OnUserEnterRoom);
  21. GardenSmartFox.SmartFox.AddEventListener(SFSEvent.USER_EXIT_ROOM, OnUserExitRoom);
  22. return this;
  23. }
  24. public void OnExtensionResponse(BaseEvent baseEvent)
  25. {
  26. //DebugManager.PrintKeysAndValuesOfBaseEvent("OnExtensionResponse", baseEvent);
  27. string[] strings = baseEvent.Params["cmd"].ToString().Split('|');
  28. int requestID = int.Parse(strings[0]);
  29. int id = int.Parse(strings[1]);
  30. if (requestID == RequestID.Command.GetHashCode())
  31. HandleExtensionResponse(baseEvent, CommandDictionary, typeof(CommandID), id);
  32. else if (requestID == RequestID.Database.GetHashCode())
  33. HandleExtensionResponse(baseEvent, DatabaseDictionary, typeof(DatabaseID), id);
  34. }
  35. private void HandleExtensionResponse(BaseEvent baseEvent, Dictionary<int, Action<BaseEvent>> dictionary, Type type, int id)
  36. {
  37. if (dictionary.ContainsKey(id))
  38. {
  39. dictionary[id].Invoke(baseEvent);
  40. }
  41. else
  42. {
  43. Action<BaseEvent> callback = GetExtensionResponseMethod(type, id);
  44. dictionary.Add(id, callback);
  45. callback.Invoke(baseEvent);
  46. }
  47. }
  48. private Action<BaseEvent> GetExtensionResponseMethod(Type type, int id)
  49. {
  50. for (int i = 0; i < Instances.Count; i++)
  51. {
  52. Action<BaseEvent> method = (Action<BaseEvent>)Delegate.CreateDelegate(typeof(Action<BaseEvent>), Instances[i], Enum.GetName(type, id), false, false);
  53. if (method != null)
  54. return method;
  55. }
  56. throw new Exception("没有找到方法 : " + id);
  57. }
  58. public void OnRoomJoin(BaseEvent baseEvent)
  59. {
  60. //DebugManager.PrintKeysAndValuesOfBaseEvent("OnRoomJoin", baseEvent);
  61. Room room = (Room) baseEvent.Params["room"];
  62. if (room.GroupId == GardenSmartFox.ExtensionManager.PlazaRoomExtension.PlazaRoomGroupID)
  63. {
  64. GardenSmartFox.ExtensionManager.PlazaRoomExtension.OnJoinPlazaRoom(room);
  65. }
  66. }
  67. public void OnRoomJoinError(BaseEvent baseEvent)
  68. {
  69. DebugManager.PrintKeysAndValuesOfBaseEvent("OnRoomJoinError", baseEvent);
  70. }
  71. public void OnUserExitRoom(BaseEvent baseEvent)
  72. {
  73. //DebugManager.PrintKeysAndValuesOfBaseEvent("OnUserExitRoom", baseEvent);
  74. User user = (User) baseEvent.Params["user"];
  75. Room room = (Room) baseEvent.Params["room"];
  76. if (room.GroupId == GardenSmartFox.ExtensionManager.PlazaRoomExtension.PlazaRoomGroupID)
  77. {
  78. GardenSmartFox.ExtensionManager.PlazaRoomExtension.OnUserExitPlazaRoom(room, user);
  79. }
  80. }
  81. public void OnUserEnterRoom(BaseEvent baseEvent)
  82. {
  83. //DebugManager.PrintKeysAndValuesOfBaseEvent("OnUserEnterRoom", baseEvent);
  84. User user = (User)baseEvent.Params["user"];
  85. Room room = (Room)baseEvent.Params["room"];
  86. if (room.GroupId == GardenSmartFox.ExtensionManager.PlazaRoomExtension.PlazaRoomGroupID)
  87. {
  88. GardenSmartFox.ExtensionManager.PlazaRoomExtension.OnUserEnterPlazaRoom(room, user);
  89. }
  90. }
  91. }