MessageHelper.cs 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. 
  2. using System.Collections.Generic;
  3. using System.IO;
  4. namespace ET.Server
  5. {
  6. public static class MessageHelper
  7. {
  8. public static void NoticeUnitAdd(Unit unit, Unit sendUnit)
  9. {
  10. M2C_CreateUnits createUnits = new M2C_CreateUnits() { Units = new List<UnitInfo>() };
  11. createUnits.Units.Add(UnitHelper.CreateUnitInfo(sendUnit));
  12. MessageHelper.SendToClient(unit, createUnits);
  13. }
  14. public static void NoticeUnitRemove(Unit unit, Unit sendUnit)
  15. {
  16. M2C_RemoveUnits removeUnits = new M2C_RemoveUnits() {Units = new List<long>()};
  17. removeUnits.Units.Add(sendUnit.Id);
  18. MessageHelper.SendToClient(unit, removeUnits);
  19. }
  20. public static void Broadcast(Unit unit, IActorMessage message)
  21. {
  22. Dictionary<long, AOIEntity> dict = unit.GetBeSeePlayers();
  23. // 网络底层做了优化,同一个消息不会多次序列化
  24. foreach (AOIEntity u in dict.Values)
  25. {
  26. ActorMessageSenderComponent.Instance.Send(u.Unit.GetComponent<UnitGateComponent>().GateSessionActorId, message);
  27. }
  28. }
  29. public static void SendToClient(Unit unit, IActorMessage message)
  30. {
  31. SendActor(unit.GetComponent<UnitGateComponent>().GateSessionActorId, message);
  32. }
  33. /// <summary>
  34. /// 发送协议给ActorLocation
  35. /// </summary>
  36. /// <param name="id">注册Actor的Id</param>
  37. /// <param name="message"></param>
  38. public static void SendToLocationActor(long id, IActorLocationMessage message)
  39. {
  40. ActorLocationSenderComponent.Instance.Send(id, message);
  41. }
  42. /// <summary>
  43. /// 发送协议给Actor
  44. /// </summary>
  45. /// <param name="actorId">注册Actor的InstanceId</param>
  46. /// <param name="message"></param>
  47. public static void SendActor(long actorId, IActorMessage message)
  48. {
  49. ActorMessageSenderComponent.Instance.Send(actorId, message);
  50. }
  51. /// <summary>
  52. /// 发送RPC协议给Actor
  53. /// </summary>
  54. /// <param name="actorId">注册Actor的InstanceId</param>
  55. /// <param name="message"></param>
  56. /// <returns></returns>
  57. public static async ETTask<IActorResponse> CallActor(long actorId, IActorRequest message)
  58. {
  59. return await ActorMessageSenderComponent.Instance.Call(actorId, message);
  60. }
  61. /// <summary>
  62. /// 发送RPC协议给ActorLocation
  63. /// </summary>
  64. /// <param name="id">注册Actor的Id</param>
  65. /// <param name="message"></param>
  66. /// <returns></returns>
  67. public static async ETTask<IActorResponse> CallLocationActor(long id, IActorLocationRequest message)
  68. {
  69. return await ActorLocationSenderComponent.Instance.Call(id, message);
  70. }
  71. }
  72. }