using System; using System.Threading.Tasks; using Model; namespace Hotfix { public static class SessionHelper { public static void Send(this Session session, IMessage message) { ushort opcode = Hotfix.Scene.GetComponent().GetOpcode(message.GetType()); byte[] bytes = ProtobufHelper.ToBytes(message); session.Send(opcode, bytes); } public static async Task Call(this Session session, IRequest request) { OpcodeTypeComponent opcodeTypeComponent = Hotfix.Scene.GetComponent(); byte[] bytes = ProtobufHelper.ToBytes(request); ushort opcode = opcodeTypeComponent.GetOpcode(request.GetType()); PacketInfo packetInfo = await session.Call(opcode, bytes); ushort responseOpcode = packetInfo.Opcode; Type t = opcodeTypeComponent.GetType(responseOpcode); object aa = ProtobufHelper.FromBytes(t, packetInfo.Bytes, packetInfo.Index, packetInfo.Length); IResponse response = (IResponse)aa; return response; } public static void SendModel(this Session session, Model.IMessage message) { Model.SessionHelper.Send(session, message); } public static async Task CallModel(this Session session, Model.IRequest request) { return await Model.SessionHelper.Call(session, request); } } }