MessageParseHelper.cs 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. using System;
  2. using Common.Helper;
  3. using Model;
  4. using MongoDB.Bson;
  5. namespace Controller
  6. {
  7. public static class MessageParseHelper
  8. {
  9. public static void LogicParseClientToGateToLogicMessage(byte[] message, Env env)
  10. {
  11. ushort opcode = BitConverter.ToUInt16(message, 0);
  12. env[EnvKey.Opcode] = opcode;
  13. byte[] bytes = new byte[12];
  14. Array.Copy(message, 2, bytes, 0, 12);
  15. env[EnvKey.MessageUnitId] = new ObjectId(bytes);
  16. Type messageType =
  17. World.Instance.GetComponent<MessageComponent>().GetClassType(opcode);
  18. env[EnvKey.Message] = MongoHelper.FromBson(messageType, message, 14, message.Length - 14);
  19. }
  20. public static void GateParseClientToGateMessage(byte[] message, Env env)
  21. {
  22. ushort opcode = BitConverter.ToUInt16(message, 0);
  23. env[EnvKey.Opcode] = opcode;
  24. Type messageType =
  25. World.Instance.GetComponent<MessageComponent>().GetClassType(opcode);
  26. env[EnvKey.Message] = MongoHelper.FromBson(messageType, message, 2, message.Length - 2);
  27. }
  28. public static void LogicParseRpcRequestMessage(byte[] message, Env env)
  29. {
  30. ushort opcode = BitConverter.ToUInt16(message, 0);
  31. int requestId = BitConverter.ToInt32(message, 2);
  32. env[EnvKey.Opcode] = opcode;
  33. env[EnvKey.RpcRequestId] = requestId;
  34. Type messageType = World.Instance.GetComponent<MessageComponent>().GetClassType(opcode);
  35. env[EnvKey.Message] = MongoHelper.FromBson(messageType, message, 2, message.Length - 2);
  36. }
  37. /// <summary>
  38. /// 客户端的消息经gate转发给logic server需要在协议中插入unitid
  39. /// </summary>
  40. public static byte[] ClientToGateMessageChangeToLogicMessage(byte[] messageBytes, ObjectId id)
  41. {
  42. byte[] idBuffer = id.ToByteArray();
  43. byte[] buffer = new byte[messageBytes.Length + 12];
  44. Array.Copy(messageBytes, 0, buffer, 0, 2);
  45. Array.Copy(idBuffer, 0, buffer, 2, idBuffer.Length);
  46. Array.Copy(messageBytes, 2, buffer, 14, messageBytes.Length - 2);
  47. return buffer;
  48. }
  49. /// <summary>
  50. /// Logic的消息经gate转发给client,需要在协议中删除unitid
  51. /// </summary>
  52. public static byte[] LogicToGateMessageChangeToClientMessage(byte[] messageBytes)
  53. {
  54. byte[] buffer = new byte[messageBytes.Length - 12];
  55. Array.Copy(messageBytes, 0, buffer, 0, 2);
  56. Array.Copy(messageBytes, 14, buffer, 2, messageBytes.Length - 14);
  57. return buffer;
  58. }
  59. }
  60. }