Skip to content

Commit b8c2fb2

Browse files
committed
feat(mail): 提取玩家邮件服务方法实现便于覆写
将 MailComponentAgent 中 7 个 [Service] 标注的 public virtual async 方法下沉为私有 *Impl 异步实现,公开入口改为同步签名并直接 return 私有 Task,便于派生类按同步契约覆写而无需承担额外的 async 状态机。
1 parent 4171ae4 commit b8c2fb2

1 file changed

Lines changed: 48 additions & 8 deletions

File tree

GameFrameX.Hotfix/Logic/Player/Mail/MailComponentAgent.cs

Lines changed: 48 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,12 @@ public class MailComponentAgent : StateComponentAgent<MailComponent, MailBoxStat
6666
/// 先按 <c>LastSyncCampaignTime</c> 增量扫描新发布 Campaign 做懒创建(B5),再扫描已撤回 Campaign 对已实例化邮件执行 B3 作废。变更后持久化并推送 <c>NotifyMailChanged</c>。
6767
/// </remarks>
6868
[Service]
69-
public virtual async Task SyncAsync()
69+
public virtual Task SyncAsync()
70+
{
71+
return SyncAsyncImpl();
72+
}
73+
74+
private async Task SyncAsyncImpl()
7075
{
7176
var (playerLevel, playerCreatedTime) = await GetPlayerFilterContext();
7277
var serverId = GameServerConst.Game.Id;
@@ -143,7 +148,12 @@ public virtual async Task SyncAsync()
143148
/// 处理 <see cref="ReqMailList"/>:先懒同步,再分页返回邮件摘要(排除已删除)。
144149
/// </summary>
145150
[Service]
146-
public virtual async Task OnReqMailListAsync(INetWorkChannel netWorkChannel, ReqMailList request, RespMailList response)
151+
public virtual Task OnReqMailListAsync(INetWorkChannel netWorkChannel, ReqMailList request, RespMailList response)
152+
{
153+
return OnReqMailListAsyncImpl(netWorkChannel, request, response);
154+
}
155+
156+
private async Task OnReqMailListAsyncImpl(INetWorkChannel netWorkChannel, ReqMailList request, RespMailList response)
147157
{
148158
await SyncAsync();
149159

@@ -178,7 +188,12 @@ public virtual async Task OnReqMailListAsync(INetWorkChannel netWorkChannel, Req
178188
/// 处理 <see cref="ReqMailRead"/>:标记已读(读信幂等),返回完整文案与附件领取状态。
179189
/// </summary>
180190
[Service]
181-
public virtual async Task OnReqMailReadAsync(INetWorkChannel netWorkChannel, ReqMailRead request, RespMailRead response)
191+
public virtual Task OnReqMailReadAsync(INetWorkChannel netWorkChannel, ReqMailRead request, RespMailRead response)
192+
{
193+
return OnReqMailReadAsyncImpl(netWorkChannel, request, response);
194+
}
195+
196+
private async Task OnReqMailReadAsyncImpl(INetWorkChannel netWorkChannel, ReqMailRead request, RespMailRead response)
182197
{
183198
var state = OwnerComponent.State;
184199
var mail = TryFindMail(state, request.MailId);
@@ -233,7 +248,12 @@ public virtual async Task OnReqMailReadAsync(INetWorkChannel netWorkChannel, Req
233248
/// 处理 <see cref="ReqMailDelete"/>:U1 §4.8 删除算法(B2)。未领附件邮件拒绝删除。
234249
/// </summary>
235250
[Service]
236-
public virtual async Task OnReqMailDeleteAsync(INetWorkChannel netWorkChannel, ReqMailDelete request, RespMailDelete response)
251+
public virtual Task OnReqMailDeleteAsync(INetWorkChannel netWorkChannel, ReqMailDelete request, RespMailDelete response)
252+
{
253+
return OnReqMailDeleteAsyncImpl(netWorkChannel, request, response);
254+
}
255+
256+
private async Task OnReqMailDeleteAsyncImpl(INetWorkChannel netWorkChannel, ReqMailDelete request, RespMailDelete response)
237257
{
238258
var state = OwnerComponent.State;
239259
var mail = TryFindMail(state, request.MailId);
@@ -277,7 +297,12 @@ public virtual async Task OnReqMailDeleteAsync(INetWorkChannel netWorkChannel, R
277297
/// </summary>
278298
/// <remarks>不触发 <see cref="SyncAsync"/>:领取作用于当前邮件箱快照,懒同步由列表 / 读信路径保证。幂等命中已领槽位时按成功回包,不重复发奖。</remarks>
279299
[Service]
280-
public virtual async Task OnReqMailClaimAttachmentAsync(INetWorkChannel netWorkChannel, ReqMailClaimAttachment request, RespMailClaimAttachment response)
300+
public virtual Task OnReqMailClaimAttachmentAsync(INetWorkChannel netWorkChannel, ReqMailClaimAttachment request, RespMailClaimAttachment response)
301+
{
302+
return OnReqMailClaimAttachmentAsyncImpl(netWorkChannel, request, response);
303+
}
304+
305+
private async Task OnReqMailClaimAttachmentAsyncImpl(INetWorkChannel netWorkChannel, ReqMailClaimAttachment request, RespMailClaimAttachment response)
281306
{
282307
var state = OwnerComponent.State;
283308
var prepare = MailAttachmentClaim.Prepare(state, request.MailId, request.SlotId);
@@ -328,7 +353,12 @@ public virtual async Task OnReqMailClaimAttachmentAsync(INetWorkChannel netWorkC
328353
/// 处理 <see cref="ReqMailClaimAllAttachment"/>:一键领取当前邮件箱所有 <see cref="ClaimStatus.Claimable"/> 槽位。逐项独立判定,部分失败不影响其余项。
329354
/// </summary>
330355
[Service]
331-
public virtual async Task OnReqMailClaimAllAttachmentAsync(INetWorkChannel netWorkChannel, ReqMailClaimAllAttachment request, RespMailClaimAllAttachment response)
356+
public virtual Task OnReqMailClaimAllAttachmentAsync(INetWorkChannel netWorkChannel, ReqMailClaimAllAttachment request, RespMailClaimAllAttachment response)
357+
{
358+
return OnReqMailClaimAllAttachmentAsyncImpl(netWorkChannel, request, response);
359+
}
360+
361+
private async Task OnReqMailClaimAllAttachmentAsyncImpl(INetWorkChannel netWorkChannel, ReqMailClaimAllAttachment request, RespMailClaimAllAttachment response)
332362
{
333363
var state = OwnerComponent.State;
334364
var changedMailIds = new List<long>();
@@ -425,7 +455,12 @@ private static void FillClaimResponse(RespMailClaimAttachment response, MailStat
425455
/// 过期清理(U1 §4.7 / B4)。遍历邮件箱,按 Campaign <c>ExpireAttachmentPolicy</c> 处理到期邮件。
426456
/// </summary>
427457
[Service]
428-
public virtual async Task ExpireSweepAsync()
458+
public virtual Task ExpireSweepAsync()
459+
{
460+
return ExpireSweepAsyncImpl();
461+
}
462+
463+
private async Task ExpireSweepAsyncImpl()
429464
{
430465
var state = OwnerComponent.State;
431466
var now = TimerHelper.UnixTimeSeconds();
@@ -485,7 +520,12 @@ public virtual async Task ExpireSweepAsync()
485520
/// </summary>
486521
/// <remarks>幂等:重复调用对已处理邮件无副作用。通常由 <see cref="SyncAsync"/> 扫描已撤回 Campaign 时触发;本方法也可供撤回推送路径直接调用。</remarks>
487522
[Service]
488-
public virtual async Task ApplyRevokeAsync(long campaignId, int campaignVersion)
523+
public virtual Task ApplyRevokeAsync(long campaignId, int campaignVersion)
524+
{
525+
return ApplyRevokeAsyncImpl(campaignId, campaignVersion);
526+
}
527+
528+
private async Task ApplyRevokeAsyncImpl(long campaignId, int campaignVersion)
489529
{
490530
var state = OwnerComponent.State;
491531
var changedMailIds = new List<long>();

0 commit comments

Comments
 (0)