초기커밋
This commit is contained in:
146
GameServer/Contents/Friend/Action/KickFriendsFromMyHomeAction.cs
Normal file
146
GameServer/Contents/Friend/Action/KickFriendsFromMyHomeAction.cs
Normal file
@@ -0,0 +1,146 @@
|
||||
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;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user