초기커밋

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,86 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Google.Protobuf.WellKnownTypes;
using ServerCore; using ServerBase;
using ServerCommon;
using ServerCommon.BusinessLogDomain;
using USER_GUID = System.String;
namespace GameServer
{
public class UserReportAction : EntityActionBase
{
public UserReportAction(Player owner)
: base(owner)
{
}
public override async Task<Result> onInit()
{
await Task.CompletedTask;
var result = new Result();
return result;
}
public override void onClear()
{
return;
}
public async Task<Result> UserReport(USER_GUID target_user_guid, string target_user_nickname, string req_reason, string req_title, string req_detail)
{
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 dynamo_db_client = server_logic.getDynamoDbClient();
var now = DateTime.UtcNow;
var user_report_doc = new UserReportDoc(player.getUserGuid(), $"{now.ToString()}");
var user_report_attrib = user_report_doc.getAttrib<UserReportAttrib>();
NullReferenceCheckHelper.throwIfNull(user_report_attrib, () => $"user_report_attrib is null !!! - {player.toBasicString()}");
user_report_attrib.ReporterGuid = player.getUserGuid();
user_report_attrib.ReporterNickName = player.getUserNickname();
user_report_attrib.TargetGuid = target_user_guid;
user_report_attrib.TargetNickName = target_user_nickname;
user_report_attrib.Reason = req_reason;
user_report_attrib.Title = req_title;
user_report_attrib.Detail = req_detail;
user_report_attrib.State = 1;
user_report_attrib.CreateTime = now;
result = await dynamo_db_client.simpleUpsertDocumentWithDocType<UserReportDoc>(user_report_doc);
if (result.isFail())
{
err_msg = $"Failed to simpleUpsertDocumentWithDocType<UserReportDoc> !!! : {user_report_doc.toBasicString()} - {player.toBasicString()}";
Log.getLogger().error(err_msg);
return result;
}
var invokers = new List<ILogInvoker>();
var log_action = new LogActionEx(LogActionType.UserReport);
var userReportLogData = UserReportBusinessLogHelper.toLogInfo(user_report_attrib);
invokers.Add(new UserReportBusinessLog(userReportLogData));
BusinessLogger.collectLogs(log_action, player, invokers);
return result;
}
}
}

View File

@@ -0,0 +1,120 @@
using Google.Protobuf;
using Google.Protobuf.WellKnownTypes;
using ServerCore;
using ServerBase;
using ServerCommon;
using ServerCommon.BusinessLogDomain;
using MetaAssets;
using static ClientToGameReq.Types;
using static ClientToGameRes.Types;
namespace GameServer.PacketHandler;
[PacketHandler(typeof(ClientToGameReq), typeof(ClientToGameReq.Types.UserReportReq), typeof(UserReportPacketHandler), typeof(GameLoginListener))]
public class UserReportPacketHandler : PacketRecvHandler
{
public static bool send_S2C_ACK_USER_REPORT(Player player, Result result)
{
var ack_packet = new ClientToGame();
ack_packet.Response = new ClientToGameRes();
ack_packet.Response.ErrorCode = result.ErrorCode;
ack_packet.Response.UserReportRes = new UserReportRes();
if (false == GameServerApp.getServerLogic().onSendPacket(player, ack_packet))
{
return false;
}
return true;
}
public override async Task<Result> onProcessPacket(ISession entityWithSession, IMessage recvMessage)
{
var player = entityWithSession as Player;
ArgumentNullReferenceCheckHelper.throwIfNull(player, () => $"player is null !!!");
var req_msg = recvMessage as ClientToGame;
ArgumentNullReferenceCheckHelper.throwIfNull(req_msg, () => $"req_msg is null !!! - {player.toBasicString()}");
var request = req_msg.Request.UserReportReq;
ArgumentNullReferenceCheckHelper.throwIfNull(request, () => $"request is null !!! - {player.toBasicString()}");
var result = new Result();
var err_msg = string.Empty;
var server_logic = GameServerApp.getServerLogic();
var dynamo_db_client = server_logic.getDynamoDbClient();
var user_report_action = player.getEntityAction<UserReportAction>();
NullReferenceCheckHelper.throwIfNull(user_report_action, () => $"user_report_action is null !!! - {player.toBasicString()}");
// 신고하기 조건 체크
result = checkReportConditions(request);
if (result.isFail())
{
send_S2C_ACK_USER_REPORT(player, result);
return result;
}
(result, var nickname_attrib) = await NicknameHelper.findNickname(request.TargetNickName);
if (result.isFail())
{
send_S2C_ACK_USER_REPORT(player, result);
return result;
}
NullReferenceCheckHelper.throwIfNull(nickname_attrib, () => $"nickname_attrib is null !!! - {player.toBasicString()}");
result = await user_report_action.UserReport(nickname_attrib.UserGuid, request.TargetNickName, request.Reason, request.Title, request.Detail);
if (result.isFail())
{
send_S2C_ACK_USER_REPORT(player, result);
return result;
}
send_S2C_ACK_USER_REPORT(player, result);
return result;
}
private Result checkReportConditions(UserReportReq request)
{
var result = new Result();
string err_msg;
// 1. title 체크
if (MetaHelper.GameConfigMeta.MinReportTitleNum > request.Title.Length
|| MetaHelper.GameConfigMeta.MaxReportTitleNum < request.Title.Length)
{
err_msg = $"fail to report user !!! : invalid title length - {request.Title.Length}";
result.setFail(ServerErrorCode.UserReportInvalidTitleLength, err_msg);
Log.getLogger().error(result.toBasicString());
return result;
}
// 2. content 체크
if (MetaHelper.GameConfigMeta.MinReportContentNum > request.Detail.Length
|| MetaHelper.GameConfigMeta.MaxReportContentNum < request.Detail.Length)
{
err_msg = $"fail to report user !!! : invalid content length - {request.Detail.Length}";
result.setFail(ServerErrorCode.UserReportInvalidTitleLength, err_msg);
Log.getLogger().error(result.toBasicString());
return result;
}
return result;
}
public override async Task onProcessPacketException(ISession entityWithSession, IMessage recvMessage
, Result errorResult)
{
await Task.CompletedTask;
var player = entityWithSession as Player;
NullReferenceCheckHelper.throwIfNull(player, () => $"player is null !!! - {entityWithSession.toBasicString()}");
send_S2C_ACK_USER_REPORT(player, errorResult);
}
}

