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

129 lines
4.5 KiB
C#

using Google.Protobuf;
using Google.Protobuf.WellKnownTypes;
using ServerCore;
using ServerBase;
using ServerCommon;
using ServerCommon.BusinessLogDomain;
using MetaAssets;
using PARTY_GUID = System.String;
namespace GameServer;
public class PartyInvitePartyRecvAction : EntityActionBase
{
private PartyInvitePartyRecvCacheRequest? m_party_invite_party_recv_cache_request { get; set; } = null;
public PartyInvitePartyRecvAction(Player owner)
: base(owner)
{
}
public override async Task<Result> onInit()
{
await Task.CompletedTask;
var result = new Result();
return result;
}
public override void onClear()
{
return;
}
public async Task<Result> loadInvitePartyRecv()
{
var player = getOwner() as Player;
ArgumentNullException.ThrowIfNull(player);
var attribute = getOwner().getEntityAttribute<PartyInvitePartyRecvsAttribute>();
ArgumentNullException.ThrowIfNull(attribute);
m_party_invite_party_recv_cache_request ??= new(player, GameServerApp.getServerLogic().getRedisConnector());
ArgumentNullException.ThrowIfNull(m_party_invite_party_recv_cache_request);
var result = await m_party_invite_party_recv_cache_request.fetchInvitePartyRecvCache();
if (result.isFail()) return result;
result = await ServerBase.DataCopyHelper.copyEntityAttributeFromCaches(attribute, new List<CacheBase> { m_party_invite_party_recv_cache_request.getPartyInvitePartyRecvCache()! });
if (result.isFail())
{
Log.getLogger().error(result.toBasicString());
}
return result;
}
public async Task<Dictionary<string, DateTime>> getPartyInvitePartyRecvs()
{
await organizeSendAttribute();
var attribute = getOwner().getEntityAttribute<PartyInvitePartyRecvsAttribute>();
ArgumentNullException.ThrowIfNull(attribute);
var invites = attribute.getPartyInvitePartyRecvs().ToDictionary(invite => invite.Key, invite => invite.Value);
return invites;
}
public async Task<DateTime?> getPartyInvitePartyRecvTime(PARTY_GUID party_guid)
{
await organizeSendAttribute();
var attribute = getOwner().getEntityAttribute<PartyInvitePartyRecvsAttribute>();
ArgumentNullException.ThrowIfNull(attribute);
var invite_recv_time = attribute.getPartyInvitePartyRecvTime(party_guid);
ArgumentNullException.ThrowIfNull(invite_recv_time);
return invite_recv_time;
}
public async Task<Result> addInvitePartyRecv(PARTY_GUID party_guid)
{
var recv_time = DateTime.UtcNow;
// redis 저장
NullReferenceCheckHelper.throwIfNull(m_party_invite_party_recv_cache_request, () => $"m_party_invite_party_recv_cache_request is null !!! - {party_guid}");
var result = await m_party_invite_party_recv_cache_request.addInvitePartyRecvCache(party_guid, recv_time);
if (result.isFail()) return result;
// attribute 저장
var attribute = getOwner().getEntityAttribute<PartyInvitePartyRecvsAttribute>();
ArgumentNullException.ThrowIfNull(attribute);
attribute.addInvitePartyRecv(party_guid, recv_time);
return result;
}
public async Task<Result> deleteInvitePartyRecv(PARTY_GUID party_guid)
{
NullReferenceCheckHelper.throwIfNull(m_party_invite_party_recv_cache_request, () => $"m_party_invite_party_recv_cache_request is null !!! - {party_guid}");
var result =
await m_party_invite_party_recv_cache_request.deleteInvitePartyRecvCache(new List<PARTY_GUID> { party_guid });
if (result.isFail()) return result;
var attribute = getOwner().getEntityAttribute<PartyInvitePartyRecvsAttribute>();
ArgumentNullException.ThrowIfNull(attribute);
attribute.deleteInvitePartyRecvs(new List<PARTY_GUID> { party_guid });
return result;
}
private async Task organizeSendAttribute()
{
NullReferenceCheckHelper.throwIfNull(m_party_invite_party_recv_cache_request, () => $"m_party_invite_party_recv_cache_request is null !!!");
var delete_recvs = await m_party_invite_party_recv_cache_request.organizeInvitePartyRecvCache();
if (null == delete_recvs) return;
var attribute = getOwner().getEntityAttribute<PartyInvitePartyRecvsAttribute>();
ArgumentNullException.ThrowIfNull(attribute);
attribute.deleteInvitePartyRecvs(delete_recvs);
}
}