초기커밋
This commit is contained in:
@@ -0,0 +1,90 @@
|
||||
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.CancelFriendRequestReq), typeof(CancelFriendRequestPacketHandler), typeof(GameLoginListener))]
|
||||
public class CancelFriendRequestPacketHandler : PacketRecvHandler
|
||||
{
|
||||
public override async Task<Result> onProcessPacket(ISession session, IMessage recvMessage)
|
||||
{
|
||||
var owner = session as Player;
|
||||
NullReferenceCheckHelper.throwIfNull(owner, () => $"owner is null !!!");
|
||||
var recv_msg = recvMessage as ClientToGame;
|
||||
NullReferenceCheckHelper.throwIfNull(recv_msg, () => $"recv_msg is null !!!");
|
||||
|
||||
var target_guid = recv_msg.Request.CancelFriendRequestReq.Guid;
|
||||
|
||||
IFriendInterlockAction interlock_actioin = new CancelFriendRequestInterlockAction(owner, owner.getUserGuid(), target_guid);
|
||||
var result = await interlock_actioin.doInterlockAction();
|
||||
if (result.isFail())
|
||||
{
|
||||
send_GS2C_ACK_CANCLE_FRIEND_REQUEST(owner, result);
|
||||
return result;
|
||||
}
|
||||
|
||||
send_GS2C_ACK_CANCLE_FRIEND_REQUEST(owner, result);
|
||||
|
||||
//상대방에게 삭제 됐다고 Noti
|
||||
result = await send_GS2CS_NFT_CANCLE_FRIEND_REQUEST(owner, target_guid);
|
||||
if (result.isFail())
|
||||
{
|
||||
Log.getLogger().error($"send_GS2CS_NFT_CANCLE_FRIEND_REQUEST send Fail, owner : {owner.toBasicString()}, target_guid : {target_guid}");
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public async Task<Result> send_GS2CS_NFT_CANCLE_FRIEND_REQUEST(Player owner, string targetGuid)
|
||||
{
|
||||
ServerMessage notiMessage = new ServerMessage();
|
||||
notiMessage.CancelFriendRequestNoti = new();
|
||||
notiMessage.CancelFriendRequestNoti.SenderId = "";
|
||||
notiMessage.CancelFriendRequestNoti.SenderGuid = owner.getUserGuid();
|
||||
notiMessage.CancelFriendRequestNoti.SenderNickName = owner.getUserNickname();
|
||||
notiMessage.CancelFriendRequestNoti.ReceiverId = "";
|
||||
notiMessage.CancelFriendRequestNoti.ReceiverGuid = targetGuid;
|
||||
|
||||
var server_logic = GameServerApp.getServerLogic();
|
||||
var rabbit_mq = GameServerApp.getServerLogic().getRabbitMqConnector() as RabbitMqConnector;
|
||||
NullReferenceCheckHelper.throwIfNull(rabbit_mq, () => $"rabbit_mq is null !!!");
|
||||
var login_cache_request = new LoginCacheOtherUserRequest(owner, server_logic.getRedisConnector(), targetGuid);
|
||||
var result = await login_cache_request.fetchLogin();
|
||||
if (result.isSuccess())
|
||||
{
|
||||
var login_cache = login_cache_request.getLoginCache();
|
||||
NullReferenceCheckHelper.throwIfNull(login_cache, () => $"login_cache is null !!!");
|
||||
rabbit_mq.SendMessage(login_cache.CurrentServer, notiMessage);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public static Result send_GS2C_ACK_CANCLE_FRIEND_REQUEST(Player owner, Result result)
|
||||
{
|
||||
var ack_packet = new ClientToGame();
|
||||
ack_packet.Response = new ClientToGameRes();
|
||||
ack_packet.Response.ErrorCode = result.ErrorCode;
|
||||
ack_packet.Response.CancelFriendRequestRes = new();
|
||||
|
||||
//CancelFriendRequestRes
|
||||
if (false == GameServerApp.getServerLogic().onSendPacket(owner, ack_packet))
|
||||
{
|
||||
string err_msg = $"send_GS2C_ACK_CANCLE_FRIEND_REQUEST Fail !!! : owner:{owner.toBasicString()}";
|
||||
result.setFail(ServerErrorCode.ProudNetException, err_msg);
|
||||
Log.getLogger().error(result.toBasicString());
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
return result;
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
using Google.Protobuf;
|
||||
using Google.Protobuf.WellKnownTypes;
|
||||
|
||||
|
||||
using ServerCore;
|
||||
using ServerBase;
|
||||
using ServerCommon;
|
||||
|
||||
|
||||
namespace GameServer.PacketHandler;
|
||||
|
||||
[PacketHandler(typeof(ClientToGameReq), typeof(ClientToGameReq.Types.MoveFriendFolderUserReq), typeof(ChangeFriendFolderLoacationPacketHandler), typeof(GameLoginListener))]
|
||||
public class ChangeFriendFolderLoacationPacketHandler : PacketRecvHandler
|
||||
{
|
||||
public override async Task<Result> onProcessPacket(ISession session, IMessage recvMessage)
|
||||
{
|
||||
var owner = session as Player;
|
||||
NullReferenceCheckHelper.throwIfNull(owner, () => $"owner is null !!!");
|
||||
var recv_msg = recvMessage as ClientToGame;
|
||||
NullReferenceCheckHelper.throwIfNull(recv_msg, () => $"recv_msg is null !!!");
|
||||
var request = recv_msg.Request.MoveFriendFolderUserReq;
|
||||
var friend_guid = request.Guid;
|
||||
var folder_name = request.FolderName;
|
||||
|
||||
IFriendInterlockAction interlock_action = new ChangeFriendFolderLocationInterlockAction(owner, owner.getUserGuid(), friend_guid, folder_name);
|
||||
var result = await interlock_action.doInterlockAction();
|
||||
|
||||
send_GS2C_ACK_CHANGE_FRIEND_FOLDER_LOCATION(owner, result);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
private static bool send_GS2C_ACK_CHANGE_FRIEND_FOLDER_LOCATION(Player owner, Result result)
|
||||
{
|
||||
var ack_packet = new ClientToGame();
|
||||
ack_packet.Response = new ClientToGameRes();
|
||||
|
||||
ack_packet.Response.ErrorCode = result.ErrorCode;
|
||||
ack_packet.Response.MoveFriendFolderUserRes = new();
|
||||
|
||||
if (false == GameServerApp.getServerLogic().onSendPacket(owner, ack_packet)) return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,70 @@
|
||||
using Google.Protobuf;
|
||||
using Google.Protobuf.WellKnownTypes;
|
||||
|
||||
|
||||
using ServerCore;
|
||||
using ServerBase;
|
||||
using ServerCommon;
|
||||
using ServerCommon.BusinessLogDomain;
|
||||
|
||||
|
||||
namespace GameServer.PacketHandler;
|
||||
|
||||
[PacketHandler(typeof(ClientToGameReq), typeof(ClientToGameReq.Types.ChangeFriendOrderReq), typeof(ChangeFriendOrderPacketHandler), typeof(GameLoginListener))]
|
||||
public class ChangeFriendOrderPacketHandler : PacketRecvHandler
|
||||
{
|
||||
public override async Task<Result> onProcessPacket(ISession session, IMessage recvMessage)
|
||||
{
|
||||
var owner = session as Player;
|
||||
NullReferenceCheckHelper.throwIfNull(owner, () => $"owner is null !!!");
|
||||
var recv_msg = recvMessage as ClientToGame;
|
||||
NullReferenceCheckHelper.throwIfNull(recv_msg, () => $"recv_msg is null !!!");
|
||||
var request = recv_msg.Request.ChangeFriendOrderReq;
|
||||
var order_type = request.OrderType;
|
||||
|
||||
var friend_folder_action = owner.getEntityAction<FriendFolderAction>();
|
||||
|
||||
var result = await owner.runTransactionRunnerSafely(TransactionIdType.PrivateContents, "HoldFriendFolder", delegateChangeFriendOrder);
|
||||
if (result.isFail())
|
||||
{
|
||||
send_GS2C_ACK_CHANGE_FRIEND_ORDER(owner, result);
|
||||
return result;
|
||||
}
|
||||
|
||||
send_GS2C_ACK_CHANGE_FRIEND_ORDER(owner, result);
|
||||
|
||||
return result;
|
||||
|
||||
|
||||
async Task<Result> delegateChangeFriendOrder() => await changeFriendOrder(owner, order_type);
|
||||
}
|
||||
|
||||
private async Task<Result> changeFriendOrder(Player owner, Int32 orderType)
|
||||
{
|
||||
var friend_folder_action = owner.getEntityAction<FriendFolderAction>();
|
||||
var result = friend_folder_action.changeOrderType(orderType);
|
||||
|
||||
var server_logic = GameServerApp.getServerLogic();
|
||||
var batch = new QueryBatchEx<QueryRunnerWithDocument>(owner, LogActionType.None, server_logic.getDynamoDbClient());
|
||||
{
|
||||
batch.addQuery(new DBQWriteToAttributeAllWithTransactionRunner());
|
||||
}
|
||||
result = await QueryHelper.sendQueryAndBusinessLog(batch);
|
||||
|
||||
return result;
|
||||
|
||||
}
|
||||
|
||||
|
||||
private static bool send_GS2C_ACK_CHANGE_FRIEND_ORDER(Player owner, Result result)
|
||||
{
|
||||
var ack_packet = new ClientToGame();
|
||||
ack_packet.Response = new ClientToGameRes();
|
||||
|
||||
ack_packet.Response.ErrorCode = result.ErrorCode;
|
||||
ack_packet.Response.ChangeFriendOrderRes = new();
|
||||
|
||||
if (false == GameServerApp.getServerLogic().onSendPacket(owner, ack_packet)) return false;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,71 @@
|
||||
using Google.Protobuf;
|
||||
using Google.Protobuf.WellKnownTypes;
|
||||
|
||||
|
||||
using ServerCore;
|
||||
using ServerBase;
|
||||
using ServerCommon;
|
||||
|
||||
|
||||
namespace GameServer.PacketHandler;
|
||||
|
||||
[PacketHandler(typeof(ClientToGameReq), typeof(ClientToGameReq.Types.ConfirmNewFriendReq), typeof(ConfirmNewFriendPacketHandler), typeof(GameLoginListener))]
|
||||
public class ConfirmNewFriendPacketHandler : PacketRecvHandler
|
||||
{
|
||||
public override async Task<Result> onProcessPacket(ISession session, IMessage recvMessage)
|
||||
{
|
||||
var result = new Result();
|
||||
|
||||
var owner = session as Player;
|
||||
NullReferenceCheckHelper.throwIfNull(owner, () => $"owner is null !!!");
|
||||
|
||||
var recv_msg = recvMessage as ClientToGame;
|
||||
NullReferenceCheckHelper.throwIfNull(recv_msg, () => $"recv_msg is null !!!");
|
||||
var request = recv_msg.Request.ConfirmNewFriendReq;
|
||||
|
||||
var friend_guids = request.Guids;
|
||||
var my_guid = owner.getUserGuid();
|
||||
foreach (var guid in friend_guids)
|
||||
{
|
||||
if(my_guid.Equals(guid)) continue;
|
||||
|
||||
IFriendInterlockAction interlock_action = new ConfirmNewFriendInterlockAction(owner, my_guid, guid);
|
||||
result = await interlock_action.doInterlockAction();
|
||||
if (result.isFail())
|
||||
{
|
||||
Log.getLogger().error($"ConfirmNewFriendPacketHandler onProcessPacket error my_guid : {my_guid}, guid : {guid}");
|
||||
Log.getLogger().error(result.toBasicString());
|
||||
continue;
|
||||
}
|
||||
}
|
||||
send_GS2C_ACK_CONFIRM_NEW_FRIEND(owner, result);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
private static bool send_GS2C_ACK_CONFIRM_NEW_FRIEND(Player owner, Result result)
|
||||
{
|
||||
var ack_packet = new ClientToGame();
|
||||
ack_packet.Response = new ClientToGameRes();
|
||||
ack_packet.Response.ErrorCode = result.ErrorCode;
|
||||
ack_packet.Response.ConfirmNewFriendRes = new();
|
||||
|
||||
if (false == GameServerApp.getServerLogic().onSendPacket(owner, ack_packet)) { return false; }
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,54 @@
|
||||
using Google.Protobuf;
|
||||
using Google.Protobuf.WellKnownTypes;
|
||||
|
||||
|
||||
using ServerCore;
|
||||
using ServerBase;
|
||||
using ServerCommon;
|
||||
using ServerCommon.BusinessLogDomain;
|
||||
|
||||
|
||||
namespace GameServer.PacketHandler;
|
||||
|
||||
[PacketHandler(typeof(ClientToGameReq), typeof(ClientToGameReq.Types.ConfirmNewReceivedFriendRequestReq), typeof(ConfirmNewReceivedFriendRequestPacketHandler), typeof(GameLoginListener))]
|
||||
public class ConfirmNewReceivedFriendRequestPacketHandler : PacketRecvHandler
|
||||
{
|
||||
public override async Task<Result> onProcessPacket(ISession session, IMessage recvMessage)
|
||||
{
|
||||
var result = new Result();
|
||||
|
||||
var owner = session as Player;
|
||||
NullReferenceCheckHelper.throwIfNull(owner, () => $"owner is null !!!");
|
||||
|
||||
var recv_msg = recvMessage as ClientToGame;
|
||||
NullReferenceCheckHelper.throwIfNull(recv_msg, () => $"recv_msg is null !!!");
|
||||
|
||||
var request = recv_msg.Request.ConfirmNewReceivedFriendRequestReq;
|
||||
var guids = request.Guids;
|
||||
|
||||
|
||||
foreach (var guid in guids)
|
||||
{
|
||||
IFriendInterlockAction interlock_action = new ConfirmNewReceivedFriendRequestInterlockAction(owner, owner.getUserGuid(), guid);
|
||||
result = await interlock_action.doInterlockAction();
|
||||
}
|
||||
|
||||
|
||||
|
||||
send_GS2C_ACK_CONFIRM_NEW_RECEIVED_FRIEND_REQUEST(owner);
|
||||
return result;
|
||||
|
||||
}
|
||||
|
||||
private static bool send_GS2C_ACK_CONFIRM_NEW_RECEIVED_FRIEND_REQUEST(Player owner)
|
||||
{
|
||||
var result = new Result() ;
|
||||
var ack_packet = new ClientToGame();
|
||||
ack_packet.Response = new ClientToGameRes();
|
||||
ack_packet.Response.ErrorCode = result.ErrorCode;
|
||||
ack_packet.Response.ConfirmNewReceivedFriendRequestRes = new();
|
||||
|
||||
if (false == GameServerApp.getServerLogic().onSendPacket(owner, ack_packet)) { return false; }
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,106 @@
|
||||
using Google.Protobuf;
|
||||
using Google.Protobuf.WellKnownTypes;
|
||||
|
||||
|
||||
using ServerCore;
|
||||
using ServerBase;
|
||||
using ServerCommon;
|
||||
using ServerCommon.BusinessLogDomain;
|
||||
|
||||
|
||||
namespace GameServer.PacketHandler;
|
||||
|
||||
|
||||
[PacketHandler(typeof(ClientToGameReq), typeof(ClientToGameReq.Types.CreateFriendFolderReq), typeof(CreateFriendFolderPacketHandler), typeof(GameLoginListener))]
|
||||
public class CreateFriendFolderPacketHandler : PacketRecvHandler
|
||||
{
|
||||
public override async Task<Result> onProcessPacket(ISession session, IMessage recvMessage)
|
||||
{
|
||||
var owner = session as Player;
|
||||
NullReferenceCheckHelper.throwIfNull(owner, () => $"player is null !!!");
|
||||
|
||||
var recv_msg = recvMessage as ClientToGame;
|
||||
NullReferenceCheckHelper.throwIfNull(recv_msg, () => $"recv_msg is null !!! - {owner.toBasicString()}");
|
||||
|
||||
var request = recv_msg.Request.CreateFriendFolderReq;
|
||||
var folder_name = request.FolderName;
|
||||
|
||||
var result = new Result();
|
||||
|
||||
result = await owner.runTransactionRunnerSafely(TransactionIdType.PrivateContents, "CreateFriendFolder", delegateCreateFriendFolder);
|
||||
if (result.isFail())
|
||||
{
|
||||
send_GS2C_ACK_CREATE_FRIEND_FOLDER(owner, ref result);
|
||||
return result;
|
||||
}
|
||||
|
||||
var friend_action = owner.getEntityAction<FriendFolderAction>();
|
||||
NullReferenceCheckHelper.throwIfNull(friend_action, () => $"friend_action is null !!! - {owner.toBasicString()}");
|
||||
|
||||
var folder = friend_action.getFriendFolder(folder_name);
|
||||
send_GS2C_ACK_CREATE_FRIEND_FOLDER(owner, folder, ref result);
|
||||
|
||||
return result;
|
||||
|
||||
async Task<Result> delegateCreateFriendFolder() => await createFriendFolder(owner, folder_name);
|
||||
}
|
||||
|
||||
private async Task<Result> createFriendFolder(Player owner, string folderName)
|
||||
{
|
||||
var friend_action = owner.getEntityAction<FriendFolderAction>();
|
||||
NullReferenceCheckHelper.throwIfNull(friend_action, () => $"friend_action is null !!! - {owner.toBasicString()}");
|
||||
|
||||
var result = friend_action.addFriendFolder(folderName);
|
||||
if (result.isFail()) return result;
|
||||
|
||||
var server_logic = GameServerApp.getServerLogic();
|
||||
var batch = new QueryBatchEx<QueryRunnerWithDocument>(owner, LogActionType.None, server_logic.getDynamoDbClient());
|
||||
{
|
||||
batch.addQuery(new DBQWriteToAttributeAllWithTransactionRunner());
|
||||
}
|
||||
result = await QueryHelper.sendQueryAndBusinessLog(batch);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
private static bool send_GS2C_ACK_CREATE_FRIEND_FOLDER(Player owner, ServerCommon.FriendFolder? folder, ref Result result)
|
||||
{
|
||||
var ack_packet = new ClientToGame();
|
||||
ack_packet.Response = new ClientToGameRes();
|
||||
|
||||
ack_packet.Response.ErrorCode = result.ErrorCode;
|
||||
ack_packet.Response.CreateFriendFolderRes = new();
|
||||
|
||||
if (folder is not null)
|
||||
{
|
||||
ack_packet.Response.CreateFriendFolderRes.FriendFolder = new();
|
||||
ack_packet.Response.CreateFriendFolderRes.FriendFolder.FolderName = folder.FolderName;
|
||||
ack_packet.Response.CreateFriendFolderRes.FriendFolder.IsHold = folder.IsHold;
|
||||
ack_packet.Response.CreateFriendFolderRes.FriendFolder.CreateTime = Timestamp.FromDateTime(folder.CreateTime);
|
||||
ack_packet.Response.CreateFriendFolderRes.FriendFolder.HoldTime = Timestamp.FromDateTime(folder.HoldTime);
|
||||
}
|
||||
|
||||
return sendAckPacket(owner, ack_packet);
|
||||
}
|
||||
|
||||
private static bool send_GS2C_ACK_CREATE_FRIEND_FOLDER(Player owner, ref Result result)
|
||||
{
|
||||
var ack_packet = new ClientToGame();
|
||||
ack_packet.Response = new ClientToGameRes();
|
||||
|
||||
ack_packet.Response.ErrorCode = result.ErrorCode;
|
||||
ack_packet.Response.CreateFriendFolderRes = new();
|
||||
|
||||
return sendAckPacket(owner, ack_packet);
|
||||
|
||||
|
||||
}
|
||||
|
||||
private static bool sendAckPacket(Player owner, ClientToGame ackPacket)
|
||||
{
|
||||
if (false == GameServerApp.getServerLogic().onSendPacket(owner, ackPacket)) return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,70 @@
|
||||
using Google.Protobuf;
|
||||
using Google.Protobuf.WellKnownTypes;
|
||||
|
||||
|
||||
using ServerCore;
|
||||
using ServerBase;
|
||||
using ServerCommon;
|
||||
using ServerCommon.BusinessLogDomain;
|
||||
|
||||
|
||||
|
||||
namespace GameServer.PacketHandler;
|
||||
|
||||
[PacketHandler(typeof(ClientToGameReq), typeof(ClientToGameReq.Types.DeleteFriendFolderReq), typeof(DeleteFriendFolderPacketHandler), typeof(GameLoginListener))]
|
||||
public class DeleteFriendFolderPacketHandler : PacketRecvHandler
|
||||
{
|
||||
public override async Task<Result> onProcessPacket(ISession session, IMessage recvMessage)
|
||||
{
|
||||
|
||||
var owner = session as Player;
|
||||
NullReferenceCheckHelper.throwIfNull(owner, () => $"owner is null !!!");
|
||||
|
||||
var recv_msg = recvMessage as ClientToGame;
|
||||
NullReferenceCheckHelper.throwIfNull(recv_msg, () => $"recv_msg is null !!! - {owner.toBasicString()}");
|
||||
|
||||
var request = recv_msg.Request.DeleteFriendFolderReq;
|
||||
var folder_name = request.FolderName;
|
||||
|
||||
var friend_folder_action = owner.getEntityAction<FriendFolderAction>();
|
||||
var server_logic = GameServerApp.getServerLogic();
|
||||
var my_guid = owner.getUserGuid();
|
||||
var result = await owner.runTransactionRunnerSafely(TransactionIdType.PrivateContents, "DeleteFriendFolder", delegateDeleteFriendFolder);
|
||||
send_GS2C_ACK_DELETE_FRIEND_FOLDER_LOCATION(owner, result);
|
||||
return result;
|
||||
|
||||
async Task<Result> delegateDeleteFriendFolder() => await deleteFriendFolder(owner, my_guid, folder_name);
|
||||
}
|
||||
|
||||
private async Task<Result> deleteFriendFolder(Player owner, string myGuid, string folderName)
|
||||
{
|
||||
var friend_folder_action = owner.getEntityAction<FriendFolderAction>();
|
||||
NullReferenceCheckHelper.throwIfNull(friend_folder_action, () => $"friend_folder_action is null !!! - {owner.toBasicString()}");
|
||||
|
||||
var server_logic = GameServerApp.getServerLogic();
|
||||
var result = await friend_folder_action.deleteFriendFolder(myGuid, folderName);
|
||||
|
||||
var batch = new QueryBatchEx<QueryRunnerWithDocument>(owner, LogActionType.None, server_logic.getDynamoDbClient());
|
||||
{
|
||||
batch.addQuery(new DBQWriteToAttributeAllWithTransactionRunner());
|
||||
}
|
||||
result = await QueryHelper.sendQueryAndBusinessLog(batch);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
private static bool send_GS2C_ACK_DELETE_FRIEND_FOLDER_LOCATION(Player owner, Result result)
|
||||
{
|
||||
var ack_packet = new ClientToGame();
|
||||
ack_packet.Response = new ClientToGameRes();
|
||||
|
||||
ack_packet.Response.ErrorCode = result.ErrorCode;
|
||||
ack_packet.Response.DeleteFriendFolderRes = new();
|
||||
|
||||
if (false == GameServerApp.getServerLogic().onSendPacket(owner, ack_packet)) return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,92 @@
|
||||
using Google.Protobuf;
|
||||
using Google.Protobuf.WellKnownTypes;
|
||||
|
||||
|
||||
using ServerCore;
|
||||
using ServerBase;
|
||||
using ServerCommon;
|
||||
|
||||
|
||||
namespace GameServer.PacketHandler;
|
||||
|
||||
[PacketHandler(typeof(ClientToGameReq), typeof(ClientToGameReq.Types.DeleteFriendReq), typeof(DeleteFriendPacketHandler), typeof(GameLoginListener))]
|
||||
public class DeleteFriendPacketHandler : PacketRecvHandler
|
||||
{
|
||||
public override async Task<Result> onProcessPacket(ISession session, IMessage recvMessage)
|
||||
{
|
||||
var owner = session as Player;
|
||||
NullReferenceCheckHelper.throwIfNull(owner, () => $"owner is null !!!");
|
||||
|
||||
var recv_msg = recvMessage as ClientToGame;
|
||||
NullReferenceCheckHelper.throwIfNull(recv_msg, () => $"recv_msg is null !!! - {owner.toBasicString()}");
|
||||
|
||||
var request = recv_msg.Request.DeleteFriendReq;
|
||||
var delete_guid = request.Guid;
|
||||
var my_guid = owner.getUserGuid();
|
||||
|
||||
var server_logic = GameServerApp.getServerLogic();
|
||||
|
||||
var result = await owner.runTransactionRunnerSafely(TransactionIdType.PrivateContents, "DeleteFriend", delegateDeleteFriend);
|
||||
if (result.isFail())
|
||||
{
|
||||
send_GS2C_ACK_DELETE_FRIEND(owner, result);
|
||||
return result;
|
||||
}
|
||||
send_GS2C_ACK_DELETE_FRIEND(owner, result);
|
||||
|
||||
//상대방에게도 삭제 됐다고 Noti 보낸다
|
||||
await send_GS2CS_NTF_DELETE_FRIEND(owner, my_guid, delete_guid);
|
||||
|
||||
await QuestManager.It.QuestCheck(owner, new QuestFriend(EQuestEventTargetType.FRIEND, EQuestEventNameType.DELETED));
|
||||
|
||||
return result;
|
||||
|
||||
async Task<Result> delegateDeleteFriend() => await deleteFriend(owner, my_guid, delete_guid);
|
||||
}
|
||||
|
||||
public static async Task send_GS2CS_NTF_DELETE_FRIEND(Player owner, string myGuid, string deleteGuid)
|
||||
{
|
||||
ServerMessage deleteNoti = new ServerMessage();
|
||||
deleteNoti.FriendDeleteNoti = new();
|
||||
deleteNoti.FriendDeleteNoti.SenderId = myGuid;
|
||||
deleteNoti.FriendDeleteNoti.SenderGuid = myGuid;
|
||||
deleteNoti.FriendDeleteNoti.SenderNickName = owner.getUserNickname();
|
||||
deleteNoti.FriendDeleteNoti.ReceiverId = "";
|
||||
deleteNoti.FriendDeleteNoti.ReceiverGuid = deleteGuid;
|
||||
|
||||
var server_logic = GameServerApp.getServerLogic();
|
||||
var rabbit_mq = server_logic.getRabbitMqConnector() as RabbitMqConnector;
|
||||
NullReferenceCheckHelper.throwIfNull(rabbit_mq, () => $"rabbit_mq is null !!! - {owner.toBasicString()}");
|
||||
|
||||
var login_cache_request = new LoginCacheOtherUserRequest(owner, server_logic.getRedisConnector(), deleteGuid);
|
||||
var result = await login_cache_request.fetchLogin();
|
||||
if (result.isSuccess())
|
||||
{
|
||||
var login_cache = login_cache_request.getLoginCache();
|
||||
NullReferenceCheckHelper.throwIfNull(login_cache, () => $"login_cache is null !!! - {owner.toBasicString()}");
|
||||
|
||||
rabbit_mq.SendMessage(login_cache.CurrentServer, deleteNoti);
|
||||
}
|
||||
}
|
||||
|
||||
private async Task<Result> deleteFriend(Player owner, string myGuid, string deleteGuid)
|
||||
{
|
||||
IFriendInterlockAction interlock_action = new DeleteFriendInterlockAction(owner, myGuid, deleteGuid);
|
||||
var result = await interlock_action.doInterlockAction();
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
private static bool send_GS2C_ACK_DELETE_FRIEND(Player owner, Result result)
|
||||
{
|
||||
var ack_packet = new ClientToGame();
|
||||
ack_packet.Response = new ClientToGameRes();
|
||||
|
||||
ack_packet.Response.ErrorCode = result.ErrorCode;
|
||||
ack_packet.Response.DeleteFriendRes = new();
|
||||
|
||||
if (false == GameServerApp.getServerLogic().onSendPacket(owner, ack_packet)) return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,89 @@
|
||||
using Google.Protobuf;
|
||||
using Google.Protobuf.WellKnownTypes;
|
||||
|
||||
|
||||
using ServerCore;
|
||||
using ServerBase;
|
||||
using ServerCommon;
|
||||
|
||||
|
||||
namespace GameServer.PacketHandler;
|
||||
|
||||
[PacketHandler(typeof(ClientToGameReq), typeof(ClientToGameReq.Types.GetFriendFolderListReq), typeof(GetFriendFoldersPacketHandler), typeof(GameLoginListener))]
|
||||
internal class GetFriendFoldersPacketHandler : PacketRecvHandler
|
||||
{
|
||||
public override async Task<Result> onProcessPacket(ISession session, IMessage recvMessage)
|
||||
{
|
||||
var owner = session as Player;
|
||||
NullReferenceCheckHelper.throwIfNull(owner, () => $"Player is null");
|
||||
|
||||
var friend_folder_action = owner.getEntityAction<FriendFolderAction>();
|
||||
NullReferenceCheckHelper.throwIfNull(friend_folder_action, () => $"friend folder action is null !!! - {owner.toBasicString()}");
|
||||
|
||||
var result = await friend_folder_action.loadFriendFolder();
|
||||
if (result.isFail())
|
||||
{
|
||||
send_GS2C_ACK_FRIEND_FOLDER_LIST(owner, result);
|
||||
return result;
|
||||
}
|
||||
|
||||
send_GS2C_ACK_FRIEND_FOLDER_LIST_BY_SUCCESS(owner, result);
|
||||
|
||||
return result;
|
||||
|
||||
}
|
||||
|
||||
public static Result send_GS2C_ACK_FRIEND_FOLDER_LIST(Player owner, Result result)
|
||||
{
|
||||
var ack_packet = new ClientToGame();
|
||||
ack_packet.Response = new ClientToGameRes();
|
||||
ack_packet.Response.ErrorCode = result.ErrorCode;
|
||||
ack_packet.Response.GetFriendFolderListRes = new ClientToGameRes.Types.GetFriendFolderListRes();
|
||||
|
||||
if (false == GameServerApp.getServerLogic().onSendPacket(owner, ack_packet))
|
||||
{
|
||||
string err_msg = $"send_S2C_ACK_FRIEND_FOLDER_LIST Fail !!! : owner:{owner.toBasicString()}";
|
||||
result.setFail(ServerErrorCode.ProudNetException, err_msg);
|
||||
Log.getLogger().error(result.toBasicString());
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public static Result send_GS2C_ACK_FRIEND_FOLDER_LIST_BY_SUCCESS(Player owner, Result result)
|
||||
{
|
||||
var ack_packet = new ClientToGame();
|
||||
ack_packet.Response = new ClientToGameRes();
|
||||
ack_packet.Response.ErrorCode = result.ErrorCode;
|
||||
ack_packet.Response.GetFriendFolderListRes = new ClientToGameRes.Types.GetFriendFolderListRes();
|
||||
|
||||
|
||||
var friend_folder_attribute = owner.getEntityAttribute<FriendFolderAttribute>();
|
||||
NullReferenceCheckHelper.throwIfNull(friend_folder_attribute, () => $"FriendFolderAttribute is null - player: {owner.toBasicString()}");
|
||||
|
||||
|
||||
ack_packet.Response.GetFriendFolderListRes.FolderOrderType = friend_folder_attribute.m_folder_order_type;
|
||||
foreach (var folder in friend_folder_attribute.m_folders.Values)
|
||||
{
|
||||
FriendFolder friendFolder = new FriendFolder();
|
||||
friendFolder.FolderName = folder.FolderName;
|
||||
friendFolder.IsHold = folder.IsHold;
|
||||
friendFolder.HoldTime = Timestamp.FromDateTime(folder.HoldTime);
|
||||
friendFolder.CreateTime = Timestamp.FromDateTime(folder.CreateTime);
|
||||
ack_packet.Response.GetFriendFolderListRes.FriendFolderList.Add(friendFolder);
|
||||
}
|
||||
|
||||
if (false == GameServerApp.getServerLogic().onSendPacket(owner, ack_packet))
|
||||
{
|
||||
string err_msg = $"send_S2C_ACK_FRIEND_FOLDER_LIST Fail !!! : owner:{owner.toBasicString()}";
|
||||
result.setFail(ServerErrorCode.ProudNetException, err_msg);
|
||||
Log.getLogger().error(result.toBasicString());
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,78 @@
|
||||
using Google.Protobuf;
|
||||
|
||||
|
||||
using ServerCore;
|
||||
using ServerBase;
|
||||
using ServerCommon;
|
||||
|
||||
|
||||
namespace GameServer.PacketHandler;
|
||||
|
||||
|
||||
[PacketHandler(typeof(ClientToGameReq), typeof(ClientToGameReq.Types.GetFriendListReq), typeof(GetFriendsPacketHandler), typeof(GameLoginListener))]
|
||||
public class GetFriendsPacketHandler : PacketRecvHandler
|
||||
{
|
||||
public override async Task<Result> onProcessPacket(ISession session, IMessage recvMessage)
|
||||
{
|
||||
var owner = session as Player;
|
||||
NullReferenceCheckHelper.throwIfNull(owner, () => "Player is null !!!");
|
||||
|
||||
var friend_agent_action = owner.getEntityAction<FriendAgentAction>();
|
||||
NullReferenceCheckHelper.throwIfNull(friend_agent_action, () => $"FriendAgentAction is null !!! - player:{owner.toBasicString()}");
|
||||
|
||||
var result = await friend_agent_action.loadFriends();
|
||||
if (result.isFail())
|
||||
{
|
||||
send_GS2C_ACK_FRIENDS(owner, result);
|
||||
return result;
|
||||
}
|
||||
|
||||
var friend_infos = await friend_agent_action.getFriendsInfo();
|
||||
|
||||
send_GS2C_ACK_FRIENDS(owner, friend_infos, result);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
public static Result send_GS2C_ACK_FRIENDS(Player owner, List<FriendInfo> friendInfos, Result result)
|
||||
{
|
||||
var ack_packet = new ClientToGame();
|
||||
ack_packet.Response = new ClientToGameRes();
|
||||
ack_packet.Response.ErrorCode = result.ErrorCode;
|
||||
ack_packet.Response.GetFriendListRes = new ClientToGameRes.Types.GetFriendListRes();
|
||||
ack_packet.Response.GetFriendListRes.FriendList.AddRange(friendInfos);
|
||||
|
||||
if (false == GameServerApp.getServerLogic().onSendPacket(owner, ack_packet))
|
||||
{
|
||||
string err_msg = $"send_GS2C_ACK_FRIENDS Fail !!! : owner:{owner.toBasicString()}";
|
||||
result.setFail(ServerErrorCode.ProudNetException, err_msg);
|
||||
Log.getLogger().error(result.toBasicString());
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
return result;
|
||||
|
||||
}
|
||||
|
||||
public static Result send_GS2C_ACK_FRIENDS(Player owner, Result result)
|
||||
{
|
||||
var ack_packet = new ClientToGame();
|
||||
ack_packet.Response = new ClientToGameRes();
|
||||
ack_packet.Response.ErrorCode = result.ErrorCode;
|
||||
ack_packet.Response.GetFriendListRes = new ClientToGameRes.Types.GetFriendListRes();
|
||||
|
||||
if (false == GameServerApp.getServerLogic().onSendPacket(owner, ack_packet))
|
||||
{
|
||||
string err_msg = $"send_GS2C_ACK_FRIENDS Fail !!! : owner:{owner.toBasicString()}";
|
||||
result.setFail(ServerErrorCode.ProudNetException, err_msg);
|
||||
Log.getLogger().error(result.toBasicString());
|
||||
|
||||
return result;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,72 @@
|
||||
using Google.Protobuf;
|
||||
using Google.Protobuf.WellKnownTypes;
|
||||
|
||||
|
||||
using ServerCore;
|
||||
using ServerBase;
|
||||
using ServerCommon;
|
||||
|
||||
|
||||
namespace GameServer.PacketHandler;
|
||||
|
||||
[PacketHandler(typeof(ClientToGameReq), typeof(ClientToGameReq.Types.GetReceivedFriendRequestListReq), typeof(GetReceivedFriendRequestsPacketHandler), typeof(GameLoginListener))]
|
||||
public class GetReceivedFriendRequestsPacketHandler : PacketRecvHandler
|
||||
{
|
||||
public override async Task<Result> onProcessPacket(ISession session, IMessage recvMessage)
|
||||
{
|
||||
var result = new Result();
|
||||
var owner = session as Player;
|
||||
NullReferenceCheckHelper.throwIfNull(owner, () => $"Player is null !!!");
|
||||
|
||||
var server_logic = GameServerApp.getServerLogic();
|
||||
FriendReqCacheRequest cache = new FriendReqCacheRequest(owner, owner.getUserGuid(), "", server_logic.getRedisConnector());
|
||||
|
||||
var infos = await cache.getReceivedFriendRequests();
|
||||
|
||||
await send_GS2C_ACK_RECEIVED_FRIEND_REQUEST(owner, result, infos);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public static async Task<Result> send_GS2C_ACK_RECEIVED_FRIEND_REQUEST(Player owner, Result result, List<FriendRequestCache> friendRquests)
|
||||
{
|
||||
var ack_packet = new ClientToGame();
|
||||
ack_packet.Response = new ClientToGameRes();
|
||||
ack_packet.Response.ErrorCode = result.ErrorCode;
|
||||
ack_packet.Response.GetReceivedFriendRequestListRes = new();
|
||||
|
||||
|
||||
foreach (var request in friendRquests)
|
||||
{
|
||||
|
||||
FriendRequestInfo info = new();
|
||||
var (nick_result, nick_attrib ) = await NicknameDoc.findNicknameFromGuid(request.m_sender_guid);
|
||||
if (nick_result.isFail() || null == nick_attrib)
|
||||
{
|
||||
info.NickName = string.Empty;
|
||||
}
|
||||
else
|
||||
{
|
||||
info.NickName = nick_attrib.Nickname;
|
||||
}
|
||||
info.RequestTime = Timestamp.FromDateTime(request.m_request_time);
|
||||
info.Guid = request.m_sender_guid;
|
||||
info.IsNew = request.m_is_new;
|
||||
ack_packet.Response.GetReceivedFriendRequestListRes.RequestList.Add(info);
|
||||
}
|
||||
if (false == GameServerApp.getServerLogic().onSendPacket(owner, ack_packet))
|
||||
{
|
||||
string err_msg = $"send_GS2C_ACK_RECEIVED_FRIEND_REQUEST Fail !!! : owner:{owner.toBasicString()}";
|
||||
result.setFail(ServerErrorCode.ProudNetException, err_msg);
|
||||
Log.getLogger().error(result.toBasicString());
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,70 @@
|
||||
using Google.Protobuf;
|
||||
using Google.Protobuf.WellKnownTypes;
|
||||
|
||||
|
||||
using ServerCore;
|
||||
using ServerBase;
|
||||
using ServerCommon;
|
||||
|
||||
|
||||
|
||||
namespace GameServer.PacketHandler;
|
||||
|
||||
[PacketHandler(typeof(ClientToGameReq), typeof(ClientToGameReq.Types.GetSendedFriendRequestListReq), typeof(GetSendedFriendRequestsPacketHandler), typeof(GameLoginListener))]
|
||||
internal class GetSendedFriendRequestsPacketHandler : PacketRecvHandler
|
||||
{
|
||||
public override async Task<Result> onProcessPacket(ISession session, IMessage recvMessage)
|
||||
{
|
||||
var result = new Result();
|
||||
|
||||
var owner = session as Player;
|
||||
NullReferenceCheckHelper.throwIfNull(owner, () => $"Player is null !!!");
|
||||
|
||||
var recv_msg = recvMessage as ClientToGame;
|
||||
var server_logic = GameServerApp.getServerLogic();
|
||||
|
||||
FriendReqCacheRequest cache = new FriendReqCacheRequest(owner, owner.getUserGuid(), "", server_logic.getRedisConnector());
|
||||
|
||||
var infos = await cache.getSendedFriendRequests();
|
||||
|
||||
await send_GS2C_ACK_SENDED_FRIEND_REQUEST(owner, result, infos);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public static async Task<Result> send_GS2C_ACK_SENDED_FRIEND_REQUEST(Player owner, Result result, List<FriendRequestCache> friendRquests)
|
||||
{
|
||||
var ack_packet = new ClientToGame();
|
||||
ack_packet.Response = new ClientToGameRes();
|
||||
ack_packet.Response.ErrorCode = result.ErrorCode;
|
||||
ack_packet.Response.GetSendedFriendRequestListRes = new();
|
||||
|
||||
foreach (var request in friendRquests)
|
||||
{
|
||||
FriendRequestInfo info = new();
|
||||
var (nick_result, nick_attrib) = await NicknameDoc.findNicknameFromGuid(request.m_receiver_guid);
|
||||
if (nick_result.isFail() || null == nick_attrib)
|
||||
{
|
||||
info.NickName = string.Empty;
|
||||
}
|
||||
else
|
||||
{
|
||||
info.NickName = nick_attrib.Nickname;
|
||||
}
|
||||
info.RequestTime = Timestamp.FromDateTime(request.m_request_time);
|
||||
info.Guid = request.m_receiver_guid;
|
||||
info.IsNew = request.m_is_new;
|
||||
ack_packet.Response.GetSendedFriendRequestListRes.RequestList.Add(info);
|
||||
}
|
||||
if (false == GameServerApp.getServerLogic().onSendPacket(owner, ack_packet))
|
||||
{
|
||||
string err_msg = $"send_GS2C_ACK_SENDED_FRIEND_REQUEST Fail !!! : owner:{owner.toBasicString()}";
|
||||
result.setFail(ServerErrorCode.ProudNetException, err_msg);
|
||||
Log.getLogger().error(result.toBasicString());
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,113 @@
|
||||
using Google.Protobuf;
|
||||
using Google.Protobuf.WellKnownTypes;
|
||||
|
||||
|
||||
using ServerCore;
|
||||
using ServerBase;
|
||||
using ServerCommon;
|
||||
using ServerCommon.BusinessLogDomain;
|
||||
|
||||
|
||||
|
||||
namespace GameServer.PacketHandler;
|
||||
|
||||
[PacketHandler(typeof(ClientToGameReq), typeof(ClientToGameReq.Types.HoldFriendFolderReq), typeof(HoldFriendFolderPacketHandler), typeof(GameLoginListener))]
|
||||
public class HoldFriendFolderPacketHandler : PacketRecvHandler
|
||||
{
|
||||
public override async Task<Result> onProcessPacket(ISession session, IMessage recvMessage)
|
||||
{
|
||||
var owner = session as Player;
|
||||
NullReferenceCheckHelper.throwIfNull(owner, () => $"player is null !!!");
|
||||
|
||||
var recv_msg = recvMessage as ClientToGame;
|
||||
NullReferenceCheckHelper.throwIfNull(recv_msg, () => $"ClientToGmae message is null !!! - player:{owner.toBasicString()}");
|
||||
|
||||
var request = recv_msg.Request.HoldFriendFolderReq;
|
||||
var folder_name = request.FolderName;
|
||||
|
||||
var friend_action = owner.getEntityAction<FriendFolderAction>();
|
||||
NullReferenceCheckHelper.throwIfNull(friend_action, () => $"FriendFolderAction is null !!! - player:{owner.toBasicString()}");
|
||||
|
||||
|
||||
var result = await owner.runTransactionRunnerSafely(TransactionIdType.PrivateContents, "HoldFriendFolder", delegateHoldFriendFolder);
|
||||
if (result.isFail())
|
||||
{
|
||||
send_GS2C_ACK_HOLD_FRIEND_FOLDER(owner, ref result);
|
||||
return result;
|
||||
}
|
||||
|
||||
ServerCommon.FriendFolder? folder = friend_action.getFriendFolder(folder_name);
|
||||
send_GS2C_ACK_HOLD_FRIEND_FOLDER(owner, folder, ref result);
|
||||
|
||||
return result;
|
||||
|
||||
|
||||
async Task<Result> delegateHoldFriendFolder() => await holdFriendFolder(owner, folder_name);
|
||||
}
|
||||
|
||||
private async Task<Result> holdFriendFolder(Player owner, string folderName)
|
||||
{
|
||||
var friend_action = owner.getEntityAction<FriendFolderAction>();
|
||||
NullReferenceCheckHelper.throwIfNull(friend_action, () => $"FriendFolderAction is null !!! - player:{owner.toBasicString()}");
|
||||
|
||||
var result = friend_action.holdFriendFolder(folderName);
|
||||
if (result.isFail())
|
||||
{
|
||||
return result;
|
||||
}
|
||||
var server_logic = GameServerApp.getServerLogic();
|
||||
var batch = new QueryBatchEx<QueryRunnerWithDocument>(owner, LogActionType.None, server_logic.getDynamoDbClient());
|
||||
{
|
||||
batch.addQuery(new DBQWriteToAttributeAllWithTransactionRunner());
|
||||
}
|
||||
result = await QueryHelper.sendQueryAndBusinessLog(batch);
|
||||
|
||||
if (result.isFail())
|
||||
{
|
||||
Log.getLogger().error($"holdFriendFolder fail. {result.ErrorCode}");
|
||||
return result;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
private static bool send_GS2C_ACK_HOLD_FRIEND_FOLDER(Player owner, ServerCommon.FriendFolder? folder, ref Result result)
|
||||
{
|
||||
var ack_packet = new ClientToGame();
|
||||
ack_packet.Response = new ClientToGameRes();
|
||||
|
||||
ack_packet.Response.ErrorCode = result.ErrorCode;
|
||||
ack_packet.Response.HoldFriendFolderRes = new();
|
||||
ack_packet.Response.HoldFriendFolderRes.FriendFolder = new();
|
||||
|
||||
|
||||
if (folder is not null)
|
||||
{
|
||||
ack_packet.Response.HoldFriendFolderRes.FriendFolder.FolderName = folder.FolderName;
|
||||
ack_packet.Response.HoldFriendFolderRes.FriendFolder.IsHold = folder.IsHold;
|
||||
ack_packet.Response.HoldFriendFolderRes.FriendFolder.CreateTime = Timestamp.FromDateTime(folder.CreateTime); ;
|
||||
ack_packet.Response.HoldFriendFolderRes.FriendFolder.HoldTime = Timestamp.FromDateTime(folder.HoldTime);
|
||||
}
|
||||
return sendAckPacket(owner, ack_packet);
|
||||
}
|
||||
|
||||
private static bool send_GS2C_ACK_HOLD_FRIEND_FOLDER(Player owner, ref Result result)
|
||||
{
|
||||
var ack_packet = new ClientToGame();
|
||||
ack_packet.Response = new ClientToGameRes();
|
||||
|
||||
ack_packet.Response.ErrorCode = result.ErrorCode;
|
||||
ack_packet.Response.HoldFriendFolderRes = new();
|
||||
|
||||
return sendAckPacket(owner, ack_packet);
|
||||
|
||||
|
||||
}
|
||||
|
||||
private static bool sendAckPacket(Player owner, ClientToGame ackPacket)
|
||||
{
|
||||
if (false == GameServerApp.getServerLogic().onSendPacket(owner, ackPacket)) return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,146 @@
|
||||
using Newtonsoft.Json;
|
||||
using Google.Protobuf;
|
||||
using Google.Protobuf.WellKnownTypes;
|
||||
|
||||
|
||||
using ServerCore;
|
||||
using ServerBase;
|
||||
using ServerCommon;
|
||||
|
||||
|
||||
using static ServerMessage.Types;
|
||||
|
||||
|
||||
namespace GameServer.PacketHandler;
|
||||
|
||||
[PacketHandler(typeof(ClientToGameReq), typeof(ClientToGameReq.Types.InviteFriendToMyhomeReq), typeof(InviteFriendToMyhomePacketHandler), typeof(GameLoginListener))]
|
||||
public class InviteFriendToMyhomePacketHandler : PacketRecvHandler
|
||||
{
|
||||
public override async Task<Result> onProcessPacket(ISession entityWithSession, IMessage recvMessage)
|
||||
{
|
||||
var player = entityWithSession as Player;
|
||||
NullReferenceCheckHelper.throwIfNull(player, () => $"player is null !");
|
||||
|
||||
var recv_msg = recvMessage as ClientToGame;
|
||||
ArgumentNullReferenceCheckHelper.throwIfNull(recv_msg, () => $"recv_msg is null !!! - {player.toBasicString()}");
|
||||
var request = recv_msg.Request.InviteFriendToMyhomeReq;
|
||||
ArgumentNullReferenceCheckHelper.throwIfNull(request, () => $"recv_msg is null !!! - {player.toBasicString()}");
|
||||
|
||||
var result = new Result();
|
||||
var err_msg = string.Empty;
|
||||
|
||||
var player_action = player.getEntityAction<PlayerAction>();
|
||||
NullReferenceCheckHelper.throwIfNull(player_action, () => $"player_action is null !!! - {player.toBasicString()}");
|
||||
|
||||
var selected_character = player_action.getSelectedCharacter();
|
||||
if (null == selected_character)
|
||||
{
|
||||
err_msg = $"Not selected Character !!! - {player.toBasicString()}";
|
||||
result.setFail(ServerErrorCode.CharacterNotSelected, err_msg);
|
||||
Log.getLogger().error(result.toBasicString());
|
||||
|
||||
send_GS2C_ACK_INVITE_FRIEND_TO_MYHOME(player, result);
|
||||
return result;
|
||||
}
|
||||
|
||||
var character_action = selected_character.getEntityAction<CharacterAction>();
|
||||
NullReferenceCheckHelper.throwIfNull(character_action, () => $"character_action is null !!! - {selected_character.toBasicString()}");
|
||||
if (character_action.isFarming())
|
||||
{
|
||||
err_msg = $"Character is Farming !!! - {selected_character.toBasicString()}, {player.toBasicString()}";
|
||||
result.setFail(ServerErrorCode.FarimgState, err_msg);
|
||||
Log.getLogger().error(result.toBasicString());
|
||||
|
||||
send_GS2C_ACK_INVITE_FRIEND_TO_MYHOME(player, result);
|
||||
return result;
|
||||
}
|
||||
|
||||
var friend_infos = request.Infos.ToList();
|
||||
|
||||
var friend_myhome_action = player.getEntityAction<FriendInviteMyhomeAction>();
|
||||
NullReferenceCheckHelper.throwIfNull(friend_myhome_action, () => $"friend_myhome_action is null !!! - {player.toBasicString()}");
|
||||
|
||||
(result, var fail_infos, var noti_infos) = await friend_myhome_action.inviteFriendToMyhome(friend_infos);
|
||||
if (result.isFail())
|
||||
{
|
||||
send_GS2C_ACK_INVITE_FRIEND_TO_MYHOME(player, result);
|
||||
return result;
|
||||
}
|
||||
|
||||
send_GS2C_ACK_INVITE_FRIEND_TO_MYHOME(player, fail_infos, noti_infos);
|
||||
|
||||
//초대 Noti 전송
|
||||
await send_GS2C_NTF_RECEIVE_INVITE_MYHOME(player, noti_infos);
|
||||
|
||||
//로그
|
||||
var invokers = new List<ILogInvoker>();
|
||||
Dictionary<string, string> invite_result = new Dictionary<string, string>();
|
||||
foreach (var noti in noti_infos)
|
||||
{
|
||||
invite_result.Add(noti.BaseInfo.ReceiverGuid, ServerErrorCode.Success.ToString());
|
||||
}
|
||||
foreach (var fail_info in fail_infos)
|
||||
{
|
||||
invite_result.Add(fail_info.Guid, fail_info.ErrorCode.ToString());
|
||||
}
|
||||
invokers.Add(new InviteFriendToMyhomeBusinessLog(player.getUserGuid(), invite_result));
|
||||
|
||||
var log_action = new LogActionEx(LogActionType.RefuseFriendRequest);
|
||||
BusinessLogger.collectLogs(log_action, player, invokers);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
private async Task<bool> send_GS2C_NTF_RECEIVE_INVITE_MYHOME(Player owner, List<ReceiveInviteMyHomeNoti> noties)
|
||||
{
|
||||
var server_logic = GameServerApp.getServerLogic();
|
||||
var rabbit_mq = server_logic.getRabbitMqConnector() as RabbitMQ4Game;
|
||||
NullReferenceCheckHelper.throwIfNull(rabbit_mq, () => $"rabbit mq is null !! - player:{owner.toBasicString()}");
|
||||
|
||||
foreach (var noti in noties)
|
||||
{
|
||||
ServerMessage messgae = new ServerMessage();
|
||||
messgae.ReceiveInviteMyHomeNoti = noti;
|
||||
|
||||
var login_cache_request = new LoginCacheOtherUserRequest(owner, server_logic.getRedisConnector(), noti.BaseInfo.ReceiverGuid);
|
||||
var result = await login_cache_request.fetchLogin();
|
||||
if (result.isFail())
|
||||
{
|
||||
Log.getLogger().info($"send_GS2C_NTF_RECEIVE_INVITE_MYHOME - fetchLogin fail - {result.ErrorCode}, noti : {JsonConvert.SerializeObject(noti)}");
|
||||
continue;
|
||||
}
|
||||
var login_cache = login_cache_request.getLoginCache();
|
||||
NullReferenceCheckHelper.throwIfNull(login_cache, () => $"LoginCache is null !! - player:{owner.toBasicString()}");
|
||||
|
||||
rabbit_mq.SendMessage(login_cache.CurrentServer, messgae);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
private static bool send_GS2C_ACK_INVITE_FRIEND_TO_MYHOME(Player owner, Result result)
|
||||
{
|
||||
ClientToGame ack_packet = new();
|
||||
ack_packet.Response = new();
|
||||
ack_packet.Response.ErrorCode = result.ErrorCode;
|
||||
ack_packet.Response.InviteFriendToMyhomeRes = new();
|
||||
|
||||
if (false == GameServerApp.getServerLogic().onSendPacket(owner, ack_packet)) return false;
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
private static bool send_GS2C_ACK_INVITE_FRIEND_TO_MYHOME(Player owner, List<FriendErrorMember> failInfos, List<ReceiveInviteMyHomeNoti> noties)
|
||||
{
|
||||
ClientToGame ack_packet = new();
|
||||
ack_packet.Response = new();
|
||||
ack_packet.Response.ErrorCode = ServerErrorCode.Success;
|
||||
ack_packet.Response.InviteFriendToMyhomeRes = new();
|
||||
ack_packet.Response.InviteFriendToMyhomeRes.FailInfos.AddRange(failInfos);
|
||||
ack_packet.Response.InviteFriendToMyhomeRes.SuccessGuids.AddRange(noties.Select(x => x.BaseInfo.ReceiverGuid));
|
||||
|
||||
if (false == GameServerApp.getServerLogic().onSendPacket(owner, ack_packet)) return false;
|
||||
return true;
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,71 @@
|
||||
using Google.Protobuf;
|
||||
using Google.Protobuf.WellKnownTypes;
|
||||
|
||||
|
||||
using ServerCore;
|
||||
using ServerBase;
|
||||
using ServerCommon;
|
||||
using ServerCommon.BusinessLogDomain;
|
||||
|
||||
|
||||
namespace GameServer.PacketHandler;
|
||||
|
||||
[PacketHandler(typeof(ClientToGameReq), typeof(ClientToGameReq.Types.KickFriendsFromMyHomeReq), typeof(KickFriendsFromMyHomePacketHandler), typeof(GameLoginListener))]
|
||||
public class KickFriendsFromMyHomePacketHandler : PacketRecvHandler
|
||||
{
|
||||
public override async Task<Result> onProcessPacket(ISession session, IMessage recvMessage)
|
||||
{
|
||||
var owner = session as Player;
|
||||
NullReferenceCheckHelper.throwIfNull(owner, () => "Player is null !!!");
|
||||
|
||||
var my_guid = owner.getUserGuid();
|
||||
|
||||
var kick_friend_from_myhome_action = owner.getEntityAction<KickFriendsFromMyHomeAction>();
|
||||
NullReferenceCheckHelper.throwIfNull(kick_friend_from_myhome_action, () => $"KickFriendsFromMyHomeAction is null !!! - player:{owner.toBasicString()}");
|
||||
|
||||
KickFriendResult kick_friend_result = new();
|
||||
var result = await kick_friend_from_myhome_action.setKickableFriendsInfo(kick_friend_result);
|
||||
if (result.isFail())
|
||||
{
|
||||
send_GS2C_ACK_KICK_FRIENDS_FROM_MYHOME(owner, result);
|
||||
return result;
|
||||
}
|
||||
send_GS2C_ACK_KICK_FRIENDS_FROM_MYHOME(owner, result, kick_friend_result);
|
||||
|
||||
await kick_friend_from_myhome_action.sendKickNoti(kick_friend_result);
|
||||
|
||||
//log
|
||||
List<ILogInvoker> invokers = new List<ILogInvoker>();
|
||||
invokers.Add(new KickFriendFromMyhomeBusinessLog(kick_friend_result));
|
||||
var log_action = new LogActionEx(LogActionType.KickFriendsFromMyhome);
|
||||
BusinessLogger.collectLogs(log_action, owner, invokers);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
private static bool send_GS2C_ACK_KICK_FRIENDS_FROM_MYHOME(Player owner, Result result, KickFriendResult kickFriendResult)
|
||||
{
|
||||
ClientToGame ack_packet = new();
|
||||
ack_packet.Response = new();
|
||||
ack_packet.Response.ErrorCode = result.ErrorCode;
|
||||
ack_packet.Response.KickFriendsFromMyHomeRes = new();
|
||||
ack_packet.Response.KickFriendsFromMyHomeRes.FailInfos.AddRange(kickFriendResult.getErrorMembers());
|
||||
ack_packet.Response.KickFriendsFromMyHomeRes.SuccessGuids.AddRange(kickFriendResult.getNeedNotiMembers());
|
||||
|
||||
if (false == GameServerApp.getServerLogic().onSendPacket(owner, ack_packet)) return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private static bool send_GS2C_ACK_KICK_FRIENDS_FROM_MYHOME(Player owner, Result result)
|
||||
{
|
||||
ClientToGame ack_packet = new();
|
||||
ack_packet.Response = new();
|
||||
ack_packet.Response.ErrorCode = result.ErrorCode;
|
||||
ack_packet.Response.KickFriendsFromMyHomeRes = new();
|
||||
|
||||
if (false == GameServerApp.getServerLogic().onSendPacket(owner, ack_packet)) return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,105 @@
|
||||
using Google.Protobuf;
|
||||
using Google.Protobuf.WellKnownTypes;
|
||||
|
||||
|
||||
using ServerCore;
|
||||
using ServerBase;
|
||||
using ServerCommon;
|
||||
|
||||
|
||||
namespace GameServer.PacketHandler;
|
||||
|
||||
[PacketHandler(typeof(ClientToGameReq), typeof(ClientToGameReq.Types.ReleaseFriendFolderReq), typeof(ReleaseFriendFolderPacketHandler), typeof(GameLoginListener))]
|
||||
public class ReleaseFriendFolderPacketHandler : PacketRecvHandler
|
||||
{
|
||||
public override async Task<Result> onProcessPacket(ISession session, IMessage recvMessage)
|
||||
{
|
||||
var owner = session as Player;
|
||||
NullReferenceCheckHelper.throwIfNull(owner, () => $"owner is null !!!");
|
||||
var recv_msg = recvMessage as ClientToGame;
|
||||
NullReferenceCheckHelper.throwIfNull(recv_msg, () => $"recv_msg is null !!!");
|
||||
var request = recv_msg.Request.ReleaseFriendFolderReq;
|
||||
var folder_name = request.FolderName;
|
||||
|
||||
var result = await owner.runTransactionRunnerSafely(TransactionIdType.PrivateContents, "ReleaseFriendFolder", delegateReleaseFriendFolder);
|
||||
if (result.isFail())
|
||||
{
|
||||
send_GS2C_ACK_RELEASE_FRIEND_FOLDER(owner, ref result);
|
||||
return result;
|
||||
}
|
||||
|
||||
var friend_action = owner.getEntityAction<FriendFolderAction>();
|
||||
ServerCommon.FriendFolder? folder = friend_action.getFriendFolder(folder_name);
|
||||
send_GS2C_ACK_RELEASE_FRIEND_FOLDER(owner, folder, ref result);
|
||||
|
||||
return result;
|
||||
|
||||
|
||||
async Task<Result> delegateReleaseFriendFolder() => await releaseFriendFolder(owner, folder_name);
|
||||
}
|
||||
|
||||
private async Task<Result> releaseFriendFolder(Player owner, string folderName)
|
||||
{
|
||||
var friend_action = owner.getEntityAction<FriendFolderAction>();
|
||||
|
||||
var result = friend_action.releaseFriendFolder(folderName);
|
||||
if (result.isFail()) return result;
|
||||
|
||||
|
||||
var server_logic = GameServerApp.getServerLogic();
|
||||
var batch = new QueryBatchEx<QueryRunnerWithDocument>(owner, LogActionType.None, server_logic.getDynamoDbClient());
|
||||
{
|
||||
batch.addQuery(new DBQWriteToAttributeAllWithTransactionRunner());
|
||||
}
|
||||
result = await QueryHelper.sendQueryAndBusinessLog(batch);
|
||||
if (result.isFail())
|
||||
{
|
||||
Log.getLogger().error($"ReleaseFriendFolderPacketHandler.releaseFriendFolder fail. {result.ErrorCode}");
|
||||
return result;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
|
||||
private static bool send_GS2C_ACK_RELEASE_FRIEND_FOLDER(Player owner, ServerCommon.FriendFolder? folder, ref Result result)
|
||||
{
|
||||
var ack_packet = new ClientToGame();
|
||||
ack_packet.Response = new ClientToGameRes();
|
||||
|
||||
ack_packet.Response.ErrorCode = result.ErrorCode;
|
||||
ack_packet.Response.ReleaseFriendFolderRes = new();
|
||||
|
||||
if (folder is not null)
|
||||
{
|
||||
ack_packet.Response.ReleaseFriendFolderRes.FriendFolder = new();
|
||||
ack_packet.Response.ReleaseFriendFolderRes.FriendFolder.FolderName = folder.FolderName;
|
||||
ack_packet.Response.ReleaseFriendFolderRes.FriendFolder.IsHold = folder.IsHold;
|
||||
ack_packet.Response.ReleaseFriendFolderRes.FriendFolder.CreateTime = Timestamp.FromDateTime(folder.CreateTime);
|
||||
ack_packet.Response.ReleaseFriendFolderRes.FriendFolder.HoldTime = Timestamp.FromDateTime(folder.HoldTime);
|
||||
}
|
||||
return sendAckPacket(owner, ack_packet);
|
||||
}
|
||||
|
||||
private static bool send_GS2C_ACK_RELEASE_FRIEND_FOLDER(Player owner, ref Result result)
|
||||
{
|
||||
var ack_packet = new ClientToGame();
|
||||
ack_packet.Response = new ClientToGameRes();
|
||||
|
||||
ack_packet.Response.ErrorCode = result.ErrorCode;
|
||||
ack_packet.Response.ReleaseFriendFolderRes = new();
|
||||
|
||||
return sendAckPacket(owner, ack_packet);
|
||||
|
||||
|
||||
}
|
||||
|
||||
private static bool sendAckPacket(Player owner, ClientToGame ackPacket)
|
||||
{
|
||||
if (false == GameServerApp.getServerLogic().onSendPacket(owner, ackPacket)) return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,99 @@
|
||||
using Google.Protobuf;
|
||||
using Google.Protobuf.WellKnownTypes;
|
||||
|
||||
|
||||
using ServerCore;
|
||||
using ServerBase;
|
||||
using ServerCommon;
|
||||
|
||||
|
||||
namespace GameServer.PacketHandler;
|
||||
|
||||
[PacketHandler(typeof(ClientToGameReq), typeof(ClientToGameReq.Types.ReNameFriendFolderReq), typeof(RenameFriendFolderPacketHandler), typeof(GameLoginListener))]
|
||||
public class RenameFriendFolderPacketHandler : PacketRecvHandler
|
||||
{
|
||||
public override async Task<Result> onProcessPacket(ISession session, IMessage recvMessage)
|
||||
{
|
||||
var owner = session as Player;
|
||||
NullReferenceCheckHelper.throwIfNull(owner, () => $"owner is null !!!");
|
||||
var recv_msg = recvMessage as ClientToGame;
|
||||
NullReferenceCheckHelper.throwIfNull(recv_msg, () => $"recv_msg is null !!!");
|
||||
var request = recv_msg.Request.ReNameFriendFolderReq;
|
||||
var old_folder_name = request.FolderName;
|
||||
var new_folder_name = request.NewFolderName;
|
||||
|
||||
var friend_folder_action = owner.getEntityAction<FriendFolderAction>();
|
||||
var result = friend_folder_action.renameFriendFolderConditionCheck(old_folder_name, new_folder_name);
|
||||
string my_guid = owner.getUserGuid();
|
||||
if (result.isFail())
|
||||
{
|
||||
send_GS2C_ACK_RENAME_FRIEND_FOLDER_LOCATION(owner, result);
|
||||
return result;
|
||||
}
|
||||
|
||||
result = await owner.runTransactionRunnerSafely(TransactionIdType.PrivateContents, "RenameFriendFolder", delegateRenameFriendFolder);
|
||||
if(result.isFail())
|
||||
{
|
||||
send_GS2C_ACK_RENAME_FRIEND_FOLDER_LOCATION(owner, result);
|
||||
return result;
|
||||
}
|
||||
|
||||
ServerCommon.FriendFolder? folder = friend_folder_action.getFriendFolder(new_folder_name);
|
||||
send_GS2C_ACK_RENAME_FRIEND_FOLDER_LOCATION(owner, folder, result);
|
||||
|
||||
|
||||
return result;
|
||||
|
||||
async Task<Result> delegateRenameFriendFolder() => await renameFriendFolder(owner, my_guid, old_folder_name, new_folder_name);
|
||||
}
|
||||
|
||||
public async Task<Result> renameFriendFolder(
|
||||
Player owner,
|
||||
string myGuid,
|
||||
string oldFolderName,
|
||||
string newFolderName)
|
||||
{
|
||||
var friend_folder_action = owner.getEntityAction<FriendFolderAction>();
|
||||
var result = await friend_folder_action.renameFriendFolder(myGuid, oldFolderName, newFolderName);
|
||||
if(result.isFail()) return result;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
private static bool send_GS2C_ACK_RENAME_FRIEND_FOLDER_LOCATION(Player owner, ServerCommon.FriendFolder? folder, Result result)
|
||||
{
|
||||
var ack_packet = new ClientToGame();
|
||||
ack_packet.Response = new ClientToGameRes();
|
||||
|
||||
ack_packet.Response.ErrorCode = result.ErrorCode;
|
||||
ack_packet.Response.ReNameFriendFolderRes = new();
|
||||
|
||||
if (folder is not null)
|
||||
{
|
||||
ack_packet.Response.ReNameFriendFolderRes.FriendFolder = new();
|
||||
ack_packet.Response.ReNameFriendFolderRes.FriendFolder.FolderName = folder.FolderName;
|
||||
ack_packet.Response.ReNameFriendFolderRes.FriendFolder.IsHold = folder.IsHold;
|
||||
ack_packet.Response.ReNameFriendFolderRes.FriendFolder.CreateTime = Timestamp.FromDateTime(folder.CreateTime);
|
||||
ack_packet.Response.ReNameFriendFolderRes.FriendFolder.HoldTime = Timestamp.FromDateTime(folder.HoldTime);
|
||||
}
|
||||
return sendAckPacket(owner, ack_packet);
|
||||
}
|
||||
|
||||
private static bool send_GS2C_ACK_RENAME_FRIEND_FOLDER_LOCATION(Player owner, Result result)
|
||||
{
|
||||
var ack_packet = new ClientToGame();
|
||||
ack_packet.Response = new ClientToGameRes();
|
||||
|
||||
ack_packet.Response.ErrorCode = result.ErrorCode;
|
||||
ack_packet.Response.ReNameFriendFolderRes = new();
|
||||
|
||||
return sendAckPacket(owner, ack_packet);
|
||||
}
|
||||
|
||||
private static bool sendAckPacket(Player owner, ClientToGame ackPacket)
|
||||
{
|
||||
if (false == GameServerApp.getServerLogic().onSendPacket(owner, ackPacket)) return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,170 @@
|
||||
using Google.Protobuf;
|
||||
using Google.Protobuf.WellKnownTypes;
|
||||
|
||||
|
||||
using ServerCore;
|
||||
using ServerBase;
|
||||
using ServerCommon;
|
||||
|
||||
|
||||
using static ClientToGameReq.Types;
|
||||
using static ClientToGameRes.Types;
|
||||
|
||||
|
||||
|
||||
namespace GameServer.PacketHandler;
|
||||
|
||||
[PacketHandler(typeof(ClientToGameReq), typeof(ClientToGameReq.Types.ReplyInviteMyhomeReq), typeof(ReplyInviteMyhomePacketHandler), typeof(GameLoginListener))]
|
||||
public class ReplyInviteMyhomePacketHandler : PacketRecvHandler
|
||||
{
|
||||
public override async Task<Result> onProcessPacket(ISession entityWithSession, IMessage recvMessage)
|
||||
{
|
||||
var player = entityWithSession as Player;
|
||||
NullReferenceCheckHelper.throwIfNull(player, () => $"player is null !!!");
|
||||
|
||||
var recv_msg = recvMessage as ClientToGame;
|
||||
NullReferenceCheckHelper.throwIfNull(recv_msg, () => $"recv_msg is null !!! - {player.toBasicString()}");
|
||||
var request = recv_msg.Request.ReplyInviteMyhomeReq;
|
||||
NullReferenceCheckHelper.throwIfNull(request, () => $"request is null !!! - {player.toBasicString()}");
|
||||
|
||||
var result = new Result();
|
||||
var err_msg = string.Empty;
|
||||
|
||||
var player_action = player.getEntityAction<PlayerAction>();
|
||||
|
||||
var selected_character = player_action.getSelectedCharacter();
|
||||
if (null == selected_character)
|
||||
{
|
||||
err_msg = $"Not selected Character !!! - {player.toBasicString()}";
|
||||
result.setFail(ServerErrorCode.CharacterNotSelected, err_msg);
|
||||
Log.getLogger().error(result.toBasicString());
|
||||
|
||||
send_GS2C_ACK_REPLY_INVITE_MYHOME(player, result);
|
||||
return result;
|
||||
}
|
||||
|
||||
var character_action = selected_character.getEntityAction<CharacterAction>();
|
||||
NullReferenceCheckHelper.throwIfNull(character_action, () => $"character_action is null !!! - {selected_character.toBasicString()}");
|
||||
|
||||
var my_guid = player.getUserGuid();
|
||||
var reply_value = request.AcceptOrRefuse;
|
||||
var reply_ref = new FriendReplyInviteMyhomeRefference(reply_value);
|
||||
var invitor_id = request.SenderId;
|
||||
|
||||
var room_id = request.InstanceRoomId;
|
||||
var friend_myhome_action = player.getEntityAction<FriendReplyInviteMyhomeAction>();
|
||||
result = await friend_myhome_action.checkReplyableAboutInvite(room_id, invitor_id, reply_ref);
|
||||
if (result.isFail())
|
||||
{
|
||||
send_GS2C_ACK_REPLY_INVITE_MYHOME(player, result);
|
||||
return result;
|
||||
}
|
||||
|
||||
NullReferenceCheckHelper.throwIfNull(reply_ref.m_invitor_login_cache_nullable, () => $"reply_ref.m_invitor_login_cache_nullable is null !!!");
|
||||
|
||||
var invitor_login_cache = reply_ref.m_invitor_login_cache_nullable.getLoginCache();
|
||||
NullReferenceCheckHelper.throwIfNull(invitor_login_cache, () => $"invitor_login_cache is null !!!");
|
||||
|
||||
if (character_action.isFarming())
|
||||
{
|
||||
//파밍중이면 클라에서 요청을 받았을때 알아서 reply 4로 보내주기때문에 여기서 리턴 처리만 정상처리로 보낸다.
|
||||
//err_msg = $"Character is Farming !!! - {selected_character.toBasicString()}, {player.toBasicString()}";
|
||||
//result.setFail(ServerErrorCode.FarimgState, err_msg);
|
||||
//Log.getLogger().error(result.toBasicString());
|
||||
send_GS2C_ACK_REPLY_INVITE_MYHOME(player, result);
|
||||
//초대한 유저에게 에게 거절한 내용 전달
|
||||
send_GS2C_NTF_REPLY_INVITE_MYHOME(my_guid, reply_value, invitor_login_cache);
|
||||
return result;
|
||||
}
|
||||
|
||||
if (reply_value == (int)InviteFriendReplyType.Accept)
|
||||
{
|
||||
result = friend_myhome_action.acceptReply(reply_ref);
|
||||
|
||||
//에러든 아니든 여기서 리턴
|
||||
send_GS2C_ACK_REPLY_INVITE_MYHOME(player, result);
|
||||
if (result.isFail()) return result;
|
||||
|
||||
|
||||
//초대한 유저에게 에게 수락한 내용 전달
|
||||
send_GS2C_NTF_REPLY_INVITE_MYHOME(my_guid, reply_value, invitor_login_cache);
|
||||
|
||||
|
||||
//친구 마이홈으로 이동하기 위한 처리
|
||||
result = await friend_myhome_action.joinFriendMyhomeFromInvite(room_id, reply_ref);
|
||||
if (result.isFail()) return result;
|
||||
|
||||
result = MyhomeHelper.getMyhomeOwnerUserGuidAndMyhomeGuidFromRoomId(room_id, out var myhome_owner_user_guid, out _);
|
||||
if (result.isFail()) return result;
|
||||
|
||||
(result, var myhome_attrib) = await MyhomeHelper.getEnterMyhomeAttribFromDynamoDb(myhome_owner_user_guid);
|
||||
if (result.isFail()) return result;
|
||||
|
||||
var server_connect_info = reply_ref.m_server_connect_info_nullable;
|
||||
|
||||
NullReferenceCheckHelper.throwIfNull(server_connect_info, () => $"server_connect_info is null !!!");
|
||||
|
||||
send_GS2C_NTF_FRIEND_MYHOME_INFO_NOTI(player, server_connect_info);
|
||||
|
||||
await QuestManager.It.QuestCheck(player, new QuestMyHome(EQuestEventTargetType.MYHOME, EQuestEventNameType.ENTERED, "OTHERS"));
|
||||
}
|
||||
else
|
||||
{
|
||||
//초대한 유저에게 에게 거절한 내용 전달
|
||||
send_GS2C_NTF_REPLY_INVITE_MYHOME(my_guid, reply_value, invitor_login_cache);
|
||||
|
||||
}
|
||||
|
||||
List<ILogInvoker> invokers = new List<ILogInvoker>();
|
||||
invokers.Add(new ReplyInviteMyhomeBuisinessLog(my_guid, invitor_login_cache.UserGuid, reply_value));
|
||||
var log_action = new LogActionEx(LogActionType.RefuseFriendRequest);
|
||||
BusinessLogger.collectLogs(log_action, player, invokers);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
private static bool send_GS2C_NTF_FRIEND_MYHOME_INFO_NOTI(Player owner, ServerConnectInfo serverConnectInfo)
|
||||
{
|
||||
ClientToGame ntf_packet = new ClientToGame();
|
||||
ntf_packet.Message = new ClientToGameMessage();
|
||||
ntf_packet.Message.FriendMyhomeInfoNoti = new();
|
||||
ntf_packet.Message.FriendMyhomeInfoNoti.InstanceServerConnectInfo = serverConnectInfo;
|
||||
|
||||
if (false == GameServerApp.getServerLogic().onSendPacket(owner, ntf_packet)) return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private static bool send_GS2C_ACK_REPLY_INVITE_MYHOME(Player owner, Result result)
|
||||
{
|
||||
ClientToGame ack_packet = new();
|
||||
ack_packet.Response = new();
|
||||
ack_packet.Response.ErrorCode = result.ErrorCode;
|
||||
ack_packet.Response.ReplyInviteMyhomeRes = new();
|
||||
|
||||
if (false == GameServerApp.getServerLogic().onSendPacket(owner, ack_packet)) return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
private static bool send_GS2C_NTF_REPLY_INVITE_MYHOME(string myGuid, Int32 replyValue, LoginCache invitor_cache)
|
||||
{
|
||||
ServerMessage message = new ServerMessage();
|
||||
message.ReplyInviteMyhomeNoti = new();
|
||||
message.ReplyInviteMyhomeNoti.AcceptOrRefuse = replyValue;
|
||||
message.ReplyInviteMyhomeNoti.ReceiverId = invitor_cache.UserGuid;
|
||||
message.ReplyInviteMyhomeNoti.ReplyUserGuid = myGuid;
|
||||
|
||||
var server_logic = GameServerApp.getServerLogic();
|
||||
var rabbit_mq = server_logic.getRabbitMqConnector() as RabbitMqConnector;
|
||||
NullReferenceCheckHelper.throwIfNull(rabbit_mq, () => $"rabbit_mq is null !!!");
|
||||
|
||||
rabbit_mq.SendMessage(invitor_cache.CurrentServer, message);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,107 @@
|
||||
using Google.Protobuf;
|
||||
using Google.Protobuf.WellKnownTypes;
|
||||
|
||||
|
||||
using ServerCore;
|
||||
using ServerBase;
|
||||
using ServerCommon;
|
||||
|
||||
|
||||
namespace GameServer.PacketHandler;
|
||||
|
||||
[PacketHandler(typeof(ClientToGameReq), typeof(ClientToGameReq.Types.ReplyReceivedFriendRequestReq), typeof(ReplyReceivedFriendRequestPacketHandler), typeof(GameLoginListener))]
|
||||
public class ReplyReceivedFriendRequestPacketHandler : PacketRecvHandler
|
||||
{
|
||||
public override async Task<Result> onProcessPacket(ISession session, IMessage recvMessage)
|
||||
{
|
||||
var owner = session as Player;
|
||||
NullReferenceCheckHelper.throwIfNull(owner, () => $"owner is null !!!");
|
||||
var recv_msg = recvMessage as ClientToGame;
|
||||
NullReferenceCheckHelper.throwIfNull(recv_msg, () => $"recv_msg is null !!!");
|
||||
var request = recv_msg.Request.ReplyReceivedFriendRequestReq;
|
||||
var target_guid = request.TargetGuid;
|
||||
var reply_type = request.AcceptOrRefuse;
|
||||
|
||||
var result = await replyReceivedFriendReq(owner, target_guid, reply_type);
|
||||
if (result.isFail())
|
||||
{
|
||||
send_GS2C_ACK_REPLY_RECEIVED_FRIEND_REQUEST(owner, result);
|
||||
return result;
|
||||
}
|
||||
|
||||
//로직처리 성공시
|
||||
send_GS2C_ACK_REPLY_RECEIVED_FRIEND_REQUEST(owner, result, target_guid);
|
||||
|
||||
await send_GS2CS_NTF_FRIEND_ACCEPT(owner, target_guid, reply_type);
|
||||
|
||||
if (reply_type == (int)FriendRequestReplyType.Accept)
|
||||
{
|
||||
await QuestManager.It.QuestCheck(owner, new QuestFriend(EQuestEventTargetType.FRIEND, EQuestEventNameType.ADDED));
|
||||
|
||||
Thread.Sleep(1000);
|
||||
await owner.send_GS2CS_NTF_STATE_TO_FRIEND(target_guid);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
private async Task<Result> replyReceivedFriendReq(Player owner, string targetGuid, Int32 replyType)
|
||||
{
|
||||
//replyType : Accept = 1, //수락
|
||||
//replyType : Refuse = 2, //거절
|
||||
IFriendInterlockAction interlock_actioin = new ReplyFriendRequestLockAction(owner, owner.getUserGuid(), targetGuid, replyType);
|
||||
var result = await interlock_actioin.doInterlockAction();
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
private static async Task<bool> send_GS2CS_NTF_FRIEND_ACCEPT(Player owner, string targetGuid, Int32 replyType)
|
||||
{
|
||||
ServerMessage acceptNoti = new ServerMessage();
|
||||
acceptNoti.FriendAcceptNoti = new();
|
||||
acceptNoti.FriendAcceptNoti.SenderId = owner.getAccountId();
|
||||
acceptNoti.FriendAcceptNoti.SenderGuid = owner.getUserGuid();
|
||||
acceptNoti.FriendAcceptNoti.SenderNickName = owner.getUserNickname();
|
||||
acceptNoti.FriendAcceptNoti.AcceptOrRefuse = replyType;
|
||||
acceptNoti.FriendAcceptNoti.ReceiverId = "";
|
||||
acceptNoti.FriendAcceptNoti.ReceiverGuid = targetGuid;
|
||||
|
||||
var server_logic = GameServerApp.getServerLogic();
|
||||
var login_cache_request = new LoginCacheOtherUserRequest(owner, server_logic.getRedisConnector(), targetGuid);
|
||||
var result = await login_cache_request.fetchLogin();
|
||||
if (result.isSuccess())
|
||||
{
|
||||
var rabbit_mq = server_logic.getRabbitMqConnector() as RabbitMQ4Game;
|
||||
NullReferenceCheckHelper.throwIfNull(rabbit_mq, () => $"rabbit_mq is null !!!");
|
||||
|
||||
var login_cache = login_cache_request.getLoginCache();
|
||||
NullReferenceCheckHelper.throwIfNull(login_cache, () => $"login_cache is null !!!");
|
||||
rabbit_mq.SendMessage(login_cache.CurrentServer, acceptNoti);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
private static bool send_GS2C_ACK_REPLY_RECEIVED_FRIEND_REQUEST(Player owner, Result result)
|
||||
{
|
||||
var ack_packet = new ClientToGame();
|
||||
ack_packet.Response = new ClientToGameRes();
|
||||
ack_packet.Response.ErrorCode = result.ErrorCode;
|
||||
|
||||
if (false == GameServerApp.getServerLogic().onSendPacket(owner, ack_packet)) { return false; }
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
private static bool send_GS2C_ACK_REPLY_RECEIVED_FRIEND_REQUEST(Player owner, Result result, string guid)
|
||||
{
|
||||
var ack_packet = new ClientToGame();
|
||||
ack_packet.Response = new ClientToGameRes();
|
||||
ack_packet.Response.ErrorCode = result.ErrorCode;
|
||||
ack_packet.Response.ReplyReceivedFriendRequestRes = new();
|
||||
ack_packet.Response.ReplyReceivedFriendRequestRes.Guid = guid;
|
||||
|
||||
if (false == GameServerApp.getServerLogic().onSendPacket(owner, ack_packet)) { return false; }
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,131 @@
|
||||
using Google.Protobuf;
|
||||
using Google.Protobuf.WellKnownTypes;
|
||||
|
||||
|
||||
using ServerCore;
|
||||
using ServerBase;
|
||||
using ServerCommon;
|
||||
|
||||
|
||||
namespace GameServer.PacketHandler;
|
||||
|
||||
[PacketHandler(typeof(ClientToGameReq), typeof(ClientToGameReq.Types.SendFriendRequestReq), typeof(SendFriendRequestPacketHandler), typeof(GameLoginListener))]
|
||||
public class SendFriendRequestPacketHandler : PacketRecvHandler
|
||||
{
|
||||
public override async Task<Result> onProcessPacket(ISession session, IMessage recvMessage)
|
||||
{
|
||||
var owner = session as Player;
|
||||
NullReferenceCheckHelper.throwIfNull(owner, () => $"owner is null !!!");
|
||||
var recv_msg = recvMessage as ClientToGame;
|
||||
NullReferenceCheckHelper.throwIfNull(recv_msg, () => $"recv_msg is null !!!");
|
||||
var request = recv_msg.Request.SendFriendRequestReq;
|
||||
var nickname = request.NickName;
|
||||
|
||||
var friend_agent_action = owner.getEntityAction<FriendAgentAction>();
|
||||
|
||||
//닉네임 없으면 존재하지 않는 캐릭터
|
||||
(var result, var nickname_attrib) = await NicknameHelper.findNickname(nickname);
|
||||
if (result.isFail())
|
||||
{
|
||||
Log.getLogger().error($"SendFriendRequestReq nickname not found. nickname : {nickname}");
|
||||
result.setFail(ServerErrorCode.FriendRequestNotExistInfo);
|
||||
send_GS2C_ACK_SEND_FRIEND_REQUEST(owner, result);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
NullReferenceCheckHelper.throwIfNull(nickname_attrib, () => $"nickname_attrib is null !!!");
|
||||
|
||||
var friend_guid = nickname_attrib.UserGuid;
|
||||
var send_friend_request_action = owner.getEntityAction<SendFriendRequestAction>();
|
||||
|
||||
result = await send_friend_request_action.addRequestToCache(nickname, friend_guid);
|
||||
if(result.isFail())
|
||||
{
|
||||
//에러 패킷 리턴
|
||||
send_GS2C_ACK_SEND_FRIEND_REQUEST(owner, result);
|
||||
return result;
|
||||
}
|
||||
|
||||
var server_logic = GameServerApp.getServerLogic();
|
||||
var friend_request_cache = new FriendReqCacheRequest(owner, owner.getUserGuid(), friend_guid, server_logic.getRedisConnector());
|
||||
|
||||
(result, var req) = await friend_agent_action.sendedRequestExistCheck(friend_request_cache, friend_guid);
|
||||
if (result.isFail() || friend_request_cache is null)
|
||||
{
|
||||
send_GS2C_ACK_SEND_FRIEND_REQUEST(owner, result);
|
||||
return result;
|
||||
}
|
||||
|
||||
NullReferenceCheckHelper.throwIfNull(req, () => $"req is null !!!");
|
||||
|
||||
FriendRequestInfo info = new();
|
||||
info.NickName = nickname;
|
||||
info.Guid = req.m_receiver_guid;
|
||||
info.IsNew = req.m_is_new;
|
||||
info.RequestTime = Timestamp.FromDateTime(req.m_request_time);
|
||||
send_GS2C_ACK_SEND_FRIEND_REQUEST(owner, result, info);
|
||||
|
||||
await send_GS2CS_NTF_FRIEND_REQUEST(owner, info);
|
||||
|
||||
//Log
|
||||
List<ILogInvoker> invokers = new List<ILogInvoker>();
|
||||
invokers.Add(new SendFriendRequestBusinessLog(owner.getUserGuid(), friend_guid));
|
||||
var log_action = new LogActionEx(LogActionType.SendFriendRequest);
|
||||
BusinessLogger.collectLogs(log_action, owner, invokers);
|
||||
|
||||
|
||||
await QuestManager.It.QuestCheck(owner, new QuestFriend(EQuestEventTargetType.FRIEND, EQuestEventNameType.REQUESTED));
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
private static async Task<bool> send_GS2CS_NTF_FRIEND_REQUEST(Player owner, FriendRequestInfo info)
|
||||
{
|
||||
var message = new ServerMessage();
|
||||
message.FriendRequestNoti = new();
|
||||
message.FriendRequestNoti.RequestInfo = new();
|
||||
message.FriendRequestNoti.RequestInfo.Guid = info.Guid;
|
||||
message.FriendRequestNoti.RequestInfo.NickName = info.NickName;
|
||||
message.FriendRequestNoti.RequestInfo.RequestTime = info.RequestTime;
|
||||
message.FriendRequestNoti.RequestInfo.IsNew = info.IsNew;
|
||||
|
||||
var server_logic = GameServerApp.getServerLogic();
|
||||
var rabbit_mq = server_logic.getRabbitMqConnector() as RabbitMqConnector;
|
||||
NullReferenceCheckHelper.throwIfNull(rabbit_mq, () => $"rabbit_mq is null !!!");
|
||||
var login_cache_request = new LoginCacheOtherUserRequest(owner, server_logic.getRedisConnector(), info.Guid);
|
||||
var result = await login_cache_request.fetchLogin();
|
||||
if (result.isSuccess())
|
||||
{
|
||||
var login_cache = login_cache_request.getLoginCache();
|
||||
NullReferenceCheckHelper.throwIfNull(login_cache, () => $"login_cache is null !!!");
|
||||
rabbit_mq.SendMessage(login_cache.CurrentServer, message);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private static bool send_GS2C_ACK_SEND_FRIEND_REQUEST(Player owner, Result result)
|
||||
{
|
||||
var ack_packet = new ClientToGame();
|
||||
ack_packet.Response = new ClientToGameRes();
|
||||
ack_packet.Response.ErrorCode = result.ErrorCode;
|
||||
ack_packet.Response.SendFriendRequestRes = new();
|
||||
|
||||
if (false == GameServerApp.getServerLogic().onSendPacket(owner, ack_packet)) { return false; }
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
private static bool send_GS2C_ACK_SEND_FRIEND_REQUEST(Player owner, Result result, FriendRequestInfo info)
|
||||
{
|
||||
var ack_packet = new ClientToGame();
|
||||
ack_packet.Response = new ClientToGameRes();
|
||||
ack_packet.Response.ErrorCode = result.ErrorCode;
|
||||
ack_packet.Response.SendFriendRequestRes = new();
|
||||
ack_packet.Response.SendFriendRequestRes.FriendRequestInfo = info;
|
||||
|
||||
if (false == GameServerApp.getServerLogic().onSendPacket(owner, ack_packet)) { return false; }
|
||||
return true;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user