渔民小镇 1 年之前
父节点
当前提交
df45e86b20

+ 1 - 5
logic/bag-logic/src/main/java/com/iohao/mmo/bag/action/BagAction.java

@@ -101,11 +101,7 @@ public class BagAction {
         flowContext.broadcast(cmdInfo, WrapperKit.ofListByteValue(list));
 
         // 物品获得通知
-        List<ShowItemMessage> showItemMessageList = bagItemMessages.stream()
-                .map(BagMapper.ME::convertShowItem)
-                .toList();
-
-        CommonExchange.broadcastShowItem(showItemMessageList, flowContext);
+        CommonExchange.broadcastShowItem(()-> BagMapper.ME.convertShowItems(bagItemMessages), flowContext);
     }
 
     /**

+ 2 - 0
logic/bag-logic/src/main/java/com/iohao/mmo/bag/mapper/BagMapper.java

@@ -50,4 +50,6 @@ public interface BagMapper {
     void to(BagItem bagItem, @MappingTarget BagItemMessage bagItemMessage);
 
     ShowItemMessage convertShowItem(BagItemMessage bagItemMessage);
+
+    List<ShowItemMessage> convertShowItems(List<BagItemMessage> bagItemMessages);
 }

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

@@ -93,7 +93,7 @@ public class MailAction {
                     this.mailBoxService.addMail(mail, userId);
 
                     // 新邮件通知
-                    CmdInfo cmdInfo = MailCmd.of(MailCmd.sendNewMail);
+                    CmdInfo cmdInfo = MailCmd.of(MailCmd.broadcastNewMail);
                     broadcastContext.broadcast(cmdInfo, mailMessage, userId);
                 });
     }

+ 0 - 2
provide/bag-provide/src/main/java/com/iohao/mmo/bag/client/BagExchange.java

@@ -48,6 +48,4 @@ public class BagExchange {
         CmdInfo cmdInfo = BagCmd.of(BagCmd.decrementItem);
         return ExchangeKit.invokeModuleMessage(flowContext, cmdInfo, bagItemMessage);
     }
-
-
 }

+ 26 - 2
provide/common-provide/src/main/java/com/iohao/mmo/common/provide/client/CommonExchange.java

@@ -31,6 +31,7 @@ import com.iohao.mmo.common.provide.proto.ShowItemMessage;
 import lombok.experimental.UtilityClass;
 
 import java.util.List;
+import java.util.function.Supplier;
 
 /**
  * 用于界面显示的物品消息,类似单次跑马灯
@@ -40,7 +41,13 @@ import java.util.List;
  */
 @UtilityClass
 public class CommonExchange {
-    public void broadcastShowItem(List<ShowItemMessage> itemMessages, long userId) {
+    public void broadcastShowItem(Supplier<List<ShowItemMessage>> supplier, long userId) {
+        List<ShowItemMessage> itemMessages = supplier.get();
+
+        if (CollKit.isEmpty(itemMessages)) {
+            return;
+        }
+
         CmdInfo cmdInfo = CommonCmd.of(CommonCmd.broadcastShowItem);
         ByteValueList byteValueList = WrapperKit.ofListByteValue(itemMessages);
 
@@ -48,7 +55,24 @@ public class CommonExchange {
         broadcastContext.broadcast(cmdInfo, byteValueList, userId);
     }
 
-    public void broadcastShowItem(List<ShowItemMessage> itemMessages, FlowContext flowContext) {
+    /**
+     * 物品获得通知
+     * <pre>
+     *     用于界面显示的物品消息
+     *     使用 supplier 有个好处,就是当游戏不需要这个物品获得通知这个推送业务时,
+     *     只需要在这个方法做控制就好的,
+     *     并且还能减少转换,也就是不调用 supplier.get() 方法。
+     *
+     *     在调用端也不需要做任何改动,保留原样即可,
+     *     由于不转换,因此也就没损耗。
+     * </pre>
+     *
+     * @param supplier    supplier
+     * @param flowContext flowContext
+     */
+    public void broadcastShowItem(Supplier<List<ShowItemMessage>> supplier, FlowContext flowContext) {
+        List<ShowItemMessage> itemMessages = supplier.get();
+
         if (CollKit.isEmpty(itemMessages)) {
             return;
         }

+ 4 - 9
provide/mail-provide/src/main/java/com/iohao/mmo/mail/client/MailInputCommandRegion.java

@@ -68,12 +68,7 @@ public class MailInputCommandRegion extends AbstractInputCommandRegion {
         }).setDescription("查看玩家邮件列表");
 
         ofCommand(MailCmd.addMail).setDescription("内部 action - 给玩家奖励一个【系统邮件】").setInputRequestData(() -> {
-            String body = """
-                    玩家编号[%s],系统感觉你今天很弱鸡,特意送你一些物品
-                    1.经验值道具 x 2
-                    2.武器制作书-10级 x 1
-                    3.打造精铁-10级 x 1
-                    """;
+            String body = "玩家编号[%s],系统感觉你今天很弱鸡,特意送你一些物品";
 
             InternalMailBuilder internalMailBuilder = InternalMailBuilder.newSystemMailBuilder(String.format(body, userId));
             internalMailBuilder.addMailAttachment(ItemIdConst.expId, 2)
@@ -113,7 +108,7 @@ public class MailInputCommandRegion extends AbstractInputCommandRegion {
             log.info("-----接收新邮件-----");
             MailToString mailToString = new MailToString(mailMessage);
             log.info(mailToString.format, mailToString.arguments);
-        }, MailCmd.sendNewMail, "接收新邮件");
+        }, MailCmd.broadcastNewMail, "接收新邮件");
     }
 
     static class MailToString {
@@ -125,8 +120,8 @@ public class MailInputCommandRegion extends AbstractInputCommandRegion {
                                         
                     【邮件主题 {}】【邮件id {}】【邮件状态:{}】
                     【发送时间:{} --- 过期时间:{}】                  
-                    邮件正文 : {}
-                    附件(奖励)列表:{}
+                    【邮件正文】{}
+                    【附件(奖励)列表】{}
                     """;
 
             String mailAttachmentStr = mailMessage.mailAttachments

+ 1 - 1
provide/mail-provide/src/main/java/com/iohao/mmo/mail/cmd/MailCmd.java

@@ -41,7 +41,7 @@ public interface MailCmd {
     int openMails = 6;
 
     /** 新邮件 - 邮服务器推送 */
-    int sendNewMail = 100;
+    int broadcastNewMail = 100;
 
     static CmdInfo of(int subCmd) {
         return CmdInfo.of(cmd, subCmd);