using System.Text; using ServerCore; using ServerBase; using ServerCommon; using ServerCommon.BusinessLogDomain; using MetaAssets; using META_ID = System.UInt32; namespace GameServer; public class RabbitMailSendHandler { public async Task MOS2GS_mailSend(ServerMessage.Types.MOS2GS_NTF_MAIL_SEND mailSendMsg) { var user_guid = mailSendMsg.UserGuid; StringBuilder str_builder = new(); if (user_guid is null) { Log.getLogger().error($"user_gudi is null"); return; } Log.getLogger().debug($"MOS2GS_mailSend start user_guid : {user_guid}"); (var result, var nickname_attrib) = await NicknameDoc.findNicknameFromGuid(user_guid); if (result.isFail()) { Log.getLogger().error($"Not found user Nickname, guid : {user_guid}"); return; } NullReferenceCheckHelper.throwIfNull(nickname_attrib, () => $"nickname_attrib is null !!!"); str_builder.Append($"guid : {user_guid}, nickname : {nickname_attrib.Nickname}"); (result, var nickname_registry_attrib) = await NicknameHelper.findNickname(nickname_attrib.Nickname); if (result.isFail()) { Log.getLogger().error($"Not found user Nickname registry, {str_builder.ToString()}"); return; } NullReferenceCheckHelper.throwIfNull(nickname_registry_attrib, () => $"nickname_registry_attrib is null !!!"); str_builder.Append($" accountId : {nickname_registry_attrib.AccountId}"); (result, var account_base_doc) = await AccountBaseDoc.findUserGuidFromAccountId(nickname_registry_attrib.AccountId); if (result.isFail()) { Log.getLogger().error($"Not found user accountId registry, {str_builder.ToString()}"); return; } NullReferenceCheckHelper.throwIfNull(account_base_doc, () => $"account_base_doc is null !!!"); var account_base_attrib = account_base_doc.getAttrib(); if (account_base_attrib == null) { Log.getLogger().error($"Not found user accountBaseAttrib, {str_builder.ToString()}"); return; } string title_txt = string.Empty; foreach (var title in mailSendMsg.Title) { if ((int)title.LanguageType == (int)account_base_attrib.LanguageType) { var txt = StringRuleHelper.convertStringFromBase64(title.Text); title_txt = txt; str_builder.Append($" title_txt : {title_txt}"); break; } } //일단 하드코딩, sender에 대한 정의가 확정되면 바꿀것. //string sender = "시스템 관리자"; string senderName = string.Empty; foreach (var sender in mailSendMsg.Sender) { if ((int)sender.LanguageType == (int)account_base_attrib.LanguageType) { var txt = StringRuleHelper.convertStringFromBase64(sender.Text); senderName = txt; str_builder.Append($" senderName : {senderName}"); break; } } string mail_msg = string.Empty; foreach (var msg in mailSendMsg.Msg) { if ((int)msg.LanguageType == (int)account_base_attrib.LanguageType) { var txt = StringRuleHelper.convertStringFromBase64(msg.Text); mail_msg = txt; str_builder.Append($" mail_msg : {mail_msg}"); break; } } List mail_items = new(); foreach (var item in mailSendMsg.ItemList) { var item_id = item.ItemId; var item_cnt = item.Count; if (MetaData.Instance._ItemTable.TryGetValue(item_id, out var item_data) == false) { Log.getLogger().error($"Not found item data, item_id : {item_id}, {str_builder.ToString()}"); return; } ServerCommon.MailItem mail_item = new(); mail_item.ItemId = (META_ID)item_id; mail_item.Count = item_cnt; mail_item.ProductId = 0; mail_item.isRepeatProduct = false; str_builder.Append($" ItemId : {item_id}").Append($" item_cnt : {item_cnt}"); mail_items.Add(mail_item); } (result, var mail_doc) = await Mail.createSystemMailDocByMOS2User(user_guid, nickname_attrib.Nickname, senderName, title_txt, mail_msg, mail_items); if (result.isFail() || mail_doc is null) { Log.getLogger().error($"fail create system mail, {str_builder.ToString()}"); return; } var to_write_docs = new List(); to_write_docs.Add(mail_doc); var server_logic = GameServerApp.getServerLogic(); var system_manager = server_logic.getSystemMailManager(); var batch = new QueryBatchEx(system_manager, LogActionType.MailSend, server_logic.getDynamoDbClient(), true); { batch.addQuery(new DBQEntityWrite(to_write_docs)); batch.addQuery(new QueryFinal(), async (_query) => { await Task.CompletedTask; var player_manager = server_logic.getPlayerManager(); if (player_manager.tryGetUserByPrimaryKey(user_guid, out var found_user) == true) { var found_user_mail_action = found_user.getEntityAction(); found_user_mail_action.NewReceivedMail(); } return QueryBatchBase.QueryResultType.Success; }); } List invokers = new List(); var task_log_data = MailBusinessLogHelper.toMailLogInfo(mail_doc); invokers.Add(new MailBusinessLog(task_log_data)); batch.appendBusinessLogs(invokers); result = await QueryHelper.sendQueryAndBusinessLog(batch); if (result.isFail()) { Log.getLogger().error($"system mail send error, {str_builder.ToString()}"); return; } Log.getLogger().info($"system mail send success, {str_builder.ToString()}"); return; } }