NetServerComponentOnReadEvent.cs 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. namespace ET.Server
  2. {
  3. [Event(SceneType.Process)]
  4. public class NetServerComponentOnReadEvent: AEvent<NetServerComponentOnRead>
  5. {
  6. protected override async ETTask Run(Scene scene, NetServerComponentOnRead args)
  7. {
  8. Session session = args.Session;
  9. object message = args.Message;
  10. if (message is IResponse response)
  11. {
  12. session.OnResponse(response);
  13. return;
  14. }
  15. // 根据消息接口判断是不是Actor消息,不同的接口做不同的处理,比如需要转发给Chat Scene,可以做一个IChatMessage接口
  16. switch (message)
  17. {
  18. case IActorLocationRequest actorLocationRequest: // gate session收到actor rpc消息,先向actor 发送rpc请求,再将请求结果返回客户端
  19. {
  20. long unitId = session.GetComponent<SessionPlayerComponent>().PlayerId;
  21. int rpcId = actorLocationRequest.RpcId; // 这里要保存客户端的rpcId
  22. long instanceId = session.InstanceId;
  23. IResponse iResponse = await ActorLocationSenderComponent.Instance.Call(unitId, actorLocationRequest);
  24. iResponse.RpcId = rpcId;
  25. // session可能已经断开了,所以这里需要判断
  26. if (session.InstanceId == instanceId)
  27. {
  28. session.Send(iResponse);
  29. }
  30. break;
  31. }
  32. case IActorLocationMessage actorLocationMessage:
  33. {
  34. long unitId = session.GetComponent<SessionPlayerComponent>().PlayerId;
  35. ActorLocationSenderComponent.Instance.Send(unitId, actorLocationMessage);
  36. break;
  37. }
  38. case IActorRequest actorRequest: // 分发IActorRequest消息,目前没有用到,需要的自己添加
  39. {
  40. break;
  41. }
  42. case IActorMessage actorMessage: // 分发IActorMessage消息,目前没有用到,需要的自己添加
  43. {
  44. break;
  45. }
  46. default:
  47. {
  48. // 非Actor消息
  49. MessageDispatcherComponent.Instance.Handle(session, message);
  50. break;
  51. }
  52. }
  53. }
  54. }
  55. }