using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Nettention.Proud; using ServerCore; namespace ServerBase; //============================================================================================= // 패킷 응답/통지 수신 처리자 연결을 위한 AttributeUsage 등록 // // author : kangms // //============================================================================================= [AttributeUsage(AttributeTargets.Class)] public class PacketHandlerAttribute : Attribute { private readonly IPacketCommand m_packet_command; private readonly Type m_handler_class; private readonly Type m_handlable_owner; private readonly bool m_message_hook; public PacketHandlerAttribute( Type packetAction, Type command , Type handlerClass, Type handlerOwner , bool message_hook = false) { var packet_cmd = new ProudNetPacketCommand(packetAction, command); m_packet_command = packet_cmd; m_handler_class = handlerClass; m_handlable_owner = handlerOwner; m_message_hook = message_hook; } public PacketHandlerAttribute( string exchangeName, Type command , Type handlerClass, Type handlerOwner) { var packet_cmd = new RabbitMqPacketCommand(exchangeName, command); m_packet_command = packet_cmd; m_handler_class = handlerClass; m_handlable_owner = handlerOwner; } public IPacketCommand getPacketCommand() { return m_packet_command; } public Type getHandlerClass() { return m_handler_class; } public Type getHandlerOwner() { return m_handlable_owner; } public bool getMessageHook() { return m_message_hook; } } //=========================================================================================== // 패킷 요청 Handler // // author : kangms // //=========================================================================================== public abstract class PacketSendHandler { public PacketSendHandler() { } public virtual Result onFillupPacket(Google.Protobuf.IMessage toFillupMessage) { return new Result(); } public abstract Google.Protobuf.IMessage onGetToSendMessage(); } //=========================================================================================== // 패킷 수신 Handler // // author : kangms // //=========================================================================================== public abstract class PacketRecvHandler { public PacketRecvHandler() { } public virtual async Task onCheckValid(ISession session, Google.Protobuf.IMessage recvMessage) { await Task.CompletedTask; return new Result(); } public abstract Task onProcessPacket(ISession session, Google.Protobuf.IMessage recvMessage); public virtual async Task onProcessPacketException( ISession session, Google.Protobuf.IMessage recvMessage , Result errorResult ) { await Task.CompletedTask; Log.getLogger().warn($"Not implemented PacketRecvHandler.onProcessPacketException() !!! : {errorResult?.toBasicString()} - {recvMessage?.toBasicString()}, {session?.toBasicString()}"); } } //=========================================================================================== // 패킷 응답 Handler // // author : kangms // //=========================================================================================== public abstract class PacketAckHandler : PacketRecvHandler { public PacketAckHandler() { } } //=========================================================================================== // 패킷 통지 Handler // // author : kangms // //=========================================================================================== public abstract class PacketNtfHandler : PacketRecvHandler { public PacketNtfHandler() { } } //=========================================================================================== // p2p 패킷 수신 Handler // // author : khlee // //=========================================================================================== public abstract class P2PPacketRecvHandler { public P2PPacketRecvHandler() { } public virtual async Task onCheckValid(ISession session, Google.Protobuf.IMessage recvMessage) { await Task.CompletedTask; return new Result(); } public abstract Task onProcessP2PPacket(ISession session, ByteArray recvMessage); // public virtual async Task onProcessP2PPacketException( ISession session, Google.Protobuf.IMessage recvMessage // , Result errorResult ) // { // await Task.CompletedTask; // // Log.getLogger().warn($"Not implemented PacketRecvHandler.onProcessPacketException() !!! : {errorResult?.toBasicString()} - {recvMessage?.toBasicString()}, {session?.toBasicString()}"); // } }