diff --git a/ClientTester/EchoClientTester/Packet/PacketBody.cs b/ClientTester/EchoClientTester/Packet/PacketBody.cs index ecae837..638810a 100644 --- a/ClientTester/EchoClientTester/Packet/PacketBody.cs +++ b/ClientTester/EchoClientTester/Packet/PacketBody.cs @@ -516,6 +516,31 @@ public class DamagePacket } } +// ============================================================ +// 에러 +// ============================================================ + +public enum ErrorCode : int +{ + // 파티 (10021~) + PARTY_ALREADY_IN_PARTY = 10021, + PARTY_JOIN_FAILED = 10022, + PARTY_NOT_IN_PARTY = 10023, + PARTY_DELETE_FAILED = 10024, +} + +// ERROR (서버 -> 클라) +[ProtoContract] +public class ErrorPacket +{ + [ProtoMember(1)] + public ErrorCode Code + { + get; + set; + } +} + // ============================================================ // 파티 // ============================================================ diff --git a/ClientTester/EchoClientTester/Packet/PacketHeader.cs b/ClientTester/EchoClientTester/Packet/PacketHeader.cs index 886af11..5210021 100644 --- a/ClientTester/EchoClientTester/Packet/PacketHeader.cs +++ b/ClientTester/EchoClientTester/Packet/PacketHeader.cs @@ -52,7 +52,10 @@ public enum PacketCode : ushort UPDATE_PARTY, // 파티 참가/탈퇴/생성/해산 요청 (클라 -> 서버) - REQUEST_PARTY + REQUEST_PARTY, + + // 요청 실패 응답 (서버 -> 클라) + ERROR = 9999 } public class PacketHeader diff --git a/MMOTestServer/MMOserver/Game/GameServer.cs b/MMOTestServer/MMOserver/Game/GameServer.cs index 80e95be..0c00419 100644 --- a/MMOTestServer/MMOserver/Game/GameServer.cs +++ b/MMOTestServer/MMOserver/Game/GameServer.cs @@ -484,6 +484,7 @@ public class GameServer : ServerBase { if (!pm.CreateParty(hashKey, req.PartyName, out PartyInfo? party)) { + SendError(peer, ErrorCode.PARTY_ALREADY_IN_PARTY); return; } @@ -503,6 +504,7 @@ public class GameServer : ServerBase { if (!pm.JoinParty(hashKey, req.PartyId, out PartyInfo? party)) { + SendError(peer, ErrorCode.PARTY_JOIN_FAILED); return; } @@ -521,6 +523,7 @@ public class GameServer : ServerBase { if (!pm.LeaveParty(hashKey, out PartyInfo? party)) { + SendError(peer, ErrorCode.PARTY_NOT_IN_PARTY); return; } @@ -544,6 +547,7 @@ public class GameServer : ServerBase { if (!pm.DeleteParty(hashKey, req.PartyId, out PartyInfo? party)) { + SendError(peer, ErrorCode.PARTY_DELETE_FAILED); return; } @@ -560,6 +564,13 @@ public class GameServer : ServerBase } } + private void SendError(NetPeer peer, ErrorCode code) + { + ErrorPacket err = new ErrorPacket { Code = code }; + byte[] data = PacketSerializer.Serialize((ushort)PacketCode.ERROR, err); + SendTo(peer, data); + } + private void BroadcastToUsers(IEnumerable userIds, byte[] data, DeliveryMethod method = DeliveryMethod.ReliableOrdered) { foreach (int userId in userIds) diff --git a/MMOTestServer/MMOserver/Packet/PacketBody.cs b/MMOTestServer/MMOserver/Packet/PacketBody.cs index ee3a61d..fe1a96c 100644 --- a/MMOTestServer/MMOserver/Packet/PacketBody.cs +++ b/MMOTestServer/MMOserver/Packet/PacketBody.cs @@ -516,6 +516,31 @@ public class DamagePacket } } +// ============================================================ +// 에러 +// ============================================================ + +public enum ErrorCode : int +{ + // 파티 (10021~) + PARTY_ALREADY_IN_PARTY = 10021, + PARTY_JOIN_FAILED = 10022, + PARTY_NOT_IN_PARTY = 10023, + PARTY_DELETE_FAILED = 10024, +} + +// ERROR (서버 -> 클라) +[ProtoContract] +public class ErrorPacket +{ + [ProtoMember(1)] + public ErrorCode Code + { + get; + set; + } +} + // ============================================================ // 파티 // ============================================================ diff --git a/MMOTestServer/MMOserver/Packet/PacketHeader.cs b/MMOTestServer/MMOserver/Packet/PacketHeader.cs index 8f24111..aca58a9 100644 --- a/MMOTestServer/MMOserver/Packet/PacketHeader.cs +++ b/MMOTestServer/MMOserver/Packet/PacketHeader.cs @@ -52,7 +52,10 @@ public enum PacketCode : ushort UPDATE_PARTY, // 파티 참가/탈퇴/생성/해산 요청 (클라 -> 서버) - REQUEST_PARTY + REQUEST_PARTY, + + // 요청 실패 응답 (서버 -> 클라) + ERROR = 9999 } public class PacketHeader