초기커밋
This commit is contained in:
@@ -0,0 +1,111 @@
|
||||
using Google.Protobuf;
|
||||
using Google.Protobuf.WellKnownTypes;
|
||||
|
||||
|
||||
using ServerCore;
|
||||
using ServerBase;
|
||||
using ServerCommon;
|
||||
using ServerCommon.BusinessLogDomain;
|
||||
using MetaAssets;
|
||||
|
||||
|
||||
|
||||
namespace GameServer.PacketHandler;
|
||||
|
||||
[PacketHandler(typeof(ClientToGameReq), typeof(ClientToGameReq.Types.C2GS_REQ_CHANGE_SCREEN_PAGE), typeof(ChangeScreenPagePacketHandler), typeof(GameLoginListener))]
|
||||
public class ChangeScreenPagePacketHandler : PacketRecvHandler
|
||||
{
|
||||
public static void send_S2C_ACK_CHANGE_SCREEN_PAGE(Player? owner, Result result, int screenPageNo)
|
||||
{
|
||||
var ack_packet = new ClientToGame
|
||||
{
|
||||
Response = new ClientToGameRes
|
||||
{
|
||||
ErrorCode = result.ErrorCode,
|
||||
AckChangeScreenPage = new ClientToGameRes.Types.GS2C_ACK_CHANGE_SCREEN_PAGE
|
||||
{
|
||||
ScreenPageNo = screenPageNo
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
GameServerApp.getServerLogic().onSendPacket(owner!, ack_packet);
|
||||
}
|
||||
|
||||
public override async Task<Result> onProcessPacket(ISession entityWithSession, IMessage recvMessage)
|
||||
{
|
||||
await Task.CompletedTask;
|
||||
|
||||
var result = new Result();
|
||||
string err_msg;
|
||||
|
||||
var player = entityWithSession as Player;
|
||||
NullReferenceCheckHelper.throwIfNull(player, () => $"player is null !!!");
|
||||
|
||||
// 1. 기본 정보 체크
|
||||
var request = (recvMessage as ClientToGame)?.Request.ReqChangeScreenPage;
|
||||
if (null == request)
|
||||
{
|
||||
err_msg = $"Failed to get request type !!! : {nameof(ClientToGame.Request.ReqChangeScreenPage)}";
|
||||
result.setFail(ServerErrorCode.InvalidArgument, err_msg);
|
||||
Log.getLogger().error(result.toBasicString());
|
||||
|
||||
send_S2C_ACK_CHANGE_SCREEN_PAGE(player, result, -1);
|
||||
return result;
|
||||
}
|
||||
|
||||
// 2. room id 확인
|
||||
(result, var room_id) = checkCondition(player, request);
|
||||
if (result.ErrorCode != ServerErrorCode.Success)
|
||||
{
|
||||
send_S2C_ACK_CHANGE_SCREEN_PAGE(player, result, -1);
|
||||
return result;
|
||||
}
|
||||
|
||||
// 3. room screen page 수정
|
||||
var screen_page = InstanceRoomManager.Instance.changeScreenPage(room_id, request.IsCustom == BoolType.True, request.IsIncrease == BoolType.True, request.CustomPage);
|
||||
if (screen_page < 0)
|
||||
{
|
||||
err_msg = $"failed to change screen page!! : roomId[{room_id}]";
|
||||
result.setFail(ServerErrorCode.NotExistInstanceRoom, err_msg);
|
||||
Log.getLogger().error(err_msg);
|
||||
}
|
||||
|
||||
send_S2C_ACK_CHANGE_SCREEN_PAGE(player, result, screen_page);
|
||||
return await Task.FromResult(result);
|
||||
}
|
||||
|
||||
private (Result result, string room_id) checkCondition(Player player, ClientToGameReq.Types.C2GS_REQ_CHANGE_SCREEN_PAGE request)
|
||||
{
|
||||
var result = new Result();
|
||||
string err_msg;
|
||||
|
||||
var location = player.getEntityAttribute<LocationAttribute>();
|
||||
NullReferenceCheckHelper.throwIfNull(location, () => $"location is null !!!");
|
||||
|
||||
// 1. room id 체크
|
||||
var room_id = location.CurrentIndunLocation.InstanceRoomId;
|
||||
if (string.IsNullOrEmpty(room_id))
|
||||
{
|
||||
err_msg = "Failed to change screen page!! : user is not in room";
|
||||
result.setFail(ServerErrorCode.InvalidArgument, err_msg);
|
||||
Log.getLogger().error(result.toBasicString());
|
||||
|
||||
send_S2C_ACK_CHANGE_SCREEN_PAGE(player, result, -1);
|
||||
return (result, string.Empty);
|
||||
}
|
||||
|
||||
// 2. 매개변수 체크
|
||||
if (request.IsCustom == BoolType.True && request.CustomPage < 0)
|
||||
{
|
||||
err_msg = $"Failed to change screen page!! : invalid custom page number - {request.CustomPage}";
|
||||
result.setFail(ServerErrorCode.InvalidArgument, err_msg);
|
||||
Log.getLogger().error(result.toBasicString());
|
||||
|
||||
send_S2C_ACK_CHANGE_SCREEN_PAGE(player, result, -1);
|
||||
return (result, string.Empty);
|
||||
}
|
||||
|
||||
return (result, room_id);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user