using Fantasy.Async; using Fantasy.DataStructure.Collection; using Fantasy.Network.Interface; namespace Fantasy; public class C2Mail_SendMailRequestHandler : RouteRPC { protected override async FTask Run(MailUnit mailUnit, C2Mail_SendMailRequest request, Mail2C_SendMailResponse response, Action reply) { if (string.IsNullOrEmpty(request.UserName)) { // 这里的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().TryGet(request.UserName, 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.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.Create(receiveMailUnit.AccountId); var mail = MailFactory.Create(mailUnit.Scene, MailType.User, request.Title, request.Content, request.Money, mailItems); var mailBox = MailBoxFactory.Create(mailUnit.Scene, MailBoxType.Specify, mailUnit.AccountId, mail, 1000 * 60 * 60, accountId); await MailHelper.Send(mailUnit.Scene, mailBox); } }