SessionHelper.cs 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. using System;
  2. using System.Threading.Tasks;
  3. using Model;
  4. namespace Hotfix
  5. {
  6. public static class SessionHelper
  7. {
  8. public static void Send(this Session session, IMessage message)
  9. {
  10. ushort opcode = GetOpcode(message.GetType());
  11. byte[] bytes = ProtobufHelper.ToBytes(message);
  12. session.Send(opcode, bytes);
  13. }
  14. public static async Task<IResponse> Call(this Session session, IRequest request)
  15. {
  16. byte[] bytes = ProtobufHelper.ToBytes(request);
  17. ushort opcode = GetOpcode(request.GetType());
  18. PacketInfo packetInfo = await session.Call(opcode, bytes);
  19. ushort responseOpcode = packetInfo.Opcode;
  20. Type t = GetMessageType(responseOpcode);
  21. object aa = ProtobufHelper.FromBytes(t, packetInfo.Bytes, packetInfo.Index, packetInfo.Length);
  22. IResponse response = (IResponse)aa;
  23. return response;
  24. }
  25. public static ushort GetOpcode(Type type)
  26. {
  27. #if ILRuntime
  28. return Hotfix.Scene.GetComponent<OpcodeTypeComponent>().GetOpcode(type);
  29. #else
  30. return Game.Scene.GetComponent<Model.OpcodeTypeComponent>().GetOpcode(type);
  31. #endif
  32. }
  33. public static Type GetMessageType(ushort opcode)
  34. {
  35. #if ILRuntime
  36. return Hotfix.Scene.GetComponent<OpcodeTypeComponent>().GetType(opcode);
  37. #else
  38. return Game.Scene.GetComponent<Model.OpcodeTypeComponent>().GetType(opcode);
  39. #endif
  40. }
  41. }
  42. }