LogicRecvMessageEvent.cs 928 B

123456789101112131415161718192021222324252627282930313233
  1. using System;
  2. using Model;
  3. using MongoDB.Bson;
  4. namespace Controller
  5. {
  6. [Event(EventType.LogicRecvMessage, ServerType.All)]
  7. public class LogicRecvMessageEvent : IEventSync
  8. {
  9. public void Run(Env env)
  10. {
  11. byte[] message = env.Get<byte[]>(EnvKey.Message);
  12. int opcode = BitConverter.ToUInt16(message, 0);
  13. // 如果是客户端消息,转交给unit actor处理
  14. // 逻辑服收到客户端消息opcode(2) + id(12) + content
  15. if (MessageTypeHelper.IsClientMessage(opcode))
  16. {
  17. byte[] idBuffer = new byte[12];
  18. Array.Copy(message, 2, idBuffer, 0, 12);
  19. ObjectId unitId = new ObjectId(idBuffer);
  20. Unit unit = World.Instance.GetComponent<UnitComponent>().Get(unitId);
  21. if (unit != null)
  22. {
  23. unit.GetComponent<ActorComponent>().Add(env);
  24. }
  25. return;
  26. }
  27. World.Instance.GetComponent<EventComponent<MessageAttribute>>().RunAsync(opcode, env);
  28. }
  29. }
  30. }