Files
caliverse_server/ServerBase/Network/Packet/PacketHandler.cs
2025-05-01 07:20:41 +09:00

185 lines
5.1 KiB
C#

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<Result> onCheckValid(ISession session, Google.Protobuf.IMessage recvMessage)
{
await Task.CompletedTask;
return new Result();
}
public abstract Task<Result> 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<Result> onCheckValid(ISession session, Google.Protobuf.IMessage recvMessage)
{
await Task.CompletedTask;
return new Result();
}
public abstract Task<Result> 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()}");
// }
}