초기커밋

This commit is contained in:
2025-05-01 07:20:41 +09:00
commit 98bb2e3c5c
2747 changed files with 646947 additions and 0 deletions

View File

@@ -0,0 +1,133 @@
using Google.Protobuf;
using Google.Protobuf.WellKnownTypes;
using ServerCore;
using ServerBase;
using ServerCommon;
using ServerCommon.BusinessLogDomain;
using MetaAssets;
using USER_GUID = System.String;
namespace GameServer;
public class NotifySummonPartyMemberHandler
{
public async Task recvSummonPartyMember(ServerMessage.Types.SummonPartyMemberNoti notify)
{
var server_logic = GameServerApp.getServerLogic();
string err_msg;
ArgumentNullException.ThrowIfNull(server_logic);
// 1. 파티 정보 체크
var party = GameServerApp.getServerLogic().findGlobalEntity<GlobalParty>()?.getParty(notify.SummonPartyGuid);
if (null == party)
{
sendReplySummonPartyMemberAsync(notify.SummonPartyGuid, notify.SummonPartyGuid, notify.SummonUserGuid, SummonPartyMemberResultType.NotParty);
return;
}
// 1-1. 파티멤버 체크
var party_member_action = party.getEntityAction<GlobalPartyDetailMemberAction>();
ArgumentNullException.ThrowIfNull(party_member_action);
await party_member_action.loadPartyMember();
var member = party_member_action.getMember(notify.SummonUserGuid);
if (null == member)
{
err_msg = $"Failed to summon party member !!! - user is not party member - {notify.SummonUserGuid}";
Log.getLogger().error(err_msg);
sendReplySummonPartyMemberAsync(notify.SummonServerName, notify.SummonPartyGuid, notify.SummonUserGuid, SummonPartyMemberResultType.NotPartyMember);
return;
}
// 2. 유저 체크
var player_manager = server_logic.getPlayerManager();
ArgumentNullException.ThrowIfNull(player_manager);
if (!player_manager.tryGetUserByPrimaryKey(notify.SummonUserGuid, out var summon_user))
{
// 2-1. summon user login cache 체크
var login_cache_request = new LoginCacheOtherUserRequest(server_logic, server_logic.getRedisConnector(), notify.SummonUserGuid);
var result = await login_cache_request.fetchLogin();
if(result.isFail())
{
err_msg = $"Failed to fetchLogin() !!! : {result.toBasicString()}";
Log.getLogger().error(err_msg);
return;
}
var login_cache = login_cache_request.getLoginCache();
if (null == login_cache)
{
err_msg = $"Failed to summon party member !!! - user not logged in - {notify.SummonUserGuid}";
Log.getLogger().error(err_msg);
sendReplySummonPartyMemberAsync(notify.SummonServerName, notify.SummonPartyGuid, notify.SummonUserGuid, SummonPartyMemberResultType.LogOut);
return;
}
// 2-2. target 서버로 전송
var server_message = new ServerMessage();
server_message.SummonPartyMemberNoti = new();
server_message.SummonPartyMemberNoti.SummonPartyGuid = notify.SummonPartyGuid;
server_message.SummonPartyMemberNoti.SummonUserGuid = notify.SummonUserGuid;
server_message.SummonPartyMemberNoti.SummonServerName = login_cache.CurrentServer;
server_message.SummonPartyMemberNoti.SummonPos = notify.SummonPos;
PartyHelper.sendToServer(server_message, login_cache.CurrentServer);
return;
}
// 3. Summon User 상태 체크
var check_summon_user_condition = await checkSummonUserConditionAsync(party, summon_user);
if (check_summon_user_condition != SummonPartyMemberResultType.Accept)
{
sendReplySummonPartyMemberAsync(notify.SummonServerName, notify.SummonPartyGuid, notify.SummonUserGuid, check_summon_user_condition);
return;
}
// 3. Summon Message 전송
var client_message = new ClientToGame();
client_message.Message = new ClientToGameMessage();
client_message.Message.SummonPartyMemberNoti = new();
PartyHelper.sendToClient(client_message, summon_user.getHostId());
}
private async Task<SummonPartyMemberResultType> checkSummonUserConditionAsync(GlobalPartyDetail party, Player summon_user)
{
// 1. 파티원 체크
var party_member_attribute = party.getEntityAttribute<PartyMemberAttribute>();
if (null == party_member_attribute) return SummonPartyMemberResultType.NotParty;
var party_member = party_member_attribute.getPartyMember(summon_user.getUserGuid());
if (null == party_member) return SummonPartyMemberResultType.NotParty;
// 2. 방해 금지 상태 체크
var user_attribute = summon_user.getEntityAttribute<UserAttribute>();
NullReferenceCheckHelper.throwIfNull(user_attribute, () => $"user_attribute is null !!!");
if (user_attribute.PlayerState == PlayerStateType.DontDistrub) return SummonPartyMemberResultType.DoNotDisturb;
// 3. 소환 상태 체크
if(false == party_member.Summon.IsAlreadySummon) return SummonPartyMemberResultType.NotSummon;
return await Task.FromResult(SummonPartyMemberResultType.Accept);
}
private void sendReplySummonPartyMemberAsync(string summon_server, string summon_party_guid, USER_GUID summon_user_guid, SummonPartyMemberResultType reply)
{
var server_message = new ServerMessage();
server_message.ReplySummonPartyMemberNoti = new();
server_message.ReplySummonPartyMemberNoti.SummonPartyGuid = summon_party_guid;
server_message.ReplySummonPartyMemberNoti.SummonUserGuid = summon_user_guid;
server_message.ReplySummonPartyMemberNoti.Result = reply;
PartyHelper.sendToServer(server_message, summon_server);
}
}