초기커밋
This commit is contained in:
416
GameServer/Contents/Mail/Mail.cs
Normal file
416
GameServer/Contents/Mail/Mail.cs
Normal 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user