using Newtonsoft.Json; using Google.Protobuf; using Google.Protobuf.WellKnownTypes; using ServerCore; using ServerBase; using ServerCommon; using ServerCommon.BusinessLogDomain; using MetaAssets; namespace GameServer; public class RabbitNoticeChatHandler { public void MOS2GS_noticeChatSend(ServerMessage.Types.MOS2GS_NTF_NOTICE_CHAT chatMsg) { //OperationSystemNoticeChatType Log.getLogger().debug("MOS2GS_noticeChatSend call start"); // 1. 메시지 체크 if (chatMsg == null) { var err_msg = $"chatMsg is null !!! : {nameof(ServerMessage.Types.MOS2GS_NTF_NOTICE_CHAT)}"; Log.getLogger().error(err_msg); return; } //await server_logic.getNoticeChatManager().LoadDB(); var notice_type = chatMsg.NoticeType.ToString(); var chat_msgs = chatMsg.ChatMessage; var senders = chatMsg.Sender; Dictionary dic_msg_by_lang = new(); Dictionary dic_sender_by_lang = new(); foreach(var chat_msg in chat_msgs) { var txt = StringRuleHelper.convertStringFromBase64(chat_msg.Text); dic_msg_by_lang.Add((int)chat_msg.LanguageType, txt); } foreach(var sender in senders) { var sender_txt = StringRuleHelper.convertStringFromBase64(sender.Text); dic_sender_by_lang.Add((int)sender.LanguageType, sender_txt); } var server_logic = GameServerApp.getServerLogic(); var player_manager = server_logic.getPlayerManager(); // if (notice_type.Equals(OperationSystemNoticeChatType.CHATTING.ToString())) // { //일단 채팅이든 토스트든 전부 notice로 전달한다. var users = player_manager.getUsers(); foreach (var user in users) { var player = user.Value; var account_attribute = player.getEntityAttribute(); if(account_attribute == null) continue; if(dic_msg_by_lang.TryGetValue((int)account_attribute.LanguageType, out var chat_msg) == false) { var err_msg = $"dic_msg_by_lang error accountid : {account_attribute.AccountId}, langtype : {account_attribute.LanguageType}, {JsonConvert.SerializeObject(dic_msg_by_lang)}"; Log.getLogger().error(err_msg); continue; } if (dic_sender_by_lang.TryGetValue((int)account_attribute.LanguageType, out var sender) == false) { var err_msg = $"dic_sender_by_lang error accountid : {account_attribute.AccountId}, langtype : {account_attribute.LanguageType}, {JsonConvert.SerializeObject(dic_sender_by_lang)}"; Log.getLogger().error(err_msg); continue; } ChatNotifyHelper.send_S2C_NTF_CHAT(player, ChatType.Notice, sender, player.getUserNickname(), PlayerStateType.None, chat_msg); } Log.getLogger().debug($"MOS2GS_noticeChatSend call end userCount = {users.Count}, lang_msg : {JsonConvert.SerializeObject(dic_msg_by_lang)}, sender_msg : {JsonConvert.SerializeObject(dic_sender_by_lang)}"); // } // else if (notice_type.Equals(OperationSystemNoticeChatType.CHATTING_TOAST.ToString())) // { // var err_msg = $"CHATTING_TOAST not implement !!!"; // return; // } //메시지에 대한 필터링을 어떻게 해야하지? // 4. 채팅 처리 // switch (chat_type) // { // case ChatType.Normal: // result = chat_action.NormalChat(request.Message); // break; // case ChatType.Channel: // result = chat_action.ChannelChat(request.Message); // break; // case ChatType.Notice: //result = chat_action.NoticeChat(request.Message); // break; // case ChatType.Whisper: // result = await chat_action.WhisperChat(request.ToNickName, request.Message); // break; // case ChatType.Party: // result = await chat_action.PartyChat(request.Message); // break; // if (result.isFail()) // { // err_msg = $"Failed to trySendMail() !!! : {result.toBasicString()} - {entity_player.toBasicString()}"; // Log.getLogger().error(err_msg); // return result; // } // return result; } }