GateMessageEvent.cs 1.0 KB

1234567891011121314151617181920212223242526272829303132
  1. using System;
  2. using Common.Network;
  3. using Model;
  4. namespace Controller
  5. {
  6. [Event(EventType.GateMessage, ServerType.Gate)]
  7. public class GateMessageEvent : IEventSync
  8. {
  9. public void Run(Env env)
  10. {
  11. byte[] message = env.Get<byte[]>(EnvKey.Message);
  12. AChannel channel = env.Get<AChannel>(EnvKey.Channel);
  13. // 进行消息分发
  14. int opcode = BitConverter.ToUInt16(message, 0);
  15. if (!MessageTypeHelper.IsClientMessage(opcode))
  16. {
  17. return;
  18. }
  19. ChannelUnitInfoComponent channelUnitInfoComponent = channel.GetComponent<ChannelUnitInfoComponent>();
  20. byte[] idBuffer = channelUnitInfoComponent.PlayerId.ToByteArray();
  21. byte[] buffer = new byte[message.Length + 12];
  22. Array.Copy(message, 0, buffer, 0, 4);
  23. Array.Copy(idBuffer, 0, buffer, 4, idBuffer.Length);
  24. Array.Copy(message, 4, buffer, 4 + 12, message.Length - 4);
  25. string address = AddressHelper.GetAddressByServerName(channelUnitInfoComponent.ServerName);
  26. World.Instance.GetComponent<NetworkComponent>().SendAsync(address, buffer);
  27. }
  28. }
  29. }