초기커밋
This commit is contained in:
86
GameServer/Contents/UserReport/Action/UserReportAction.cs
Normal file
86
GameServer/Contents/UserReport/Action/UserReportAction.cs
Normal 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
30
GameServer/Contents/UserReport/UserReportCheat.cs
Normal file
30
GameServer/Contents/UserReport/UserReportCheat.cs
Normal 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], "이유", "신고", "신고합니다.");
|
||||
}
|
||||
}
|
||||
32
GameServer/Contents/UserReport/log/UserReportBusinessLog.cs
Normal file
32
GameServer/Contents/UserReport/log/UserReportBusinessLog.cs
Normal 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));
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user