147 lines
5.0 KiB
C#
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;
|
|
}
|
|
|
|
}
|
|
}
|