초기커밋
This commit is contained in:
272
GameServer/Contents/UserBlock/Action/BlockUserAgentAction.cs
Normal file
272
GameServer/Contents/UserBlock/Action/BlockUserAgentAction.cs
Normal file
@@ -0,0 +1,272 @@
|
||||
using System.Collections.Concurrent;
|
||||
|
||||
|
||||
using Google.Protobuf;
|
||||
using Google.Protobuf.WellKnownTypes;
|
||||
|
||||
|
||||
using ServerCore;
|
||||
using ServerBase;
|
||||
using ServerCommon;
|
||||
using ServerCommon.BusinessLogDomain;
|
||||
using MetaAssets;
|
||||
|
||||
|
||||
namespace GameServer;
|
||||
|
||||
public class BlockUserAgentAction : EntityActionBase
|
||||
{
|
||||
private ConcurrentDictionary<string, BlockUser> m_block_users = new();
|
||||
|
||||
public BlockUserAgentAction(EntityBase owner) : base(owner)
|
||||
{
|
||||
}
|
||||
|
||||
public override async Task<Result> onInit()
|
||||
{
|
||||
await Task.CompletedTask;
|
||||
|
||||
var result = new Result();
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public override void onClear()
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
public (Result, BlockUserAttribute?) getBlockUsersAttribute(string blockUserGuid)
|
||||
{
|
||||
var result = new Result();
|
||||
if (false == m_block_users.TryGetValue(blockUserGuid, out var block_user))
|
||||
{
|
||||
var err_msg = $"not found blockUserGuid = {blockUserGuid}";
|
||||
result.setFail(ServerErrorCode.BlockInfoEmpty, err_msg);
|
||||
Log.getLogger().error(result.toBasicString());
|
||||
return (result, null);
|
||||
}
|
||||
|
||||
var block_user_attribute = block_user.getEntityAttribute<BlockUserAttribute>();
|
||||
return (result, block_user_attribute);
|
||||
}
|
||||
public ConcurrentDictionary<string, BlockUser> getBlockUsers()
|
||||
{
|
||||
return m_block_users;
|
||||
}
|
||||
|
||||
public Result cancelBlockUser(string blockUserGuid)
|
||||
{
|
||||
var result = new Result();
|
||||
(result, var attribute) = getBlockUsersAttribute(blockUserGuid);
|
||||
NullReferenceCheckHelper.throwIfNull(attribute, () => $"attribute is null !!! - {toBasicString()}");
|
||||
if (result.isFail())
|
||||
{
|
||||
return result;
|
||||
}
|
||||
attribute.deleteEntityAttribute();
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
public Result blockUser(string myGuid, string blockUserGuid, bool isFriend)
|
||||
{
|
||||
var result = new Result();
|
||||
var owner = getOwner();
|
||||
BlockUser block_user = new BlockUser(owner);
|
||||
|
||||
var block_user_attribute = block_user.getEntityAttribute<BlockUserAttribute>();
|
||||
NullReferenceCheckHelper.throwIfNull(block_user_attribute, () => $"block_user_attribute is null !!! - {toBasicString()}");
|
||||
|
||||
block_user_attribute.BlockGuid = blockUserGuid;
|
||||
block_user_attribute.CreateTime = DateTimeHelper.Current;
|
||||
block_user_attribute.IsNew = 1;
|
||||
block_user_attribute.UserGuid = myGuid;
|
||||
block_user_attribute.newEntityAttribute();
|
||||
|
||||
m_block_users.TryAdd(blockUserGuid, block_user);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
public async Task<List<BlockInfo>> getBlockUsersInfoProtoBuf()
|
||||
{
|
||||
return await convertBlockUsersToProtoBlockInfos();
|
||||
}
|
||||
|
||||
public bool isBlockUser(string userGuid)
|
||||
{
|
||||
return m_block_users.ContainsKey(userGuid);
|
||||
}
|
||||
|
||||
private async Task<List<BlockInfo>> convertBlockUsersToProtoBlockInfos()
|
||||
{
|
||||
List<BlockInfo> block_infos = new();
|
||||
|
||||
|
||||
foreach (var block_user in m_block_users)
|
||||
{
|
||||
var block_info = new BlockInfo();
|
||||
|
||||
(var result, var block_attibute) = getBlockUserAttribFromAttribute(block_user.Value);
|
||||
if (result.isFail())
|
||||
{
|
||||
continue;
|
||||
}
|
||||
NullReferenceCheckHelper.throwIfNull(block_attibute, () => $"block_attibute is null !!! - {toBasicString()}");
|
||||
|
||||
block_info.Guid = block_attibute.BlockGuid;
|
||||
block_info.CreateTime = Timestamp.FromDateTime(block_attibute.CreateTime);
|
||||
|
||||
(result, var nickname_attrib) = await NicknameDoc.findNicknameFromGuid(block_attibute.BlockGuid);
|
||||
if (nickname_attrib is null)
|
||||
{
|
||||
block_info.NickName = string.Empty;
|
||||
}
|
||||
else block_info.NickName = nickname_attrib.Nickname;
|
||||
block_info.IsNew = block_attibute.IsNew;
|
||||
|
||||
block_infos.Add(block_info);
|
||||
}
|
||||
|
||||
return block_infos;
|
||||
|
||||
}
|
||||
|
||||
private (Result, BlockUserAttribute?) getBlockUserAttribFromAttribute(BlockUser blockUser)
|
||||
{
|
||||
var attribute = blockUser.getEntityAttribute<BlockUserAttribute>();
|
||||
var result = new Result();
|
||||
if (attribute is null)
|
||||
{
|
||||
var err_msg = $"Fail to get FriendAttribute";
|
||||
Log.getLogger().error(err_msg);
|
||||
result.setFail(ServerErrorCode.EntityAttributeNotFound, err_msg);
|
||||
return (result, null);
|
||||
}
|
||||
return (result, attribute);
|
||||
}
|
||||
|
||||
public async Task<Result> loadBlockUsers()
|
||||
{
|
||||
var owner = getOwner() as Player;
|
||||
NullReferenceCheckHelper.throwIfNull(owner, () => $"owner is null !!!");
|
||||
|
||||
var server_logic = GameServerApp.getServerLogic();
|
||||
|
||||
|
||||
var batch = new QueryBatchEx<QueryRunnerWithDocument>(owner, LogActionType.None, server_logic.getDynamoDbClient());
|
||||
{
|
||||
batch.addQuery(new DBQBlockUsersReadAll(owner.getUserGuid()));
|
||||
}
|
||||
var result = await QueryHelper.sendQueryAndBusinessLog(batch);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public async Task<Result> setBlockUsersFromDoc(BlockUserDoc doc)
|
||||
{
|
||||
var result = new Result();
|
||||
|
||||
var owner = getOwner() as Player;
|
||||
NullReferenceCheckHelper.throwIfNull(owner, () => $"owner is null !!! - {toBasicString()}");
|
||||
|
||||
var block_user = new BlockUser(owner);
|
||||
|
||||
var attribute = block_user.getEntityAttribute<BlockUserAttribute>();
|
||||
if (attribute is null)
|
||||
{
|
||||
var err_msg = $"Fail to get BlockUserAttribute";
|
||||
result.setFail(ServerErrorCode.EntityAttributeNotFound, err_msg);
|
||||
return result;
|
||||
}
|
||||
|
||||
var doc_attrib = doc.getAttrib<BlockUserAttrib>();
|
||||
NullReferenceCheckHelper.throwIfNull(doc_attrib, () => $"doc_attrib is null !!! - {toBasicString()}");
|
||||
|
||||
attribute.BlockGuid = doc_attrib.BlockGuid;
|
||||
attribute.IsNew = doc_attrib.IsNew;
|
||||
attribute.UserGuid = owner.getUserGuid();
|
||||
|
||||
attribute.syncOriginDocBaseWithNewDoc<BlockUserAttribute>(doc);
|
||||
|
||||
(result, var nickname_attrib) = await NicknameDoc.findNicknameFromGuid(doc_attrib.BlockGuid);
|
||||
if (result.isFail() || nickname_attrib is null)
|
||||
{
|
||||
//닉네임 정보 없는건 로그만 남기고 닉네임은 빈값으로 넘긴다.
|
||||
Log.getLogger().error($"Nickname is not exist blockGuid = {doc_attrib.BlockGuid}");
|
||||
attribute.Nickname = string.Empty;
|
||||
}
|
||||
else attribute.Nickname = nickname_attrib.Nickname;
|
||||
|
||||
m_block_users.AddOrUpdate(doc_attrib.BlockGuid, block_user, (key, oldValue) => block_user);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
public async Task<(Result reuslt, bool isBlock)> amIBockedFromOthers(string otherUserGuid)
|
||||
{
|
||||
var owner = getOwner() as Player;
|
||||
NullReferenceCheckHelper.throwIfNull(owner, () => $"owner is null !!!");
|
||||
|
||||
var my_guid = owner.getUserGuid();
|
||||
|
||||
(var result, var block_user_docs) = await BlockUserDoc.findBlockUserFromGuid(otherUserGuid, my_guid);
|
||||
if (result.isFail()) return (result, false);
|
||||
|
||||
|
||||
foreach (var doc in block_user_docs)
|
||||
{
|
||||
var attrib = doc.getAttrib<BlockUserAttrib>();
|
||||
if (attrib is null) continue;
|
||||
|
||||
if (attrib.BlockGuid == my_guid)
|
||||
{
|
||||
return (result, true);
|
||||
}
|
||||
}
|
||||
return (result, false);
|
||||
}
|
||||
|
||||
public Result blockUserConditionCheck(string blockUserGuid)
|
||||
{
|
||||
var result = new Result();
|
||||
string err_msg;
|
||||
|
||||
// 1. 이미 Block 된건지 체크
|
||||
if (true == m_block_users.ContainsKey(blockUserGuid))
|
||||
{
|
||||
err_msg = $"{blockUserGuid} was already blocked , {getOwner().toBasicString()}";
|
||||
result.setFail(ServerErrorCode.BlockUserAlreadyBlock, err_msg);
|
||||
Log.getLogger().error(result.toBasicString());
|
||||
return result;
|
||||
}
|
||||
|
||||
// 2. Block User List Count 체크
|
||||
if (m_block_users.Count >= MetaHelper.GameConfigMeta.MaxBlockUserNum)
|
||||
{
|
||||
err_msg = $"over max block user count - current block count[{m_block_users.Count}], {getOwner().toBasicString()}";
|
||||
result.setFail(ServerErrorCode.BlockUserAlreadyBlock, err_msg);
|
||||
Log.getLogger().error(result.toBasicString());
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public Result removeBlockUser(string blockUserGuid)
|
||||
{
|
||||
var result = new Result();
|
||||
if(false == m_block_users.TryRemove(blockUserGuid, out var removed_uesr))
|
||||
{
|
||||
var err_msg = $"m_block_users tryRemove false - blockUserGuid[{blockUserGuid}], {getOwner().toBasicString()}";
|
||||
result.setFail(ServerErrorCode.BlockUserAlreadyBlock, err_msg);
|
||||
Log.getLogger().error(result.toBasicString());
|
||||
}
|
||||
|
||||
return result;
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user