Files
caliverse_server/GameServer/Contents/Friend/Action/KickFriendsFromMyHomeAction.cs
2025-05-01 07:20:41 +09:00

147 lines
5.0 KiB
C#

using Nettention.Proud;
using OtpNet;
using ServerCommon;
using ServerCommon.BusinessLogDomain;
using ServerCore; using ServerBase;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static ClientToLoginMessage.Types;
namespace GameServer
{
public class KickFriendsFromMyHomeAction : EntityActionBase
{
public KickFriendsFromMyHomeAction(EntityBase owner)
: base(owner)
{
}
public override Task<Result> onInit()
{
var result = new Result();
return Task.FromResult(result);
}
public override void onClear()
{
return;
}
public async Task<Result> setKickableFriendsInfo(KickFriendResult kickFriendResult)
{
var owner = getOwner() as Player;
NullReferenceCheckHelper.throwIfNull(owner, () => "Player is null !!!");
var location_attribute = owner.getEntityAttribute<LocationAttribute>();
NullReferenceCheckHelper.throwIfNull(location_attribute, () => $"LocationAttribute is null !!! - player:{owner.toBasicString()}");
var myhome_action = owner.getEntityAction<FriendInviteMyhomeAction>();
NullReferenceCheckHelper.throwIfNull(myhome_action, () => $"FriendInviteMyhomeAction is null !!! - player:{owner.toBasicString()}");
var myhome_location = location_attribute.CurrentIndunLocation;
var instance_room_Id = myhome_location.InstanceRoomId;
var instance_meta_Id = myhome_location.InstanceMetaId;
var result = myhome_action.isCurrentLocationMyHome(instance_meta_Id);
if (result.isFail()) return result;
InstanceRoomStorage room_storage = new InstanceRoomStorage();
room_storage.Init(GameServerApp.getServerLogic().getRedisDb(), string.Empty);
InstanceRoomInfo? instance_room = await room_storage.GetInstanceRoomInfo(instance_room_Id);
if (instance_room == null)
{
string err_msg = $"{owner.getAccountId()} Not found InstanceRoomInfo. InstanceRoomId:{instance_room_Id}";
result.setFail(ServerErrorCode.NotExistInstanceRoom, err_msg);
return result;
}
List<string> room_members = await room_storage.GetInstanceRoomMemberList(instance_room.roomId);
foreach (string member in room_members)
{
if (member.Equals(owner.getAccountId())) continue;
kickFriendResult.getNeedNotiMembers().Add(member);
}
if (kickFriendResult.getNeedNotiMembers().Count == 0)
{
string err_msg = $"Room member count is zero. InstanceRoomId:{instance_room_Id}";
result.setFail(ServerErrorCode.FriendKickMemberNotExist, err_msg);
return result;
}
return result;
}
public async Task<Result> sendKickNoti(KickFriendResult kickFriendResult)
{
//noti 보내야한다.
await Task.Delay(3000);
var result = new Result();
var server_logic = GameServerApp.getServerLogic();
var plyaer_manager = server_logic.getPlayerManager();
foreach (var member in kickFriendResult.getNeedNotiMembers())
{
if(false == plyaer_manager.tryGetUserByPrimaryKey(member, out var player))
{
string err_msg = $"Not found player. member:{member}";
Log.getLogger().warn(err_msg);
continue;
}
//noti 전송
send_GS2C_NTF_SERVER_INFO_BY_FRIEND_KICKED_NOTI(player);
}
return result;
}
private bool send_GS2C_NTF_SERVER_INFO_BY_FRIEND_KICKED_NOTI(Player player)
{
ClientToGame msg = new ClientToGame();
msg.Message = new ClientToGameMessage();
msg.Message.ServerInfoByFriendKickedNoti = new();
msg.Message.ServerInfoByFriendKickedNoti.ServerInfo = new ServerConnectInfo
{
ServerAddr = string.Empty,
ServerPort = 0,
Otp = string.Empty
};
if (false == GameServerApp.getServerLogic().onSendPacket(player, msg)) return false;
return true;
}
public void kickFriendsFromMyHome()
{
string err_msg = $"need code implement !!!!";
Log.getLogger().error(err_msg);
}
}
public class KickFriendResult
{
List<string> m_need_noti_members = new();
List<FriendErrorMember> m_error_member = new();
public List<FriendErrorMember> getErrorMembers()
{
return m_error_member;
}
public List<string> getNeedNotiMembers()
{
return m_need_noti_members;
}
}
}