瀏覽代碼

:whale: 简化邮件,移除 InternalMailMessage 协议,统一使用 MailMessage。

渔民小镇 1 年之前
父節點
當前提交
d56d98a271

+ 5 - 6
logic/mail-logic/src/main/java/com/iohao/mmo/mail/action/MailAction.java

@@ -30,7 +30,6 @@ import com.iohao.mmo.mail.cmd.MailCmd;
 import com.iohao.mmo.mail.entity.Mail;
 import com.iohao.mmo.mail.entity.MailBox;
 import com.iohao.mmo.mail.mapper.MailMapper;
-import com.iohao.mmo.mail.proto.InternalMailMessage;
 import com.iohao.mmo.mail.proto.MailMessage;
 import com.iohao.mmo.mail.proto.MailStatusMessageEnum;
 import com.iohao.mmo.mail.service.MailBoxService;
@@ -73,18 +72,18 @@ public class MailAction {
      * @param internalMailMessages 邮件
      */
     @ActionMethod(MailCmd.addMail)
-    public void internalAddMail(List<InternalMailMessage> internalMailMessages) {
+    public void internalAddMail(List<MailMessage> internalMailMessages, FlowContext flowContext) {
         if (CollKit.isEmpty(internalMailMessages)) {
             return;
         }
 
+        long userId = flowContext.getUserId();
+
         BroadcastContext broadcastContext = BrokerClientHelper.getBroadcastContext();
 
         internalMailMessages.stream()
-                .filter(internalMail -> internalMail.userId > 0 && Objects.nonNull(internalMail.mail))
-                .forEach(internalMailMessage -> {
-                    long userId = internalMailMessage.userId;
-                    MailMessage mailMessage = internalMailMessage.mail;
+                .filter(Objects::nonNull)
+                .forEach(mailMessage -> {
 
                     mailMessage.mailStatus = MailStatusMessageEnum.SEAL;
                     mailMessage.id = new ObjectId().toString();

+ 6 - 1
logic/mail-logic/src/main/java/com/iohao/mmo/mail/service/MailBoxService.java

@@ -126,10 +126,15 @@ public class MailBoxService {
         openMail(list, mailBox, flowContext);
     }
 
+    public void save(MailBox mailBox) {
+        this.mailBoxRepository.save(mailBox);
+
+    }
+
     private void openMail(List<Mail> processMails, MailBox mailBox, FlowContext flowContext) {
         // 需要处理的邮件列表
         processMails.forEach(mail -> mail.setMailStatus(MailStatusEnum.OPEN));
-        this.mailBoxRepository.save(mailBox);
+        save(mailBox);
 
         // 将邮件附件转为背包物品
         List<BagItemMessage> list = processMails.stream()

+ 6 - 6
one-client/src/main/java/com/iohao/mmo/client/input/MailInputCommandRegion.java

@@ -29,8 +29,7 @@ import com.iohao.mmo.common.provide.item.ItemTypeIdConst;
 import com.iohao.mmo.client.common.item.ItemTypeNodeKit;
 import com.iohao.mmo.client.common.item.ItemTypeNode;
 import com.iohao.mmo.mail.cmd.MailCmd;
-import com.iohao.mmo.mail.kit.InternalMailBuilder;
-import com.iohao.mmo.mail.proto.InternalMailMessage;
+import com.iohao.mmo.mail.kit.MailMessageBuilder;
 import com.iohao.mmo.mail.proto.MailAttachmentMessage;
 import com.iohao.mmo.mail.proto.MailMessage;
 import com.iohao.mmo.mail.proto.MailStatusMessageEnum;
@@ -70,13 +69,14 @@ public class MailInputCommandRegion extends AbstractInputCommandRegion {
         ofCommand(MailCmd.addMail).setDescription("内部 action - 给玩家奖励一个【系统邮件】").setInputRequestData(() -> {
             String body = "玩家编号[%s],系统感觉你今天很弱鸡,特意送你一些物品";
 
-            InternalMailBuilder internalMailBuilder = InternalMailBuilder.newSystemMailBuilder(String.format(body, userId));
-            internalMailBuilder.addMailAttachment(ItemTypeIdConst.expId, 2)
+            MailMessageBuilder mailMessageBuilder = MailMessageBuilder.newSystemMailBuilder(String.format(body, userId));
+            mailMessageBuilder
+                    .addMailAttachment(ItemTypeIdConst.expId, 2)
                     .addMailAttachment(ItemTypeIdConst.equipWeaponBook10, 1)
                     .addMailAttachment(ItemTypeIdConst.iron10, 1);
 
-            InternalMailMessage internalMailMessage = internalMailBuilder.build(userId);
-            return WrapperKit.ofListByteValue(List.of(internalMailMessage));
+            var mailMessage = mailMessageBuilder.build();
+            return WrapperKit.ofListByteValue(List.of(mailMessage));
         });
 
         ofCommand(MailCmd.deleteMail).callback(BoolValue.class, result -> {

+ 9 - 0
provide/common-provide/src/main/java/com/iohao/mmo/common/provide/client/ExchangeKit.java

@@ -18,6 +18,7 @@
  */
 package com.iohao.mmo.common.provide.client;
 
+import com.iohao.game.action.skeleton.core.BarMessageKit;
 import com.iohao.game.action.skeleton.core.CmdInfo;
 import com.iohao.game.action.skeleton.core.commumication.BrokerClientContext;
 import com.iohao.game.action.skeleton.core.commumication.InvokeModuleContext;
@@ -62,4 +63,12 @@ public class ExchangeKit {
         InvokeModuleContext invokeModuleContext = BrokerClientHelper.getInvokeModuleContext();
         invokeModuleContext.invokeModuleVoidMessage(cmdInfo, data);
     }
+
+    public void invokeModuleVoidMessage(CmdInfo cmdInfo, Object data, long userId) {
+        RequestMessage requestMessage = BarMessageKit.createRequestMessage(cmdInfo, data);
+        requestMessage.getHeadMetadata().setUserId(userId);
+
+        InvokeModuleContext invokeModuleContext = BrokerClientHelper.getInvokeModuleContext();
+        invokeModuleContext.invokeModuleVoidMessage(requestMessage);
+    }
 }

+ 6 - 5
provide/mail-provide/src/main/java/com/iohao/mmo/mail/client/MailExchange.java

@@ -24,7 +24,7 @@ import com.iohao.game.action.skeleton.protocol.wrapper.WrapperKit;
 import com.iohao.game.common.kit.CollKit;
 import com.iohao.mmo.common.provide.client.ExchangeKit;
 import com.iohao.mmo.mail.cmd.MailCmd;
-import com.iohao.mmo.mail.proto.InternalMailMessage;
+import com.iohao.mmo.mail.proto.MailMessage;
 import lombok.experimental.UtilityClass;
 
 import java.util.List;
@@ -40,11 +40,12 @@ import java.util.List;
  */
 @UtilityClass
 public class MailExchange {
-    public void addEmail(InternalMailMessage internalMailMessage) {
-        addEmail(List.of(internalMailMessage));
+    public void addEmail(MailMessage internalMailMessage, long userId) {
+        List<MailMessage> mailMessageList = List.of(internalMailMessage);
+        addEmail(mailMessageList, userId);
     }
 
-    public void addEmail(List<InternalMailMessage> internalMailMessages) {
+    public void addEmail(List<MailMessage> internalMailMessages, long userId) {
 
         if (CollKit.isEmpty(internalMailMessages)) {
             return;
@@ -52,6 +53,6 @@ public class MailExchange {
 
         CmdInfo cmdInfo = MailCmd.of(MailCmd.addMail);
         ByteValueList byteValueList = WrapperKit.ofListByteValue(internalMailMessages);
-        ExchangeKit.invokeModuleVoidMessage(cmdInfo, byteValueList);
+        ExchangeKit.invokeModuleVoidMessage(cmdInfo, byteValueList, userId);
     }
 }

+ 14 - 24
provide/mail-provide/src/main/java/com/iohao/mmo/mail/kit/InternalMailBuilder.java → provide/mail-provide/src/main/java/com/iohao/mmo/mail/kit/MailMessageBuilder.java

@@ -19,7 +19,6 @@
 package com.iohao.mmo.mail.kit;
 
 import com.iohao.game.common.kit.TimeKit;
-import com.iohao.mmo.mail.proto.InternalMailMessage;
 import com.iohao.mmo.mail.proto.MailAttachmentMessage;
 import com.iohao.mmo.mail.proto.MailMessage;
 import com.iohao.mmo.mail.proto.MailStatusMessageEnum;
@@ -42,7 +41,7 @@ import java.util.Objects;
 @Setter
 @Accessors(chain = true)
 @FieldDefaults(level = AccessLevel.PRIVATE)
-public class InternalMailBuilder {
+public final class MailMessageBuilder {
     /** 邮件主题 */
     String subject;
     /** 邮件正文 */
@@ -63,22 +62,22 @@ public class InternalMailBuilder {
      */
     Duration duration = Duration.ofDays(30);
 
-    InternalMailBuilder() {
+    MailMessageBuilder() {
     }
 
-    public static InternalMailBuilder newBuilder() {
-        return new InternalMailBuilder();
+    public static MailMessageBuilder newBuilder() {
+        return new MailMessageBuilder();
     }
 
-    public static InternalMailBuilder newSystemMailBuilder(String body) {
-        InternalMailBuilder internalMailBuilder = new InternalMailBuilder();
+    public static MailMessageBuilder newSystemMailBuilder(String body) {
+        MailMessageBuilder mailMessageBuilder = new MailMessageBuilder();
 
-        internalMailBuilder.subject = "系统邮件";
-        internalMailBuilder.senderName = "系统";
-        internalMailBuilder.senderUserId = 0L;
-        internalMailBuilder.body = body;
+        mailMessageBuilder.subject = "系统邮件";
+        mailMessageBuilder.senderName = "系统";
+        mailMessageBuilder.senderUserId = 0L;
+        mailMessageBuilder.body = body;
 
-        return internalMailBuilder;
+        return mailMessageBuilder;
     }
 
     /**
@@ -88,7 +87,7 @@ public class InternalMailBuilder {
      * @param quantity   奖励数量
      * @return MailBuilder
      */
-    public InternalMailBuilder addMailAttachment(String itemTypeId, int quantity) {
+    public MailMessageBuilder addMailAttachment(String itemTypeId, int quantity) {
 
         if (quantity < 0) {
             throw new IllegalArgumentException();
@@ -109,20 +108,15 @@ public class InternalMailBuilder {
     /**
      * 接收邮件的玩家
      *
-     * @param userId userId
      * @return InternalMailMessage
      */
-    public InternalMailMessage build(long userId) {
+    public MailMessage build() {
         Objects.requireNonNull(subject);
         Objects.requireNonNull(body);
         Objects.requireNonNull(senderName);
         Objects.requireNonNull(senderUserId);
         Objects.requireNonNull(duration);
 
-        if (userId <= 0) {
-            throw new IllegalArgumentException();
-        }
-
         // 奖励邮件
         MailMessage mailMessage = new MailMessage();
         mailMessage.senderName = senderName;
@@ -134,10 +128,6 @@ public class InternalMailBuilder {
         mailMessage.mailAttachments = this.mailAttachments;
         mailMessage.mailStatus = MailStatusMessageEnum.SEAL;
 
-        // 内部邮件
-        InternalMailMessage internalMailMessage = new InternalMailMessage();
-        internalMailMessage.userId = userId;
-        internalMailMessage.mail = mailMessage;
-        return internalMailMessage;
+        return mailMessage;
     }
 }

+ 0 - 40
provide/mail-provide/src/main/java/com/iohao/mmo/mail/proto/InternalMailMessage.java

@@ -1,40 +0,0 @@
-/*
- * ioGame
- * Copyright (C) 2021 - 2023  渔民小镇 (262610965@qq.com、luoyizhu@gmail.com) . All Rights Reserved.
- * # iohao.com . 渔民小镇
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program.  If not, see <https://www.gnu.org/licenses/>.
- */
-package com.iohao.mmo.mail.proto;
-
-import com.baidu.bjf.remoting.protobuf.annotation.ProtobufClass;
-import lombok.AccessLevel;
-import lombok.ToString;
-import lombok.experimental.FieldDefaults;
-
-/**
- * 内部邮件奖励
- *
- * @author 渔民小镇
- * @date 2023-08-15
- */
-@ToString
-@ProtobufClass
-@FieldDefaults(level = AccessLevel.PUBLIC)
-public class InternalMailMessage {
-    /** userId */
-    long userId;
-    /** 玩家邮件 */
-    MailMessage mail;
-}