mainForm 클래스

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace csharp_test_client
{
    public partial class mainForm
    {
        Dictionary<PACKET_ID, Action<byte[]>> PacketFuncDic = new Dictionary<PACKET_ID, Action<byte[]>>();

SetPacketHandler

void SetPacketHandler()
{
    PacketFuncDic.Add(PACKET_ID.PACKET_ID_ECHO, PacketProcess_Echo);
    PacketFuncDic.Add(PACKET_ID.PACKET_ID_ERROR_NTF, PacketProcess_ErrorNotify);
    PacketFuncDic.Add(PACKET_ID.PACKET_ID_LOGIN_RES, PacketProcess_LoginResponse);
    PacketFuncDic.Add(PACKET_ID.PACKET_ID_ROOM_ENTER_RES, PacketProcess_RoomEnterResponse);
    PacketFuncDic.Add(PACKET_ID.PACKET_ID_ROOM_USER_LIST_NTF, PacketProcess_RoomUserListNotify);
    PacketFuncDic.Add(PACKET_ID.PACKET_ID_ROOM_NEW_USER_NTF, PacketProcess_RoomNewUserNotify);
    PacketFuncDic.Add(PACKET_ID.PACKET_ID_ROOM_LEAVE_RES, PacketProcess_RoomLeaveResponse);
    PacketFuncDic.Add(PACKET_ID.PACKET_ID_ROOM_LEAVE_USER_NTF, PacketProcess_RoomLeaveUserNotify);
    PacketFuncDic.Add(PACKET_ID.PACKET_ID_ROOM_CHAT_RES, PacketProcess_RoomChatResponse);            
    PacketFuncDic.Add(PACKET_ID.PACKET_ID_ROOM_CHAT_NOTIFY, PacketProcess_RoomChatNotify);
    PacketFuncDic.Add(PACKET_ID.PACKET_ID_ROOM_RELAY_NTF, PacketProcess_RoomRelayNotify);
}

PacketProcess

void PacketProcess(PacketData packet)
{
		// 받은 패킷의 패킷ID를 이용해서 패킷 타입 저장
    var packetType = (PACKET_ID)packet.PacketID;
    //DevLog.Write("Packet Error:  PacketID:{packet.PacketID.ToString()},  Error: {(ERROR_CODE)packet.Result}");
    //DevLog.Write("RawPacket: " + packet.PacketID.ToString() + ", " + PacketDump.Bytes(packet.BodyData));

		// 패킷 타입에 맞는 키가 딕셔너리에 있으면
    if (PacketFuncDic.ContainsKey(packetType))
    {
		    // 해당하는 타입에 맞는 메서드에 매개변수로 패킷의 BodyData 넣어줌
        PacketFuncDic[packetType](packet.BodyData);
    }
    else // 키가 없으면
    {
		    // 알수없는 패킷ID라고 출력
        DevLog.Write("Unknown Packet Id: " + packet.PacketID.ToString());
    }         
}

PacketProcess_Echo

void PacketProcess_Echo(byte[] bodyData)
{
    DevLog.Write($"Echo 받음:  {bodyData.Length}");
}

PacketProcess_ErrorNotify

void PacketProcess_ErrorNotify(byte[] bodyData)
{
    var notifyPkt = new ErrorNtfPacket();
    notifyPkt.FromBytes(bodyData);

    DevLog.Write($"에러 통보 받음:  {notifyPkt.Error}");
}