73 lines
2.5 KiB
C#
73 lines
2.5 KiB
C#
using Fantasy.Async;
|
||
using Fantasy.DataStructure.Collection;
|
||
using Fantasy.Network.Interface;
|
||
using NB;
|
||
using NB.Game;
|
||
using NBF;
|
||
|
||
namespace Fantasy;
|
||
|
||
public class C2Mail_SendMailRequestHandler : AddressRPC<Player, C2Mail_SendMailRequest, Mail2C_SendMailResponse>
|
||
{
|
||
protected override async FTask Run(Player mailUnit, C2Mail_SendMailRequest request,
|
||
Mail2C_SendMailResponse response, Action reply)
|
||
{
|
||
if (request.UserId < 1)
|
||
{
|
||
// 这里的1代表的是发送的接收玩家名字不正确。
|
||
response.ErrorCode = 1;
|
||
return;
|
||
}
|
||
|
||
if (string.IsNullOrEmpty(request.Title) || string.IsNullOrEmpty(request.Content))
|
||
{
|
||
// 这里的2代表的是发送的邮件标题或者内容不正确。
|
||
response.ErrorCode = 2;
|
||
return;
|
||
}
|
||
|
||
if (request.ItemId.Count > 10)
|
||
{
|
||
// 这里的3代表的是发送的邮件附件超出了最大范围。
|
||
response.ErrorCode = 3;
|
||
return;
|
||
}
|
||
|
||
if (!mailUnit.Scene.GetComponent<PlayerManageComponent>().TryGet(request.UserId, out var receiveMailUnit))
|
||
{
|
||
// 这里的4代表的是没有该玩家。
|
||
response.ErrorCode = 4;
|
||
return;
|
||
}
|
||
|
||
if (request.Money > 0)
|
||
{
|
||
// 如果大于0,就要调用某一个接口去货币所在的服务器上面去扣除玩家的钱。
|
||
// var moneyResposne = await MoneyHelper.Cost(mailUnit.Scene, request.Money);
|
||
// if (moneyResposne.ErrorCode != 0)
|
||
// {
|
||
// response.ErrorCode = moneyResposne.ErrorCode;
|
||
// return;
|
||
// }
|
||
}
|
||
|
||
using var mailItems = ListPool<Item>.Create();
|
||
if (request.ItemId.Count > 0)
|
||
{
|
||
// var itemResposne = await BagHelper.Get(mailUnit.Scene, request.ItemId);
|
||
// if (itemResposne.ErrorCode != 0)
|
||
// {
|
||
// response.ErrorCode = itemResposne.ErrorCode;
|
||
// return;
|
||
// }
|
||
// mailItems.AddRange(itemResposne.Items);
|
||
}
|
||
|
||
var accountId = ListPool<long>.Create(receiveMailUnit.Id);
|
||
var mail = MailFactory.Create(mailUnit.Scene, MailType.User, request.Title, request.Content, request.Money,
|
||
mailItems);
|
||
var mailBox = MailBoxFactory.Create(mailUnit.Scene, MailBoxType.Specify, mailUnit.Id, mail,
|
||
1000 * 60 * 60, accountId);
|
||
await MailHelper.Send(mailUnit.Scene, mailBox);
|
||
}
|
||
} |