SessionHelper.cs 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839
  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 = Hotfix.Scene.GetComponent<OpcodeTypeComponent>().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. OpcodeTypeComponent opcodeTypeComponent = Hotfix.Scene.GetComponent<OpcodeTypeComponent>();
  17. byte[] bytes = ProtobufHelper.ToBytes(request);
  18. ushort opcode = opcodeTypeComponent.GetOpcode(request.GetType());
  19. PacketInfo packetInfo = await session.Call(opcode, bytes);
  20. ushort responseOpcode = packetInfo.Opcode;
  21. Type t = opcodeTypeComponent.GetType(responseOpcode);
  22. object aa = ProtobufHelper.FromBytes(t, packetInfo.Bytes, packetInfo.Index, packetInfo.Length);
  23. IResponse response = (IResponse)aa;
  24. return response;
  25. }
  26. public static void Send(this Session session, Model.IMessage message)
  27. {
  28. Model.SessionHelper.Send(session, message);
  29. }
  30. public static async Task<Model.IResponse> Call(this Session session, Model.IRequest request)
  31. {
  32. return await Model.SessionHelper.Call(session, request);
  33. }
  34. }
  35. }