초기커밋

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,416 @@
using Google.Protobuf.WellKnownTypes;
using ServerCore; using ServerBase;
using ServerCommon;
using USER_GUID = System.String;
using USER_NICKNAME = System.String;
using MetaAssets;
namespace GameServer
{
public class Mail : EntityBase
{
private Mail(EntityBase parent)
: base(EntityType.Mail, parent)
{
}
public override async Task<Result> onInit()
{
var parent = getDirectParent();
NullReferenceCheckHelper.throwIfNull(parent, () => "Parent Entity is null !!");
addEntityAttribute(new MailAttribute(this, parent));
return await base.onInit();
}
public static async Task<(Result, Mail?)> createSendMail(Player owner, string toNickname, string toGuid, string title, string mailText)
{
var mail = new Mail(owner);
var result = await mail.onInit();
if (result.isFail())
{
return (result, null);
}
var err_msg = string.Empty;
DateTime now = DateTimeHelper.Current;
var expireDate = now.AddSeconds(MetaHelper.GameConfigMeta.SendMailStoragePeriod);
string mailGuid = MailHelper.makeMailGuid(now);
var mail_attribute = mail.getEntityAttribute<MailAttribute>();
if (mail_attribute == null)
{
err_msg = $"Failed to get mail attribute : {nameof(MailAttribute)}";
result.setFail(ServerErrorCode.EntityAttributeIsNull, err_msg);
Log.getLogger().error(err_msg);
return (result, null);
}
mail_attribute.MailGuid = mailGuid;
mail_attribute.SenderNickName = owner.getUserNickname();
mail_attribute.SenderGuid = owner.getUserGuid();
mail_attribute.ReceiverNickName = toNickname;
mail_attribute.ReceiverGuid = toGuid;
mail_attribute.Title = title;
mail_attribute.Text = mailText;
mail_attribute.CreateTime = now;
mail_attribute.ExpireTime = expireDate;
mail_attribute.IsSystemMail = false;
mail_attribute.IsRead = false;
mail_attribute.IsGetItem = false;
mail_attribute.IsTextByMetaData = false;
mail_attribute.newEntityAttribute();
return (result, mail);
}
public static async Task<(Result, Mail?)> createMailFromDoc(EntityBase parent, MailDoc doc)
{
var mail = new Mail(parent);
var result = await mail.onInit();
if (result.isFail())
{
return (result, null);
}
var err_msg = string.Empty;
var mail_attribute = mail.getEntityAttribute<MailAttribute>();
NullReferenceCheckHelper.throwIfNull(mail_attribute, () => $"mail_attribute is null !!! - {parent.toBasicString()}");
if (mail_attribute.copyEntityAttributeFromDoc(doc) == false)
{
err_msg = $"Failed to copyEntityAttributeFromDoc !!! : doc_type {doc.GetType()} - {mail.getRootParent().toBasicString()}";
result.setFail(ServerErrorCode.DynamoDbDocCopyToEntityAttributeFailed, err_msg);
Log.getLogger().error(err_msg);
return (result, null);
}
return (result, mail);
}
public static async Task<(Result, ReceivedMailDoc?)> createSystemMailWithMeta( USER_GUID receiverUserGuid, USER_NICKNAME receiverNickname
, SystemMailMetaData systemMailData
, List<ServerCommon.MailItem> mailItems, DateTime expireDate, string packageOrderId = "")
{
ArgumentNullReferenceCheckHelper.throwIfNull(systemMailData, () => $"systemMailData is null !!! - receiver:{receiverNickname}");
ArgumentNullReferenceCheckHelper.throwIfNull(mailItems, () => $"mailItems is null !!! - receiver:{receiverNickname}, sender:{systemMailData.Sender}");
(var result, ReceivedMailDoc? to_receive_mail_doc) = await Mail.createSystemMail( receiverUserGuid, receiverNickname
, systemMailData.Sender
, systemMailData.Mail_Title, systemMailData.Mail_Desc, new List<string>()
, true, mailItems, expireDate, packageOrderId);
if (result.isFail())
{
return (result, null);
}
return (result, to_receive_mail_doc);
}
public static async Task<(Result, ReceivedMailDoc?)> createSystemMailWithMeta( USER_GUID receiverUserGuid, USER_NICKNAME receiverNickname
, SystemMailMetaData systemMailData, List<string> contensArguments
, List<ServerCommon.MailItem> mailItems, DateTime expireDate, string packageOrderId = "")
{
ArgumentNullReferenceCheckHelper.throwIfNull(systemMailData, () => $"systemMailData is null !!! - receiver:{receiverNickname}");
ArgumentNullReferenceCheckHelper.throwIfNull(mailItems, () => $"mailItems is null !!! - receiver:{receiverNickname}, sender:{systemMailData.Sender}");
(var result, ReceivedMailDoc? to_receive_mail_doc) = await Mail.createSystemMail( receiverUserGuid, receiverNickname
, systemMailData.Sender
, systemMailData.Mail_Title, systemMailData.Mail_Desc, contensArguments
, true, mailItems, expireDate, packageOrderId);
if (result.isFail())
{
return (result, null);
}
return (result, to_receive_mail_doc);
}
public static async Task<(Result, ReceivedMailDoc?)> createSystemMailWithMeta( USER_GUID receiverUserGuid, USER_NICKNAME receiverNickname
, SystemMailMetaData systemMailData
, List<ServerCommon.MailItem> mailItems, Int64 TTL_Period, string packageOrderId = "")
{
ArgumentNullReferenceCheckHelper.throwIfNull(systemMailData, () => $"systemMailData is null !!! - receiver:{receiverNickname}");
ArgumentNullReferenceCheckHelper.throwIfNull(mailItems, () => $"mailItems is null !!! - receiver:{receiverNickname}, sender:{systemMailData.Sender}");
(var result, ReceivedMailDoc? to_receive_mail_doc) = await Mail.createSystemMail(receiverUserGuid, receiverNickname
, systemMailData.Sender
, systemMailData.Mail_Title, systemMailData.Mail_Desc, new List<string>()
, true, mailItems, TTL_Period, packageOrderId);
if (result.isFail())
{
return (result, null);
}
return (result, to_receive_mail_doc);
}
public static async Task<(Result, ReceivedMailDoc?)> createSystemMailWithMeta( USER_GUID receiverUserGuid, USER_NICKNAME receiverNickname
, SystemMailMetaData systemMailData, List<string> contentsArguments
, List<ServerCommon.MailItem> mailItems, Int64 TTL_Period, string packageOrderId = "")
{
ArgumentNullReferenceCheckHelper.throwIfNull(systemMailData, () => $"systemMailData is null !!! - receiver:{receiverNickname}");
ArgumentNullReferenceCheckHelper.throwIfNull(mailItems, () => $"mailItems is null !!! - receiver:{receiverNickname}, sender:{systemMailData.Sender}");
(var result, ReceivedMailDoc? to_receive_mail_doc) = await Mail.createSystemMail( receiverUserGuid, receiverNickname
, systemMailData.Sender
, systemMailData.Mail_Title, systemMailData.Mail_Desc, contentsArguments
, true, mailItems, TTL_Period, packageOrderId );
if (result.isFail())
{
return (result, null);
}
return (result, to_receive_mail_doc);
}
public static async Task<(Result, ReceivedMailDoc?)> createSystemMailWithMeta( USER_GUID receiverUserGuid, USER_NICKNAME receiverNickname
, SystemMailMetaData systemMailData, string mailBodyText
, List<ServerCommon.MailItem> mailItems, Int64 TTL_Period, string packageOrderId = "")
{
ArgumentNullReferenceCheckHelper.throwIfNull(systemMailData, () => $"systemMailData is null !!! - receiver:{receiverNickname}");
ArgumentNullReferenceCheckHelper.throwIfNull(mailItems, () => $"mailItems is null !!! - receiver:{receiverNickname}, sender:{systemMailData.Sender}");
(var result, ReceivedMailDoc? to_receive_mail_doc) = await Mail.createSystemMail(receiverUserGuid, receiverNickname
, systemMailData.Sender
, systemMailData.Mail_Title, mailBodyText, new List<string>()
, true, mailItems, TTL_Period, packageOrderId);
if (result.isFail())
{
return (result, null);
}
return (result, to_receive_mail_doc);
}
public static async Task<Result> createAndSendSystemMailWithMeta( USER_GUID receiverUserGuid, USER_NICKNAME receiverNickname
, SystemMailMetaData systemMailData, List<string> contensArguments
, List<ServerCommon.MailItem> mailItems, Int64 TTL_Period, string packageOrderId = "")
{
ArgumentNullReferenceCheckHelper.throwIfNull(systemMailData, () => $"systemMailData is null !!! - receiver:{receiverNickname}");
ArgumentNullReferenceCheckHelper.throwIfNull(mailItems, () => $"mailItems is null !!! - receiver:{receiverNickname}, sender:{systemMailData.Sender}");
var result = new Result();
result = await createAndSendSystemMail(receiverUserGuid, receiverNickname
, systemMailData.Sender
, systemMailData.Mail_Title, systemMailData.Mail_Desc, contensArguments
, true, mailItems, TTL_Period, packageOrderId);
if (result.isFail())
{
return result;
}
return result;
}
public static async Task<Result> createAndSendSystemMail( USER_GUID receiverUserGuid, USER_NICKNAME receiverNickname
, string senderNickName, string title, string text, List<string> contentsArguments
, bool isTextByMetaData
, List<ServerCommon.MailItem> mailItems, Int64 TTL_Period, string packageOrderId = "")
{
ArgumentNullReferenceCheckHelper.throwIfNull(mailItems, () => $"mailItems is null !!! - receiver:{receiverNickname}, sender:{senderNickName}");
var server_logic = GameServerApp.getServerLogic();
var dynamo_db_client = server_logic.getDynamoDbClient();
NullReferenceCheckHelper.throwIfNull(dynamo_db_client, () => $"dynamo_db_client is null !!! - receiver:{receiverNickname}, sender:{senderNickName}");
var result = new Result();
(result, ReceivedMailDoc? received_mail_doc) = await Mail.createSystemMail( receiverUserGuid
, receiverNickname
, senderNickName, title, text, contentsArguments, isTextByMetaData
, mailItems, TTL_Period, packageOrderId);
if (result.isFail())
{
return result;
}
NullReferenceCheckHelper.throwIfNull(received_mail_doc, () => $"received_mail_doc is null !!!");
result = await dynamo_db_client.simpleUpsertDocumentWithDocType<ReceivedMailDoc>(received_mail_doc);
if (result.isFail())
{
return result;
}
return result;
}
public static async Task<(Result, ReceivedMailDoc?)> createSystemMail( USER_GUID receiverUserGuid, USER_NICKNAME receiverNickname
, string senderNickName, string title, string text, List<string> contentsArguments, bool isTextByMetaData
, List<ServerCommon.MailItem> mailItems, Int64 TTL_Period, string packageOrderId = "")
{
var now = DateTime.UtcNow;
var expireDate = DateTimeHelper.MaxTime;
if (0 < TTL_Period)
{
expireDate = now.AddMinutes(TTL_Period);
}
return await createSystemMail( receiverUserGuid
, receiverNickname
, senderNickName, title, text, contentsArguments
, isTextByMetaData
, mailItems, expireDate, packageOrderId);
}
public static async Task<(Result, ReceivedMailDoc?)> createSystemMail( USER_GUID receiverUserGuid, USER_NICKNAME receiverNickname
, string senderNickName, string title, string text, List<string> contentsArguments
, bool isTextByMetaData
, List<ServerCommon.MailItem> mailItems, DateTime expireDate, string packageOrderId = "" )
{
ArgumentNullReferenceCheckHelper.throwIfNull(mailItems, () => $"mailItems is null !!! - receiver:{receiverNickname}, sender:{senderNickName}");
var server_logic = GameServerApp.getServerLogic();
var dynamo_db_client = server_logic.getDynamoDbClient();
NullReferenceCheckHelper.throwIfNull(dynamo_db_client, () => $"dynamo_db_client is null !!! - receiver:{receiverNickname}, sender:{senderNickName}");
var result = new Result();
var now = DateTime.UtcNow;
string mail_guid = MailHelper.makeMailGuid(now);
ReceivedMailDoc? to_create_doc;
if (expireDate == DateTimeHelper.MaxTime)
{
to_create_doc = new ReceivedMailDoc(receiverUserGuid, mail_guid);
}
else
{
var ttlTime = DynamoDbClientHelper.makeTTLTimeForDynamoDB(expireDate);
to_create_doc = new ReceivedMailDoc(receiverUserGuid, mail_guid, ttlTime);
}
var mail_attrib = to_create_doc.getAttrib<MailAttrib>();
NullReferenceCheckHelper.throwIfNull(mail_attrib, () => $"mail_attrib is null !!! - receiverUserGuid:{receiverUserGuid}");
mail_attrib.MailGuid = mail_guid;
mail_attrib.SenderNickName = senderNickName;
mail_attrib.ReceiverNickName = receiverNickname;
mail_attrib.ReceiverGuid = receiverUserGuid;
mail_attrib.Title = title;
mail_attrib.Text = text;
mail_attrib.CreateTime = now;
mail_attrib.ExpireTime = expireDate;
mail_attrib.IsSystemMail = true;
mail_attrib.IsRead = false;
mail_attrib.IsGetItem = false;
mail_attrib.IsTextByMetaData = isTextByMetaData;
mail_attrib.packageOrderId = packageOrderId;
mail_attrib.ContentsArguments = contentsArguments;
foreach (var itemInfo in mailItems)
{
mail_attrib.ItemList.Add(new ServerCommon.MailItem() { ItemId = itemInfo.ItemId, Count = itemInfo.Count, ProductId = itemInfo.ProductId, isRepeatProduct = itemInfo.isRepeatProduct });
}
result = await to_create_doc.newDoc4Query();
if (result.isFail())
{
return (result, null);
}
return (result, to_create_doc);
}
public override string toBasicString()
{
return $"{this.getTypeName()}, MailGuid:{getOriginEntityAttribute<MailAttribute>()?.MailGuid}, SenderNickName:{getOriginEntityAttribute<MailAttribute>()?.SenderNickName}, ReceiverNickName:{getEntityAttribute<MailAttribute>()?.ReceiverNickName}, Title:{getEntityAttribute<MailAttribute>()?.Title}";
}
public override string toSummaryString()
{
return $"{this.getTypeName()}, {getEntityAttribute<MailAttribute>()?.toBasicString()}";
}
public MailInfo toMailData4Client(MailType mailType)
{
var mail_4_client = new MailInfo();
var mail_attribute = getEntityAttribute<MailAttribute>();
NullReferenceCheckHelper.throwIfNull(mail_attribute, () => "mail_attribute is null !!!");
mail_4_client.MailKey = mail_attribute.MailGuid;
mail_4_client.IsRead = mail_attribute.IsRead == true ? 1 : 0;
mail_4_client.IsGetItem = mail_attribute.IsGetItem == true ? 1 : 0;
mail_4_client.IsSystemMail = mail_attribute.IsSystemMail == true ? 1 : 0;
mail_4_client.NickName = mailType == MailType.ReceivedMail ? mail_attribute.SenderNickName : mail_attribute.ReceiverNickName;
mail_4_client.Guid = mailType == MailType.ReceivedMail ? mail_attribute.SenderGuid : mail_attribute.ReceiverGuid;
mail_4_client.Title = mail_attribute.Title;
mail_4_client.Text = mail_attribute.Text;
mail_4_client.CreateTime = Timestamp.FromDateTime(mail_attribute.CreateTime);
mail_4_client.ExpireTime = Timestamp.FromDateTime(mail_attribute.ExpireTime);
mail_4_client.MailType = (int)mailType;
mail_4_client.IsTextByMetaData = mail_attribute.IsTextByMetaData == true ? BoolType.True : BoolType.False;
mail_4_client.IsPermanentMail = mail_attribute.ExpireTime == DateTimeHelper.MaxTime ? BoolType.True : BoolType.False;
mail_4_client.ContentsArguments.AddRange(mail_attribute.ContentsArguments);
foreach (var mailItemInfo in mail_attribute.ItemList)
{
var mailItem = new MailItem();
mailItem.ItemId = (int)mailItemInfo.ItemId;
mailItem.Count = mailItemInfo.Count;
mail_4_client.ItemList.Add(mailItem);
}
return mail_4_client;
}
public static async Task<(Result, ReceivedMailDoc?)> createSystemMailDocByMOS2User( USER_GUID receiverUserGuid, USER_NICKNAME receiverNickname
, string senderNickName, string title, string text, List<ServerCommon.MailItem> mailItems)
{
var server_logic = GameServerApp.getServerLogic();
var dynamo_db_client = server_logic.getDynamoDbClient();
NullReferenceCheckHelper.throwIfNull(dynamo_db_client, () => $"dynamo_db_client is null !!! - receiver:{receiverNickname}, sender:{senderNickName}");
var result = new Result();
var now = DateTime.UtcNow;
string mail_guid = MailHelper.makeMailGuid(now);
var expireDate = DateTime.UtcNow.AddMinutes(MetaHelper.GameConfigMeta.SystemMailStoragePeriod);
var ttlTime = DynamoDbClientHelper.makeTTLTimeForDynamoDB(expireDate);
var to_create_doc = new ReceivedMailDoc(receiverUserGuid, mail_guid, ttlTime);
var mail_attrib = to_create_doc.getAttrib<MailAttrib>();
NullReferenceCheckHelper.throwIfNull(mail_attrib, () => $"mail_attrib is null !!! - receiverUserGuid:{receiverUserGuid}");
mail_attrib.MailGuid = mail_guid;
mail_attrib.SenderNickName = senderNickName;
mail_attrib.ReceiverNickName = receiverNickname;
mail_attrib.ReceiverGuid = receiverUserGuid;
mail_attrib.Title = title;
mail_attrib.Text = text;
mail_attrib.CreateTime = now;
mail_attrib.ExpireTime = expireDate;
mail_attrib.IsSystemMail = true;
mail_attrib.IsRead = false;
mail_attrib.IsGetItem = false;
mail_attrib.IsTextByMetaData = false;
mail_attrib.packageOrderId = "";
foreach (var itemInfo in mailItems)
{
mail_attrib.ItemList.Add(new ServerCommon.MailItem() { ItemId = itemInfo.ItemId, Count = itemInfo.Count, ProductId = itemInfo.ProductId, isRepeatProduct = itemInfo.isRepeatProduct });
}
result = await to_create_doc.newDoc4Query();
if (result.isFail())
{
return (result, null);
}
return (result, to_create_doc);
}
}
}