View File

@@ -0,0 +1,30 @@
using ServerCore; using ServerBase;
using ServerCommon;
namespace GameServer;
[ChatCommandAttribute("userreport", typeof(ChatCommandUserReport), AuthAdminLevelType.Developer, AuthAdminLevelType.GmNormal, AuthAdminLevelType.GmSuper)]
internal class ChatCommandUserReport : ChatCommandBase
{
public override async Task invoke(Player player, string token, string[] args)
{
Log.getLogger().info($"HandleUserReport");
if (args.Length < 1)
{
Log.getLogger().error($"Invalid Argument");
return;
}
(var result, var nickname_attrib) = await NicknameHelper.findNickname(args[0]);
if (result.isFail())
{
return;
}
NullReferenceCheckHelper.throwIfNull(nickname_attrib, () => $"nickname_attrib is null !!! - {player.toBasicString()}");
var user_report_action = player.getEntityAction<UserReportAction>();
await user_report_action.UserReport(nickname_attrib.UserGuid, args[0], "이유", "신고", "신고합니다.");
}
}

View File

@@ -0,0 +1,32 @@
using Google.Protobuf;
using Google.Protobuf.WellKnownTypes;
using ServerCore;
using ServerBase;
using ServerCommon;
using ServerCommon.BusinessLogDomain;
using MetaAssets;
namespace GameServer;
public class UserReportBusinessLog : ILogInvokerEx
{
private UserReportLogData m_data_to_log;
public UserReportBusinessLog(UserReportLogData log_data_param)
: base(LogDomainType.UserReport)
{
m_data_to_log = log_data_param;
}
public override bool hasLog()
{
return true;
}
protected override void fillup(ref BusinessLog.LogBody body)
{
body.append(new UserReportLogData(this, m_data_to_log));
}
}

View File

@@ -0,0 +1,36 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using ServerCommon;
using ServerCommon.BusinessLogDomain;
namespace GameServer
{
static public class UserReportBusinessLogHelper
{
static public UserReportLogData toLogInfo(UserReportAttrib user_report_attrib)
{
var userReport = new UserReportLogData();
userReport.setInfo(user_report_attrib);
return userReport;
}
static public void setInfo(this UserReportLogData logData, UserReportAttrib user_report_attrib)
{
logData.ReporterGuid = user_report_attrib.ReporterGuid;
logData.ReporterNickName = user_report_attrib.ReporterNickName;
logData.TargetGuid = user_report_attrib.TargetGuid;
logData.TargetNickName = user_report_attrib.TargetNickName;
logData.Reason = user_report_attrib.Reason;
logData.Title = user_report_attrib.Title;
logData.Detail = user_report_attrib.Detail;
logData.State = user_report_attrib.State;
logData.CreateTime = user_report_attrib.CreateTime;
}
}
}