MessageParseHelper.cs 2.4 KB

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