초기커밋
This commit is contained in:
271
GameServer/Contents/Chat/Action/ChatAction.cs
Normal file
271
GameServer/Contents/Chat/Action/ChatAction.cs
Normal file
@@ -0,0 +1,271 @@
|
||||
|
||||
using ServerCore;
|
||||
using ServerBase;
|
||||
using ServerCommon;
|
||||
|
||||
|
||||
namespace GameServer;
|
||||
|
||||
public class ChatAction : EntityActionBase
|
||||
{
|
||||
public ChatAction(EntityBase owner)
|
||||
: base(owner)
|
||||
{
|
||||
}
|
||||
|
||||
public override Task<Result> onInit()
|
||||
{
|
||||
var result = new Result();
|
||||
|
||||
return Task.FromResult(result);
|
||||
}
|
||||
|
||||
public override void onClear()
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// 일반 주변 채팅
|
||||
public Result NormalChat(string message)
|
||||
{
|
||||
var result = new Result();
|
||||
var err_msg = string.Empty;
|
||||
|
||||
var player = getOwner() as Player;
|
||||
NullReferenceCheckHelper.throwIfNull(player, () => $"player is null !!!");
|
||||
|
||||
var server_logic = GameServerApp.getServerLogic();
|
||||
var game_zone_action = player.getEntityAction<GameZoneAction>();
|
||||
|
||||
ChatNotifyHelper.send_S2C_NTF_CHAT_BROADCAST(player, ChatType.Normal, player.getUserNickname(), string.Empty, PlayerStateType.None, message);
|
||||
|
||||
var invokers = new List<ILogInvoker>();
|
||||
var log_action = new LogActionEx(LogActionType.ChatNormal);
|
||||
|
||||
var cellPos = game_zone_action.GetPlayerCellPos(player);
|
||||
|
||||
var task_log_data = ChatBusinessLogHelper.toLogInfo(message, cellPos);
|
||||
invokers.Add(new ChatBusinessLog(task_log_data));
|
||||
|
||||
BusinessLogger.collectLogs(log_action, player, invokers);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
// 채널 서버 내 채팅
|
||||
public Result ChannelChat(string message)
|
||||
{
|
||||
var result = new Result();
|
||||
var err_msg = string.Empty;
|
||||
|
||||
var player = getOwner() as Player;
|
||||
NullReferenceCheckHelper.throwIfNull(player, () => $"server_logic is null !!!");
|
||||
|
||||
var server_logic = GameServerApp.getServerLogic();
|
||||
|
||||
var receivers = server_logic.getPlayerManager().getUsers();
|
||||
foreach(var receiver in receivers)
|
||||
{
|
||||
ChatNotifyHelper.send_S2C_NTF_CHAT(receiver.Value, ChatType.Channel, player.getUserNickname(), string.Empty, PlayerStateType.None, message);
|
||||
}
|
||||
|
||||
var invokers = new List<ILogInvoker>();
|
||||
var log_action = new LogActionEx(LogActionType.ChatChannel);
|
||||
|
||||
var task_log_data = ChatBusinessLogHelper.toLogInfo(message, string.Empty);
|
||||
invokers.Add(new ChatBusinessLog(task_log_data));
|
||||
|
||||
BusinessLogger.collectLogs(log_action, player, invokers);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
// 전서버 채팅
|
||||
public Result NoticeChat(string message)
|
||||
{
|
||||
var result = new Result();
|
||||
var err_msg = string.Empty;
|
||||
|
||||
var player = getOwner() as Player;
|
||||
NullReferenceCheckHelper.throwIfNull(player, () => $"server_logic is null !!!");
|
||||
|
||||
var server_logic = GameServerApp.getServerLogic();
|
||||
|
||||
// GM인지 확인
|
||||
//if (AccountAuthorityManager.Instance.IsWhiteListUser(player.getAccountId()) == false)
|
||||
//{
|
||||
// err_msg = $"Not Enough Authority to NoticeChat : player - {player.toBasicString()}";
|
||||
// result.setFail(ServerErrorCode.NotEnoughAuthority, err_msg);
|
||||
// Log.getLogger().error(err_msg);
|
||||
// ChatPacketHandler.send_S2C_ACK_CHAT(player, result, ChatType.Notice, player.getUserNickname(), string.Empty, string.Empty, PlayerStateType.None, message);
|
||||
// return result;
|
||||
//}
|
||||
|
||||
var rabbitMQ4Game = server_logic.getRabbitMqConnector() as RabbitMQ4Game;
|
||||
NullReferenceCheckHelper.throwIfNull(rabbitMQ4Game, () => $"rabbitMQ4Game is null !!!");
|
||||
|
||||
|
||||
rabbitMQ4Game.sendChat(message, player.getUserNickname(), ChatType.Notice);
|
||||
|
||||
var invokers = new List<ILogInvoker>();
|
||||
var log_action = new LogActionEx(LogActionType.ChatNotice);
|
||||
|
||||
var task_log_data = ChatBusinessLogHelper.toLogInfo(message, string.Empty);
|
||||
invokers.Add(new ChatBusinessLog(task_log_data));
|
||||
|
||||
BusinessLogger.collectLogs(log_action, player, invokers);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
// 귓속말 채팅
|
||||
public async Task<Result> WhisperChat(string receiver_nickname, string message)
|
||||
{
|
||||
var result = new Result();
|
||||
var err_msg = string.Empty;
|
||||
|
||||
var player = getOwner() as Player;
|
||||
NullReferenceCheckHelper.throwIfNull(player, () => $"player is null !!!");
|
||||
|
||||
var server_logic = GameServerApp.getServerLogic();
|
||||
var rabbitMQ4Game = server_logic.getRabbitMqConnector() as RabbitMQ4Game;
|
||||
NullReferenceCheckHelper.throwIfNull(rabbitMQ4Game, () => $"rabbitMQ4Game is null !!!");
|
||||
|
||||
var dynamo_db_client = server_logic.getDynamoDbClient();
|
||||
|
||||
if (receiver_nickname == player.getUserNickname())
|
||||
{
|
||||
err_msg = $"Can't Send Chat to Self. nickname : {receiver_nickname}";
|
||||
result.setFail(ServerErrorCode.ChatSendSelfFailed, err_msg);
|
||||
Log.getLogger().error(err_msg);
|
||||
PacketHandler.ChatPacketHandler.send_S2C_ACK_CHAT(player, result, receiver_nickname, ChatType.Whisper, player.getUserNickname(), string.Empty, (int)PlayerStateType.None, message);
|
||||
return result;
|
||||
}
|
||||
|
||||
(result, var nickname_attrib) = await NicknameHelper.findNickname(receiver_nickname);
|
||||
if (result.isFail())
|
||||
{
|
||||
err_msg = $"Not Found Target. nickname : {receiver_nickname}";
|
||||
result.setFail(ServerErrorCode.TargetUserNotFound, err_msg);
|
||||
Log.getLogger().error(err_msg);
|
||||
PacketHandler.ChatPacketHandler.send_S2C_ACK_CHAT(player, result, receiver_nickname, ChatType.Whisper, player.getUserNickname(), string.Empty, (int)PlayerStateType.None, message);
|
||||
return result;
|
||||
}
|
||||
NullReferenceCheckHelper.throwIfNull(nickname_attrib, () => $"nickname_attrib is null !!!");
|
||||
var receiver_user_guid = nickname_attrib.UserGuid;
|
||||
|
||||
var login_cache_request = new LoginCacheOtherUserRequest(player, server_logic.getRedisConnector(), nickname_attrib.UserGuid);
|
||||
result = await login_cache_request.fetchLogin();
|
||||
var login_cache = login_cache_request.getLoginCache();
|
||||
if (result.isFail() || login_cache == null)
|
||||
{
|
||||
err_msg = $"Logoff user : target_usenicknamer - {receiver_nickname}";
|
||||
result.setFail(ServerErrorCode.TargetUserNotLogIn, err_msg);
|
||||
Log.getLogger().error(err_msg);
|
||||
PacketHandler.ChatPacketHandler.send_S2C_ACK_CHAT(player, result, receiver_nickname, ChatType.Whisper, player.getUserNickname(), string.Empty, (int)PlayerStateType.None, message);
|
||||
return result;
|
||||
}
|
||||
|
||||
var user_block_action = player.getEntityAction<BlockUserAgentAction>();
|
||||
if (user_block_action == null)
|
||||
{
|
||||
err_msg = $"Failed to get user block action : {nameof(BlockUserAgentAction)}";
|
||||
result.setFail(ServerErrorCode.EntityActionNotFound, err_msg);
|
||||
Log.getLogger().error(err_msg);
|
||||
PacketHandler.ChatPacketHandler.send_S2C_ACK_CHAT(player, result, receiver_nickname, ChatType.Whisper, player.getUserNickname(), string.Empty, (int)PlayerStateType.None, message);
|
||||
return result;
|
||||
}
|
||||
|
||||
//내가 차단한경우
|
||||
if (user_block_action.isBlockUser(receiver_user_guid))
|
||||
{
|
||||
err_msg = $"Failed chat with blocked user.";
|
||||
result.setFail(ServerErrorCode.ChatBlockUserCannotWhisper, err_msg);
|
||||
PacketHandler.ChatPacketHandler.send_S2C_ACK_CHAT(player, result, receiver_nickname, ChatType.Whisper, player.getUserNickname(), string.Empty, (int)PlayerStateType.None, message);
|
||||
return result;
|
||||
}
|
||||
|
||||
//상대방이 차단한경우 상대방에겐 보내지 않고 정상 처리 되도록
|
||||
(result, bool isblocked) = await user_block_action.amIBockedFromOthers(receiver_user_guid);
|
||||
if (result.isFail())
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
if (isblocked == true)
|
||||
{
|
||||
PacketHandler.ChatPacketHandler.send_S2C_ACK_CHAT(player, result, receiver_nickname, ChatType.Whisper, player.getUserNickname(), receiver_user_guid, login_cache.State, message);
|
||||
return result;
|
||||
}
|
||||
|
||||
if (login_cache.CurrentServer != server_logic.getServerName())
|
||||
{
|
||||
ServerMessage chatMessage = new();
|
||||
chatMessage.Chat = new();
|
||||
chatMessage.Chat.Type = ChatType.Whisper;
|
||||
chatMessage.Chat.SenderNickName = player.getUserNickname();
|
||||
chatMessage.Chat.ReceiverGuid = receiver_user_guid;
|
||||
chatMessage.Chat.Receiverstate = login_cache.State;
|
||||
chatMessage.Chat.Message = message;
|
||||
|
||||
rabbitMQ4Game.SendMessage(login_cache.CurrentServer, chatMessage);
|
||||
}
|
||||
else
|
||||
{
|
||||
if(server_logic.getPlayerManager().tryGetUserByPrimaryKey(receiver_user_guid, out var receiver) == false)
|
||||
{
|
||||
err_msg = $"Failed to get player from player manager : receiver_user_guid - {receiver_user_guid}";
|
||||
result.setFail(ServerErrorCode.TargetUserNotLogIn, err_msg);
|
||||
Log.getLogger().error(err_msg);
|
||||
PacketHandler.ChatPacketHandler.send_S2C_ACK_CHAT(player, result, receiver_nickname, ChatType.Whisper, player.getUserNickname(), string.Empty, (int)PlayerStateType.None, message);
|
||||
return result;
|
||||
}
|
||||
|
||||
if(receiver == null)
|
||||
{
|
||||
err_msg = $"Failed to get player from player manager : receiver_user_guid - {receiver_user_guid}";
|
||||
result.setFail(ServerErrorCode.TargetUserNotLogIn, err_msg);
|
||||
Log.getLogger().error(err_msg);
|
||||
PacketHandler.ChatPacketHandler.send_S2C_ACK_CHAT(player, result, receiver_nickname, ChatType.Whisper, player.getUserNickname(), string.Empty, (int)PlayerStateType.None, message);
|
||||
return result;
|
||||
}
|
||||
|
||||
ChatNotifyHelper.send_S2C_NTF_CHAT(receiver, ChatType.Whisper, player.getUserNickname(), receiver_nickname, login_cache.State, message);
|
||||
}
|
||||
|
||||
ChatNotifyHelper.send_S2C_NTF_CHAT(player, ChatType.Whisper, player.getUserNickname(), receiver_nickname, login_cache.State, message);
|
||||
|
||||
var invokers = new List<ILogInvoker>();
|
||||
var log_action = new LogActionEx(LogActionType.ChatWhisper);
|
||||
|
||||
var task_log_data = ChatBusinessLogHelper.toLogInfo(message, receiver_nickname);
|
||||
invokers.Add(new ChatBusinessLog(task_log_data));
|
||||
|
||||
BusinessLogger.collectLogs(log_action, player, invokers);
|
||||
return result;
|
||||
}
|
||||
|
||||
// 파티 채팅
|
||||
public async Task<Result> PartyChat(string message)
|
||||
{
|
||||
var player = getOwner() as Player;
|
||||
NullReferenceCheckHelper.throwIfNull(player, () => $"player is null !!!");
|
||||
|
||||
var personal_party_action = player.getEntityAction<PersonalPartyAction>();
|
||||
NullReferenceCheckHelper.throwIfNull(personal_party_action, () => $"personal_party_action is null !!!");
|
||||
|
||||
var result = await personal_party_action.sendPartyChat(message);
|
||||
|
||||
var invokers = new List<ILogInvoker>();
|
||||
var log_action = new LogActionEx(LogActionType.ChatParty);
|
||||
|
||||
//personal_party_action.getPersonalParty().
|
||||
|
||||
var task_log_data = ChatBusinessLogHelper.toLogInfo(message, string.Empty);
|
||||
invokers.Add(new ChatBusinessLog(task_log_data));
|
||||
|
||||
BusinessLogger.collectLogs(log_action, player, invokers);
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user