116 lines
4.6 KiB
C#
116 lines
4.6 KiB
C#
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<int, string> dic_msg_by_lang = new();
|
|
Dictionary<int, string> 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<AccountAttribute>();
|
|
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;
|
|
}
|
|
} |