From 06f293ace767c02f55aaf6e4d8b95d38762ecbd9 Mon Sep 17 00:00:00 2001 From: "410408824@qq.com" <410408824@qq.com> Date: Thu, 30 Nov 2023 12:15:18 +0800 Subject: [PATCH 1/7] =?UTF-8?q?=E4=BF=AE=E6=94=B9=20gitgnore?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 434f260..35d1e72 100644 --- a/.gitignore +++ b/.gitignore @@ -23,4 +23,7 @@ hs_err_pid* # target -target/ \ No newline at end of file +target/ + +# protobuf-itl +proto/ \ No newline at end of file -- Gitee From 133d6551ccd3e14d2bd176d4c1487b4653bf96ac Mon Sep 17 00:00:00 2001 From: "410408824@qq.com" <410408824@qq.com> Date: Sat, 2 Dec 2023 09:27:46 +0800 Subject: [PATCH 2/7] =?UTF-8?q?=E5=AE=9E=E7=8E=B0logic=E6=9C=8D=E5=90=8C?= =?UTF-8?q?=E6=AD=A5=EF=BC=8C=E5=87=86=E5=A4=87=E5=86=99=E5=AE=A2=E6=88=B7?= =?UTF-8?q?=E7=AB=AF=E7=BD=91=E7=BB=9C=E6=9E=B6=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../demo/client/DemoClientApplication.java | 22 +++++- .../demo/gate/controller/GateController.java | 20 +++++ paradogs-demo/paradogs-demo-logic/pom.xml | 4 + .../logic/controller/LoginController.java | 23 +++++- .../demo/logic/event/PlayerLoginEvent.java | 2 +- .../demo/logic/manager/InventoryManager.java | 17 +++++ .../{PlayerManager.java => RoleManager.java} | 11 ++- .../demo/logic/manager/base/BaseManager.java | 53 ++++++++++++-- .../demo/logic/misc/LogicMsgConsumer.java | 25 +++++++ .../demo/logic/misc/PlayerOnlineHolder.java | 6 +- .../base => misc}/PlayerTemplate.java | 31 +++++++- .../paradogs/demo/logic/misc/SyncAspect.java | 73 +++++++++++++++++++ .../login/controller/LoginController.java | 2 +- .../framework/common/dao/PlayerDao.java | 2 +- .../common/dao/impl/PlayerDaoImpl.java | 2 +- .../framework/common/entity/Player.java | 10 +-- .../common/entity/base/BaseEntity.java | 2 + .../main/resources/mapper/PlayerMapper.xml | 5 -- .../framework/core/msg/MsgHeader.java | 11 +-- .../core/msg/PRMsgContextHolder.java | 10 ++- .../com/paradogs/framework/core/msg/R.java | 44 +++++++++++ .../framework/core/netty/PRAbMsgHandler.java | 2 +- .../core/netty/server/PRConnection.java | 12 +-- .../framework/core/queue/PRQueueHolder.java | 6 +- .../core/queue/QueueConsumerThread.java | 16 +++- .../framework/core/utils/MsgUtils.java | 12 +-- .../framework/core/utils/ReflectUtils.java | 29 ++++++++ .../framework/gate/GateChannelHolder.java | 73 +++++++++++++++++++ .../gate/PRGateServerMsgHandler.java | 10 ++- .../src/main/resources/config/application.yml | 5 +- .../master/netty/MasterMsgHandler.java | 2 +- .../framework/server/ServerMsgConsumer.java | 4 + .../src/main/resources/config/application.yml | 3 + paradogs-framework/pom.xml | 2 +- .../paradogs/generator/DBEntityGenerator.java | 10 ++- .../generator/ProtobufIDLGenerator.java | 2 +- .../main/resources/mybatis-plus/entity.ftl | 20 +++++ 37 files changed, 510 insertions(+), 73 deletions(-) create mode 100644 paradogs-demo/paradogs-demo-logic/src/main/java/com/paradogs/demo/logic/manager/InventoryManager.java rename paradogs-demo/paradogs-demo-logic/src/main/java/com/paradogs/demo/logic/manager/{PlayerManager.java => RoleManager.java} (58%) create mode 100644 paradogs-demo/paradogs-demo-logic/src/main/java/com/paradogs/demo/logic/misc/LogicMsgConsumer.java rename paradogs-demo/paradogs-demo-logic/src/main/java/com/paradogs/demo/logic/{manager/base => misc}/PlayerTemplate.java (51%) create mode 100644 paradogs-demo/paradogs-demo-logic/src/main/java/com/paradogs/demo/logic/misc/SyncAspect.java delete mode 100644 paradogs-framework/paradogs-framework-common/src/main/resources/mapper/PlayerMapper.xml create mode 100644 paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/msg/R.java create mode 100644 paradogs-framework/paradogs-framework-gate-starter/src/main/java/com/paradogs/framework/gate/GateChannelHolder.java create mode 100644 paradogs-generator/src/main/resources/mybatis-plus/entity.ftl diff --git a/paradogs-demo/paradogs-demo-client/src/main/java/com/paradogs/demo/client/DemoClientApplication.java b/paradogs-demo/paradogs-demo-client/src/main/java/com/paradogs/demo/client/DemoClientApplication.java index 9e12c9b..37f7096 100644 --- a/paradogs-demo/paradogs-demo-client/src/main/java/com/paradogs/demo/client/DemoClientApplication.java +++ b/paradogs-demo/paradogs-demo-client/src/main/java/com/paradogs/demo/client/DemoClientApplication.java @@ -6,6 +6,7 @@ import com.paradogs.framework.common.pojo.cg.CGGatewayLogin; import com.paradogs.framework.common.pojo.gc.GCAllocGateway; import com.paradogs.framework.common.pojo.gc.GCApplyGate; import com.paradogs.framework.core.msg.ByteData; +import com.paradogs.framework.core.msg.R; import com.paradogs.framework.core.netty.PRCodec; import com.paradogs.framework.core.utils.ProtoUtils; import io.netty.bootstrap.Bootstrap; @@ -17,6 +18,7 @@ import io.netty.channel.nio.NioEventLoopGroup; import io.netty.channel.socket.nio.NioSocketChannel; import io.netty.handler.codec.LengthFieldBasedFrameDecoder; import io.netty.handler.codec.LengthFieldPrepender; +import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @@ -77,8 +79,12 @@ public class DemoClientApplication { channel.pipeline().addLast(new SimpleChannelInboundHandler() { @Override protected void channelRead0(ChannelHandlerContext ctx, ByteData msg) throws Exception { - log.info("Receive: {}", msg); - Client.send(ctx.channel(), "logic|misc.hello", new CGGatewayLogin("123")); + if (msg.getMsgHeader().getRoute().equals("syncData")) { + R result = ProtoUtils.decode(msg.getDataBytes(), R.class); + log.info("Receive: {}", result); + } else { + log.info("Receive: {}", msg); + } } }); } @@ -87,6 +93,18 @@ public class DemoClientApplication { log.info("Connect Gate success"); Client.send(gateChannel, "gate|login", new CGGatewayLogin(result.getToken())); + Thread.sleep(1000); + new Thread(new Runnable() { + @SneakyThrows + @Override + public void run() { + while (true) { + Client.send(gateChannel, "logic|misc.updateData", new CGGatewayLogin("123")); + Thread.sleep(1000); + } + } + }).start(); + } }); } diff --git a/paradogs-demo/paradogs-demo-gate/src/main/java/com/paradogs/demo/gate/controller/GateController.java b/paradogs-demo/paradogs-demo-gate/src/main/java/com/paradogs/demo/gate/controller/GateController.java index 12499bc..99048fc 100644 --- a/paradogs-demo/paradogs-demo-gate/src/main/java/com/paradogs/demo/gate/controller/GateController.java +++ b/paradogs-demo/paradogs-demo-gate/src/main/java/com/paradogs/demo/gate/controller/GateController.java @@ -8,7 +8,13 @@ import com.paradogs.framework.common.pojo.misc.LongWrapper; import com.paradogs.framework.core.annoations.request.PRController; import com.paradogs.framework.core.annoations.request.PRMsgMapping; import com.paradogs.framework.core.msg.GCAck; +import com.paradogs.framework.core.msg.PRMsgContextHolder; +import com.paradogs.framework.core.msg.R; +import com.paradogs.framework.core.netty.PRConnHolder; +import com.paradogs.framework.core.utils.MsgUtils; import com.paradogs.framework.core.utils.PRAsync; +import com.paradogs.framework.gate.GateChannelHolder; +import io.netty.channel.Channel; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Async; @@ -52,9 +58,23 @@ public class GateController { PlayerOnlineHolder.WillLoginInfo info = playerOnlineHolder.get(msg.getToken()); if (info != null) { logicClient.loadPlayer(new LongWrapper(info.getUid())); + playerOnlineHolder.removeToken(msg.getToken()); + // 绑定 Channel 所属玩家信息,待优化:登录功能可以放在 gate-starter 模块里 + GateChannelHolder.bindSession(PRMsgContextHolder.getChannel(), new GateChannelHolder.Session(info.getUid())); return GCAck.success(); } return GCAck.fail(); } + /** + * 向玩家同步玩家自身数据 + */ + @PRMsgMapping("syncData") + public void syncData(R syncData) { + Channel channel = GateChannelHolder.getPlayerChannel(syncData.getPlayerId()); + if (channel != null) { + MsgUtils.send("syncData", syncData, channel); + } + } + } diff --git a/paradogs-demo/paradogs-demo-logic/pom.xml b/paradogs-demo/paradogs-demo-logic/pom.xml index 2f65476..d480ba7 100644 --- a/paradogs-demo/paradogs-demo-logic/pom.xml +++ b/paradogs-demo/paradogs-demo-logic/pom.xml @@ -21,6 +21,10 @@ com.paradogs paradogs-framework-server-starter + + org.springframework.boot + spring-boot-starter-aop + \ No newline at end of file diff --git a/paradogs-demo/paradogs-demo-logic/src/main/java/com/paradogs/demo/logic/controller/LoginController.java b/paradogs-demo/paradogs-demo-logic/src/main/java/com/paradogs/demo/logic/controller/LoginController.java index ca18e5d..5efe5ca 100644 --- a/paradogs-demo/paradogs-demo-logic/src/main/java/com/paradogs/demo/logic/controller/LoginController.java +++ b/paradogs-demo/paradogs-demo-logic/src/main/java/com/paradogs/demo/logic/controller/LoginController.java @@ -1,16 +1,17 @@ package com.paradogs.demo.logic.controller; import com.paradogs.demo.logic.event.PlayerLoginEvent; -import com.paradogs.demo.logic.manager.base.PlayerTemplate; +import com.paradogs.demo.logic.misc.PlayerOnlineHolder; +import com.paradogs.demo.logic.misc.PlayerTemplate; +import com.paradogs.framework.common.entity.Role; import com.paradogs.framework.common.pojo.misc.LongWrapper; import com.paradogs.framework.core.annoations.request.PRController; import com.paradogs.framework.core.annoations.request.PRMsgMapping; import com.paradogs.framework.core.msg.GCAck; +import com.paradogs.framework.core.msg.PRMsgContextHolder; import com.paradogs.framework.core.utils.EventUtils; -import com.paradogs.framework.core.utils.PRAsync; import lombok.extern.slf4j.Slf4j; - -import java.util.concurrent.CompletableFuture; +import org.springframework.beans.factory.annotation.Autowired; /** * @author: yumi @@ -22,6 +23,9 @@ import java.util.concurrent.CompletableFuture; @PRMsgMapping("misc") public class LoginController { + @Autowired + private PlayerOnlineHolder PlayerOnlineHolder; + @PRMsgMapping(value = "loadPlayer", async = true) public GCAck loadPlayer(LongWrapper wrapper) { // 初始化玩家数据 @@ -38,5 +42,16 @@ public class LoginController { return GCAck.success(); } + static long n = 1; + @PRMsgMapping("updateData") + public GCAck updateData() { + PlayerTemplate player = PlayerOnlineHolder.getPlayer(PRMsgContextHolder.getPlayerId()); + + Role role = new Role(); + role.setLevel(100 + n++); + player.getRoleManager().updateData(role); + return GCAck.success(); + } + } diff --git a/paradogs-demo/paradogs-demo-logic/src/main/java/com/paradogs/demo/logic/event/PlayerLoginEvent.java b/paradogs-demo/paradogs-demo-logic/src/main/java/com/paradogs/demo/logic/event/PlayerLoginEvent.java index ca638a9..c85f87d 100644 --- a/paradogs-demo/paradogs-demo-logic/src/main/java/com/paradogs/demo/logic/event/PlayerLoginEvent.java +++ b/paradogs-demo/paradogs-demo-logic/src/main/java/com/paradogs/demo/logic/event/PlayerLoginEvent.java @@ -1,6 +1,6 @@ package com.paradogs.demo.logic.event; -import com.paradogs.demo.logic.manager.base.PlayerTemplate; +import com.paradogs.demo.logic.misc.PlayerTemplate; import com.paradogs.framework.common.events.base.AnonEvent; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/paradogs-demo/paradogs-demo-logic/src/main/java/com/paradogs/demo/logic/manager/InventoryManager.java b/paradogs-demo/paradogs-demo-logic/src/main/java/com/paradogs/demo/logic/manager/InventoryManager.java new file mode 100644 index 0000000..8dcc1d6 --- /dev/null +++ b/paradogs-demo/paradogs-demo-logic/src/main/java/com/paradogs/demo/logic/manager/InventoryManager.java @@ -0,0 +1,17 @@ +package com.paradogs.demo.logic.manager; + +import com.paradogs.demo.logic.manager.base.BaseManager; +import com.paradogs.framework.common.dao.InventoryDao; +import com.paradogs.framework.common.entity.Inventory; +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Component; + +/** + * @author: yumi + * @date: 2023/11/30 15:21 + * @Description: TODO + */ +@Component +@Scope("prototype") +public class InventoryManager extends BaseManager { +} diff --git a/paradogs-demo/paradogs-demo-logic/src/main/java/com/paradogs/demo/logic/manager/PlayerManager.java b/paradogs-demo/paradogs-demo-logic/src/main/java/com/paradogs/demo/logic/manager/RoleManager.java similarity index 58% rename from paradogs-demo/paradogs-demo-logic/src/main/java/com/paradogs/demo/logic/manager/PlayerManager.java rename to paradogs-demo/paradogs-demo-logic/src/main/java/com/paradogs/demo/logic/manager/RoleManager.java index 8b3bd7e..4c106f3 100644 --- a/paradogs-demo/paradogs-demo-logic/src/main/java/com/paradogs/demo/logic/manager/PlayerManager.java +++ b/paradogs-demo/paradogs-demo-logic/src/main/java/com/paradogs/demo/logic/manager/RoleManager.java @@ -1,18 +1,17 @@ package com.paradogs.demo.logic.manager; -import com.paradogs.framework.common.dao.PlayerDao; -import com.paradogs.framework.common.entity.Player; import com.paradogs.demo.logic.manager.base.BaseManager; +import com.paradogs.framework.common.dao.RoleDao; +import com.paradogs.framework.common.entity.Role; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; /** * @author: yumi - * @date: 2023/11/23 14:01 + * @date: 2023/11/30 15:22 * @Description: TODO */ -@Scope("prototype") @Component -public class PlayerManager extends BaseManager { - +@Scope("prototype") +public class RoleManager extends BaseManager { } diff --git a/paradogs-demo/paradogs-demo-logic/src/main/java/com/paradogs/demo/logic/manager/base/BaseManager.java b/paradogs-demo/paradogs-demo-logic/src/main/java/com/paradogs/demo/logic/manager/base/BaseManager.java index ff08883..368acb5 100644 --- a/paradogs-demo/paradogs-demo-logic/src/main/java/com/paradogs/demo/logic/manager/base/BaseManager.java +++ b/paradogs-demo/paradogs-demo-logic/src/main/java/com/paradogs/demo/logic/manager/base/BaseManager.java @@ -2,9 +2,11 @@ package com.paradogs.demo.logic.manager.base; import com.baomidou.mybatisplus.extension.service.IService; import com.paradogs.framework.common.entity.base.BaseEntity; +import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; /** @@ -13,31 +15,70 @@ import org.springframework.beans.factory.annotation.Autowired; * @Description: TODO */ @Slf4j -public abstract class BaseManager> { +public abstract class BaseManager> { @Autowired private D dao; @Getter @Setter - private T entity; + private E data; + + /** + * 数据是否被修改并且未同步到客户端 + */ + @Getter + @Setter + private boolean dirty; /** * 加载玩家数据 * @param uid */ public void loadData(Long uid) { - this.entity = dao.getById(uid); - if (this.entity == null) { + this.data = dao.getById(uid); + if (this.data == null) { try { - this.entity = dao.getEntityClass().newInstance(); + this.data = dao.getEntityClass().newInstance(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } } - log.debug("Load {}: {}", this.getClass().getSimpleName(), this.entity); + log.debug("Load {}: {}", this.getClass().getSimpleName(), this.data); + } + + /** + * 复制一份数据 + * @return + */ + public E copyData() { + if (this.data == null) { + return null; + } + E copy = null; + try { + copy = dao.getEntityClass().newInstance(); + BeanUtils.copyProperties(this.data, copy); + } catch (InstantiationException | IllegalAccessException e) { + log.error("Error copying data", e); + } + return copy; + } + + /** + * 更新数据,待优化:数据值真实变化时再改变状态位 + * @param data + */ + public void updateData(E data) { + if (!this.data.equals(data)) { + this.data = data; + this.dirty = true; + } + } + public void setData(E data) { + updateData(data); } /** diff --git a/paradogs-demo/paradogs-demo-logic/src/main/java/com/paradogs/demo/logic/misc/LogicMsgConsumer.java b/paradogs-demo/paradogs-demo-logic/src/main/java/com/paradogs/demo/logic/misc/LogicMsgConsumer.java new file mode 100644 index 0000000..fe32e7b --- /dev/null +++ b/paradogs-demo/paradogs-demo-logic/src/main/java/com/paradogs/demo/logic/misc/LogicMsgConsumer.java @@ -0,0 +1,25 @@ +package com.paradogs.demo.logic.misc; + +import com.paradogs.framework.core.msg.ByteData; +import com.paradogs.framework.server.ServerMsgConsumer; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Component; + +import java.lang.reflect.InvocationTargetException; + +/** + * @author: yumi + * @date: 2023/12/1 17:18 + * @Description: TODO + */ +@Slf4j +@Scope("prototype") +@Component +public class LogicMsgConsumer extends ServerMsgConsumer { + + @Override + public void handle(ByteData byteData) throws InvocationTargetException, IllegalAccessException { + log.info("-------------------------------------"); + } +} diff --git a/paradogs-demo/paradogs-demo-logic/src/main/java/com/paradogs/demo/logic/misc/PlayerOnlineHolder.java b/paradogs-demo/paradogs-demo-logic/src/main/java/com/paradogs/demo/logic/misc/PlayerOnlineHolder.java index 4a7d46b..09d9625 100644 --- a/paradogs-demo/paradogs-demo-logic/src/main/java/com/paradogs/demo/logic/misc/PlayerOnlineHolder.java +++ b/paradogs-demo/paradogs-demo-logic/src/main/java/com/paradogs/demo/logic/misc/PlayerOnlineHolder.java @@ -2,7 +2,6 @@ package com.paradogs.demo.logic.misc; import com.paradogs.demo.logic.event.PlayerLoginEvent; import com.paradogs.demo.logic.event.PlayerLogoutEvent; -import com.paradogs.demo.logic.manager.base.PlayerTemplate; import lombok.extern.slf4j.Slf4j; import org.springframework.context.event.EventListener; import org.springframework.stereotype.Component; @@ -24,6 +23,11 @@ public class PlayerOnlineHolder { */ private Map onlinePlayerMap = new HashMap<>(); + + public PlayerTemplate getPlayer(Long uid) { + return onlinePlayerMap.get(uid); + } + @EventListener(PlayerLoginEvent.class) public void PlayerLoginEventHandler(PlayerLoginEvent event) { onlinePlayerMap.put(event.getUid(), event.getPlayerTemplate()); diff --git a/paradogs-demo/paradogs-demo-logic/src/main/java/com/paradogs/demo/logic/manager/base/PlayerTemplate.java b/paradogs-demo/paradogs-demo-logic/src/main/java/com/paradogs/demo/logic/misc/PlayerTemplate.java similarity index 51% rename from paradogs-demo/paradogs-demo-logic/src/main/java/com/paradogs/demo/logic/manager/base/PlayerTemplate.java rename to paradogs-demo/paradogs-demo-logic/src/main/java/com/paradogs/demo/logic/misc/PlayerTemplate.java index 28ea8b7..950a081 100644 --- a/paradogs-demo/paradogs-demo-logic/src/main/java/com/paradogs/demo/logic/manager/base/PlayerTemplate.java +++ b/paradogs-demo/paradogs-demo-logic/src/main/java/com/paradogs/demo/logic/misc/PlayerTemplate.java @@ -1,10 +1,18 @@ -package com.paradogs.demo.logic.manager.base; +package com.paradogs.demo.logic.misc; -import com.paradogs.demo.logic.manager.PlayerManager; +import com.paradogs.demo.logic.manager.InventoryManager; +import com.paradogs.demo.logic.manager.RoleManager; +import com.paradogs.demo.logic.manager.base.BaseManager; +import com.paradogs.framework.common.entity.base.BaseEntity; +import com.paradogs.framework.core.utils.BeanUtils; import com.paradogs.framework.core.utils.SpringUtils; import lombok.Data; +import lombok.EqualsAndHashCode; import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; /** * @author: yumi @@ -19,7 +27,18 @@ public class PlayerTemplate { */ private Long uid; - private PlayerManager playerManager; + private List managers = new ArrayList<>(); + + /** + * 角色相关 + */ + private RoleManager roleManager; + + /** + * 库存系统 + */ + private InventoryManager inventoryManager; + public PlayerTemplate(Long uid) { /** @@ -33,6 +52,7 @@ public class PlayerTemplate { // 加载数据 manager.loadData(uid); field.set(this, manager); + managers.add(manager); } catch (IllegalAccessException e) { e.printStackTrace(); } @@ -40,4 +60,9 @@ public class PlayerTemplate { } } + public List copyData() { + List dataList = managers.stream().map(manager -> manager.copyData()).collect(Collectors.toList()); + return dataList; + } + } diff --git a/paradogs-demo/paradogs-demo-logic/src/main/java/com/paradogs/demo/logic/misc/SyncAspect.java b/paradogs-demo/paradogs-demo-logic/src/main/java/com/paradogs/demo/logic/misc/SyncAspect.java new file mode 100644 index 0000000..7b720e0 --- /dev/null +++ b/paradogs-demo/paradogs-demo-logic/src/main/java/com/paradogs/demo/logic/misc/SyncAspect.java @@ -0,0 +1,73 @@ +package com.paradogs.demo.logic.misc; + +import com.paradogs.demo.logic.manager.base.BaseManager; +import com.paradogs.framework.core.annoations.request.PRMsgMapping; +import com.paradogs.framework.core.msg.PRMsgContextHolder; +import com.paradogs.framework.core.msg.R; +import com.paradogs.framework.core.utils.MsgUtils; +import com.paradogs.framework.core.utils.ReflectUtils; +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.annotation.Order; +import org.springframework.stereotype.Component; + +/** + * @author: yumi + * @date: 2023/11/30 17:55 + * @Description: 检查和同步玩家数据变化的切面 + */ +@Slf4j +@Aspect +@Order(Integer.MAX_VALUE) +@Component +public class SyncAspect { + + @Autowired + private PlayerOnlineHolder onlineHolder; + + /** + * 对 @PRMsgMapping 注解方法切面,用于检查和同步玩家数据变化 + * - @within(com.paradogs.framework.core.annoations.request.PRController) && + * @param joinPoint + * @param msgMapping + * @return + * @throws Throwable + */ + @Around("@annotation(msgMapping)") + public Object aroundPRMsgMappingMethods(ProceedingJoinPoint joinPoint, PRMsgMapping msgMapping) throws Throwable { + Long uId = PRMsgContextHolder.getPlayerId(); + PlayerTemplate template = onlineHolder.getPlayer(uId); + Object result = joinPoint.proceed(); // 执行目标方法 + /** + * 玩家数据发生变化时,同步数据(先发送同步消息再发送回复消息) + * 待优化: + * 1. 目前变化时同步整个类,可以改成同步类中单个字段 + * 2. syncData 消息和 reply 消息合并发送:合并成同一个类或 write() 不 flush ? + */ + if (template != null) { + R syncData = R.success(result); + boolean needSync = false; + for (BaseManager manager : template.getManagers()) { + log.info(manager.getData().getClass().getSimpleName()); + if (manager.isDirty()) { + ReflectUtils.callSetter(syncData, manager.getData().getClass().getSimpleName(), manager.getData()); + needSync = true; + } + } + // 如果玩家数据变化,则同步玩家数据 + if (needSync) { + syncData.setPlayerId(uId); + MsgUtils.send("gate|syncData", syncData, PRMsgContextHolder.getChannel()); + log.debug("数据变化,同步玩家数据: {}", syncData); + } + // 更新数据状态 + template.getManagers().forEach(manager -> manager.setDirty(false)); + } + + return result; + } + +} diff --git a/paradogs-demo/paradogs-demo-login/src/main/java/com/paradogs/demo/login/controller/LoginController.java b/paradogs-demo/paradogs-demo-login/src/main/java/com/paradogs/demo/login/controller/LoginController.java index d6fd32b..7536324 100644 --- a/paradogs-demo/paradogs-demo-login/src/main/java/com/paradogs/demo/login/controller/LoginController.java +++ b/paradogs-demo/paradogs-demo-login/src/main/java/com/paradogs/demo/login/controller/LoginController.java @@ -39,7 +39,7 @@ public class LoginController { private PlayerDao playerDao; @PRMsgMapping(value = "applyGate", async = true) - public GCApplyGate login(CGLogin dto) { + public GCApplyGate applyGate(CGLogin dto) { Player player = playerDao.getOne(Wrap.lbq() .eq(Player::getAccount, dto.getAccount()) .eq(Player::getPwd, dto.getPassword())); diff --git a/paradogs-framework/paradogs-framework-common/src/main/java/com/paradogs/framework/common/dao/PlayerDao.java b/paradogs-framework/paradogs-framework-common/src/main/java/com/paradogs/framework/common/dao/PlayerDao.java index 1d5b912..daa43dd 100644 --- a/paradogs-framework/paradogs-framework-common/src/main/java/com/paradogs/framework/common/dao/PlayerDao.java +++ b/paradogs-framework/paradogs-framework-common/src/main/java/com/paradogs/framework/common/dao/PlayerDao.java @@ -9,7 +9,7 @@ import com.baomidou.mybatisplus.extension.service.IService; *

* * @author yumi - * @since 2023-11-20 + * @since 2023-11-30 */ public interface PlayerDao extends IService { diff --git a/paradogs-framework/paradogs-framework-common/src/main/java/com/paradogs/framework/common/dao/impl/PlayerDaoImpl.java b/paradogs-framework/paradogs-framework-common/src/main/java/com/paradogs/framework/common/dao/impl/PlayerDaoImpl.java index d7650f9..9399c3b 100644 --- a/paradogs-framework/paradogs-framework-common/src/main/java/com/paradogs/framework/common/dao/impl/PlayerDaoImpl.java +++ b/paradogs-framework/paradogs-framework-common/src/main/java/com/paradogs/framework/common/dao/impl/PlayerDaoImpl.java @@ -12,7 +12,7 @@ import org.springframework.stereotype.Service; *

* * @author yumi - * @since 2023-11-20 + * @since 2023-11-30 */ @Service public class PlayerDaoImpl extends ServiceImpl implements PlayerDao { diff --git a/paradogs-framework/paradogs-framework-common/src/main/java/com/paradogs/framework/common/entity/Player.java b/paradogs-framework/paradogs-framework-common/src/main/java/com/paradogs/framework/common/entity/Player.java index d3a3d31..279c75b 100644 --- a/paradogs-framework/paradogs-framework-common/src/main/java/com/paradogs/framework/common/entity/Player.java +++ b/paradogs-framework/paradogs-framework-common/src/main/java/com/paradogs/framework/common/entity/Player.java @@ -1,12 +1,12 @@ package com.paradogs.framework.common.entity; +import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; - import com.paradogs.framework.common.entity.base.BaseEntity; -import lombok.AllArgsConstructor; +import java.io.Serializable; import lombok.Getter; -import lombok.NoArgsConstructor; import lombok.Setter; /** @@ -15,12 +15,10 @@ import lombok.Setter; *

* * @author yumi - * @since 2023-11-20 + * @since 2023-11-30 */ @Getter @Setter -@AllArgsConstructor -@NoArgsConstructor @TableName("g_player") public class Player extends BaseEntity { diff --git a/paradogs-framework/paradogs-framework-common/src/main/java/com/paradogs/framework/common/entity/base/BaseEntity.java b/paradogs-framework/paradogs-framework-common/src/main/java/com/paradogs/framework/common/entity/base/BaseEntity.java index 58ba82d..bf7581d 100644 --- a/paradogs-framework/paradogs-framework-common/src/main/java/com/paradogs/framework/common/entity/base/BaseEntity.java +++ b/paradogs-framework/paradogs-framework-common/src/main/java/com/paradogs/framework/common/entity/base/BaseEntity.java @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import lombok.Data; +import lombok.EqualsAndHashCode; import java.io.Serializable; import java.time.LocalDateTime; @@ -14,6 +15,7 @@ import java.time.LocalDateTime; * @date: 2023/11/20 11:01 * @Description: TODO */ +@EqualsAndHashCode @Data public class BaseEntity implements Serializable { diff --git a/paradogs-framework/paradogs-framework-common/src/main/resources/mapper/PlayerMapper.xml b/paradogs-framework/paradogs-framework-common/src/main/resources/mapper/PlayerMapper.xml deleted file mode 100644 index 2378f5d..0000000 --- a/paradogs-framework/paradogs-framework-common/src/main/resources/mapper/PlayerMapper.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/msg/MsgHeader.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/msg/MsgHeader.java index f215ee7..7c485d8 100644 --- a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/msg/MsgHeader.java +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/msg/MsgHeader.java @@ -56,6 +56,12 @@ public class MsgHeader implements IMsgSerializable { @Protobuf(fieldType = FieldType.INT64, order = 4, required = false) private Long replyMsgId; + /** + * 玩家 ID + */ + @Protobuf(fieldType = FieldType.INT64, order = 5, required = false) + private Long pId; + // /** // * 消息生成的时间戳 // */ @@ -66,11 +72,6 @@ public class MsgHeader implements IMsgSerializable { * >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 额外 Props */ - /** - * 玩家 ID - */ - private Long pId; - /** * 创建时间 */ diff --git a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/msg/PRMsgContextHolder.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/msg/PRMsgContextHolder.java index 5990035..71a1bbe 100644 --- a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/msg/PRMsgContextHolder.java +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/msg/PRMsgContextHolder.java @@ -18,18 +18,23 @@ public class PRMsgContextHolder { @Getter private static Long playerId; + @Getter + private static MsgHeader header; + @Getter private static Channel channel; - public static void setContext(ChannelHandlerContext ctx, Long playerId) { + public static void setContext(ChannelHandlerContext ctx, Long playerId, MsgHeader header) { PRMsgContextHolder.ctx = ctx; PRMsgContextHolder.playerId = playerId; + PRMsgContextHolder.header = header; } public static void setContext(Snapshot snapshot) { PRMsgContextHolder.ctx = snapshot.ctx; PRMsgContextHolder.playerId = snapshot.playId; + PRMsgContextHolder.header = snapshot.header; } @@ -37,7 +42,7 @@ public class PRMsgContextHolder { * 返回当前上下文快照 */ public static PRMsgContextHolder.Snapshot getSnapshot() { - return new PRMsgContextHolder.Snapshot(PRMsgContextHolder.ctx, playerId); + return new PRMsgContextHolder.Snapshot(ctx, playerId, header); } public static Channel getChannel() { @@ -56,6 +61,7 @@ public class PRMsgContextHolder { public static class Snapshot { private ChannelHandlerContext ctx; private Long playId; + private MsgHeader header; } } diff --git a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/msg/R.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/msg/R.java new file mode 100644 index 0000000..15935a2 --- /dev/null +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/msg/R.java @@ -0,0 +1,44 @@ +package com.paradogs.framework.core.msg; + +import com.baidu.bjf.remoting.protobuf.annotation.ProtobufClass; +import com.paradogs.framework.common.entity.Inventory; +import com.paradogs.framework.common.entity.Role; +import com.paradogs.framework.core.utils.ProtoUtils; +import lombok.Data; +import lombok.ToString; + +/** + * @author: yumi + * @date: 2023/11/30 16:46 + * @Description: SyncData 客户端统一返回 + */ +@Data +@ProtobufClass +public class R { + + private Long playerId; + + /** + * 回复数据 + */ + private byte[] replyData; + + /** + * 数据变化时的同步数据 + */ + private Role role; + + private Inventory inventory; + + + public R() {} + public R(byte[] data) { + this.replyData = data; + } + + + public static R success(T data) { + return new R(ProtoUtils.encode(data)); + } + +} diff --git a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/netty/PRAbMsgHandler.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/netty/PRAbMsgHandler.java index 6571216..246ba76 100644 --- a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/netty/PRAbMsgHandler.java +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/netty/PRAbMsgHandler.java @@ -35,7 +35,7 @@ public abstract class PRAbMsgHandler extends SimpleChannelInboundHandler { * @param msg */ protected void setContext(ChannelHandlerContext ctx, ByteData msg) { - PRMsgContextHolder.setContext(ctx, msg.getMsgHeader().getPId()); + PRMsgContextHolder.setContext(ctx, msg.getMsgHeader().getPId(), msg.getMsgHeader()); } /** diff --git a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/netty/server/PRConnection.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/netty/server/PRConnection.java index 804f96b..fe737a1 100644 --- a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/netty/server/PRConnection.java +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/netty/server/PRConnection.java @@ -17,12 +17,6 @@ import java.time.LocalDateTime; @NoArgsConstructor public class PRConnection { - public PRConnection(Channel channel, ServerProperties properties) { - this.channel = channel; - this.type = properties.getType(); - this.properties = properties; - } - /** * player、gate、master、login、... */ @@ -32,6 +26,12 @@ public class PRConnection { private ServerProperties properties; + public PRConnection(Channel channel, ServerProperties properties) { + this.channel = channel; + this.type = properties.getType(); + this.properties = properties; + } + public boolean isInit() { return properties != null; } diff --git a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/queue/PRQueueHolder.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/queue/PRQueueHolder.java index bf36baa..d0f4670 100644 --- a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/queue/PRQueueHolder.java +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/queue/PRQueueHolder.java @@ -50,7 +50,11 @@ public class PRQueueHolder implements ApplicationRunner { queueConsumer.setLoop(true); } queueConsumer.setKey(type.key + "-" + (i + 1)); - queueConsumer.start(); + try { + queueConsumer.start(); + } catch (IllegalThreadStateException e) { + throw new RuntimeException("Consumer[" + queueConsumer.getClass().getName() + "] is singleton, please use @Scope(\"prototype\")"); + } if (!consumerMap.containsKey(type)) { consumerMap.put(type, new ArrayList<>()); } diff --git a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/queue/QueueConsumerThread.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/queue/QueueConsumerThread.java index 09ca20f..3248d23 100644 --- a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/queue/QueueConsumerThread.java +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/queue/QueueConsumerThread.java @@ -53,6 +53,11 @@ public abstract class QueueConsumerThread extends Thread { @Setter private boolean isLoop = false; + /** + * 线程是否正在运行,用于单例防错 + */ + private boolean isRunning = false; + /** * 全局异常处理转发器 */ @@ -82,14 +87,17 @@ public abstract class QueueConsumerThread extends Thread { while (true) { + /** + * 循环检测事件 + */ if (isLoop) { - // 循环检测事件 loop(); } + /** + * 处理消息,消息队列为空时,等待一段时间再处理,如果有消息则处理完直接找下一个 + */ T msg = queue.poll(); - - // 消息队列为空时,等待一段时间再处理,如果有消息则处理完直接找下一个 if (msg == null) { try { Thread.sleep(100); @@ -105,7 +113,7 @@ public abstract class QueueConsumerThread extends Thread { try { handle(msg); } catch (Exception e) { - // 转发到全局异常处理 + // 出现异常时,转发到全局异常处理 globalExceptionDispatch.forward(e); } diff --git a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/utils/MsgUtils.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/utils/MsgUtils.java index f23cf76..8f5cbd5 100644 --- a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/utils/MsgUtils.java +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/utils/MsgUtils.java @@ -173,7 +173,7 @@ public class MsgUtils { * @param data 数据 * @param replyId 回复的消息 ID */ - protected static void reply(String server, T data, Long replyId, Channel channel) { + public static void reply(String server, T data, Long replyId, Channel channel) { // 返回消息 MsgHeader header = new MsgHeader(); header.setRoute(server + RouteUtils.SERVER_SEPARATOR + "_paradogs.callback"); @@ -200,17 +200,17 @@ public class MsgUtils { /** * Gate 服转发消息: 特殊处理,直接发送到对应服 */ - public static void gateRequest(String route, T data, Class returnClass, CompletableFuture promise) { - PRMsg msg = new PRMsg(route, data); - String server = RouteUtils.getServer(route); + public static void gateRequest(MsgHeader header, T data, Class returnClass, CompletableFuture promise) { + PRMsg msg = new PRMsg(header, data); + String server = RouteUtils.getServer(header.getRoute()); PRConnection conn = PRConnHolder.getConn(server); if (conn == null) { throw new MessageException("Not Found Connection, server: " + server); } // 开启响应监听 - EventUtils.on4Once(route, msg.getMsgHeader().getId(), returnClass, promise); + EventUtils.on4Once(header.getRoute(), msg.getMsgHeader().getId(), returnClass, promise); conn.getChannel().writeAndFlush(msg); - log.debug("[request] >>>>> {}, {}", route, msg); + log.debug("[request] >>>>> {}, {}", header.getRoute(), msg); } protected static Channel getChannel(String server) { diff --git a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/utils/ReflectUtils.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/utils/ReflectUtils.java index c2190e7..b28c2ac 100644 --- a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/utils/ReflectUtils.java +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/utils/ReflectUtils.java @@ -1,5 +1,7 @@ package com.paradogs.framework.core.utils; +import lombok.extern.slf4j.Slf4j; + import java.lang.reflect.Method; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; @@ -9,6 +11,7 @@ import java.lang.reflect.Type; * @date: 2023/9/23 9:57 * @Description: 反射工具类 */ +@Slf4j public class ReflectUtils { /** @@ -32,4 +35,30 @@ public class ReflectUtils { return null; } + /** + * 调用 setter 方法 + * @param obj + * @param fieldName + * @param value + */ + public static void callSetter(Object obj, String fieldName, Object value) { + try { + String methodName = "set" + Character.toUpperCase(fieldName.charAt(0)) + fieldName.substring(1); + Method method = findMethod(obj.getClass(), methodName, value.getClass()); + if (method != null) { + method.invoke(obj, value); + } + } catch (Exception e) { + // 处理异常 + log.error("setter error, field: {}, value: {}, {}", fieldName, value, e.getMessage(), e); + } + } + private static Method findMethod(Class clazz, String methodName, Class parameterType) { + try { + return clazz.getMethod(methodName, parameterType); + } catch (NoSuchMethodException e) { + return null; + } + } + } diff --git a/paradogs-framework/paradogs-framework-gate-starter/src/main/java/com/paradogs/framework/gate/GateChannelHolder.java b/paradogs-framework/paradogs-framework-gate-starter/src/main/java/com/paradogs/framework/gate/GateChannelHolder.java new file mode 100644 index 0000000..59dcf2f --- /dev/null +++ b/paradogs-framework/paradogs-framework-gate-starter/src/main/java/com/paradogs/framework/gate/GateChannelHolder.java @@ -0,0 +1,73 @@ +package com.paradogs.framework.gate; + +import io.netty.channel.Channel; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.HashMap; +import java.util.Map; + +/** + * @author: yumi + * @date: 2023/12/1 11:27 + * @Description: 玩家连接管理 + */ +public class GateChannelHolder { + + /** + * map[channel] = session + */ + private static Map channelMap = new HashMap<>(); + /** + * map[playerId] = channel + */ + private static Map playerMap = new HashMap<>(); + + + public static void init(Channel channel) { + channelMap.put(channel, null); + } + public static void remove(Channel channel) { + Session session = channelMap.remove(channel); + if (session != null && session.getPlayerId() != null) { + playerMap.remove(session.getPlayerId()); + } + } + + /** + * 获得 Channel 对应数据 + * @param channel + * @return + */ + public static Session getSession(Channel channel) { + return channelMap.get(channel); + } + + /** + * 绑定 Channel 数据 + * @param channel + * @param session + */ + public static void bindSession(Channel channel, Session session) { + channelMap.put(channel, session); + playerMap.put(session.getPlayerId(), channel); + } + + /** + * 获取玩家 ID 的 Channel + * @param playerId + * @return + */ + public static Channel getPlayerChannel(Long playerId) { + return playerMap.get(playerId); + } + + @Data + @AllArgsConstructor + @NoArgsConstructor + public static class Session { + private Long playerId; + } + +} diff --git a/paradogs-framework/paradogs-framework-gate-starter/src/main/java/com/paradogs/framework/gate/PRGateServerMsgHandler.java b/paradogs-framework/paradogs-framework-gate-starter/src/main/java/com/paradogs/framework/gate/PRGateServerMsgHandler.java index cc2b042..67edf14 100644 --- a/paradogs-framework/paradogs-framework-gate-starter/src/main/java/com/paradogs/framework/gate/PRGateServerMsgHandler.java +++ b/paradogs-framework/paradogs-framework-gate-starter/src/main/java/com/paradogs/framework/gate/PRGateServerMsgHandler.java @@ -36,6 +36,10 @@ public class PRGateServerMsgHandler extends PRAbServerMsgHandler { @Override protected void setProps(ChannelHandlerContext ctx, ByteData msg) { super.setProps(ctx, msg); + GateChannelHolder.Session session = GateChannelHolder.getSession(ctx.channel()); + if (session != null) { + msg.getMsgHeader().setPId(session.getPlayerId()); + } if (StringUtils.isBlank(msg.getMsgHeader().getSendServer())) { msg.getMsgHeader().setSendServer("gate"); } @@ -56,9 +60,11 @@ public class PRGateServerMsgHandler extends PRAbServerMsgHandler { // 待优化:如果 logic 方法没有返回值,这里会无限等待,内存溢出 CompletableFuture promise = new CompletableFuture<>(); promise.thenAccept(data -> { + // 回复客户端 MsgUtils.send("player", data, PRMsgContextHolder.getChannel()); }); - MsgUtils.gateRequest(msg.getMsgHeader().getRoute(), msg.getDataBytes(), byte[].class, promise); + // 转发到对应服务器 + MsgUtils.gateRequest(msg.getMsgHeader(), msg.getDataBytes(), byte[].class, promise); } /** @@ -69,6 +75,7 @@ public class PRGateServerMsgHandler extends PRAbServerMsgHandler { @Override public void channelActive(ChannelHandlerContext ctx) throws Exception { super.channelActive(ctx); + GateChannelHolder.init(ctx.channel()); EventUtils.publishEvent(new PlayerClientActiveEvent(ctx)); log.info("PlayerClient connect: {}", IPUtils.getAddr(ctx.channel())); } @@ -81,6 +88,7 @@ public class PRGateServerMsgHandler extends PRAbServerMsgHandler { @Override public void channelInactive(ChannelHandlerContext ctx) throws Exception { super.channelInactive(ctx); + GateChannelHolder.remove(ctx.channel()); EventUtils.publishEvent(new PlayerClientInactiveEvent(ctx)); log.info("PlayerClient disconnect: {}", IPUtils.getAddr(ctx.channel())); } diff --git a/paradogs-framework/paradogs-framework-gate-starter/src/main/resources/config/application.yml b/paradogs-framework/paradogs-framework-gate-starter/src/main/resources/config/application.yml index cfc460e..0207945 100644 --- a/paradogs-framework/paradogs-framework-gate-starter/src/main/resources/config/application.yml +++ b/paradogs-framework/paradogs-framework-gate-starter/src/main/resources/config/application.yml @@ -1,6 +1,3 @@ paradogs: queue: - enable: false - main-size: 1 - db-size: 1 - + main-size: 1 \ No newline at end of file diff --git a/paradogs-framework/paradogs-framework-master-starter/src/main/java/com/paradogs/framework/master/netty/MasterMsgHandler.java b/paradogs-framework/paradogs-framework-master-starter/src/main/java/com/paradogs/framework/master/netty/MasterMsgHandler.java index 034a857..f187f88 100644 --- a/paradogs-framework/paradogs-framework-master-starter/src/main/java/com/paradogs/framework/master/netty/MasterMsgHandler.java +++ b/paradogs-framework/paradogs-framework-master-starter/src/main/java/com/paradogs/framework/master/netty/MasterMsgHandler.java @@ -61,7 +61,7 @@ public class MasterMsgHandler extends PRAbServerMsgHandler { public void channelInactive(ChannelHandlerContext ctx) throws Exception { super.channelInactive(ctx); PRConnection conn = PRConnHolder.removeConn(ctx.channel()); - log.info("Client disconnect: {}", conn); + EventUtils.publishEvent(new ServerClientInactiveEvent(ctx)); } } diff --git a/paradogs-framework/paradogs-framework-server-starter/src/main/java/com/paradogs/framework/server/ServerMsgConsumer.java b/paradogs-framework/paradogs-framework-server-starter/src/main/java/com/paradogs/framework/server/ServerMsgConsumer.java index 15f94e1..c60be83 100644 --- a/paradogs-framework/paradogs-framework-server-starter/src/main/java/com/paradogs/framework/server/ServerMsgConsumer.java +++ b/paradogs-framework/paradogs-framework-server-starter/src/main/java/com/paradogs/framework/server/ServerMsgConsumer.java @@ -6,7 +6,9 @@ import com.paradogs.framework.core.queue.AbstractMsgConsumer; import com.paradogs.framework.core.utils.MsgUtils; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.context.annotation.Primary; +import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; import java.lang.reflect.InvocationTargetException; @@ -17,8 +19,10 @@ import java.lang.reflect.InvocationTargetException; * @Description: TODO */ @Slf4j +@Scope("prototype") @Primary @Component +@ConditionalOnMissingBean(ServerMsgConsumer.class) public class ServerMsgConsumer extends AbstractMsgConsumer { diff --git a/paradogs-framework/paradogs-framework-server-starter/src/main/resources/config/application.yml b/paradogs-framework/paradogs-framework-server-starter/src/main/resources/config/application.yml index e69de29..14eb188 100644 --- a/paradogs-framework/paradogs-framework-server-starter/src/main/resources/config/application.yml +++ b/paradogs-framework/paradogs-framework-server-starter/src/main/resources/config/application.yml @@ -0,0 +1,3 @@ +paradogs: + queue: + main-size: 3 \ No newline at end of file diff --git a/paradogs-framework/pom.xml b/paradogs-framework/pom.xml index cefa030..4aa83d3 100644 --- a/paradogs-framework/pom.xml +++ b/paradogs-framework/pom.xml @@ -11,11 +11,11 @@ paradogs-framework pom + paradogs-framework-common paradogs-framework-core paradogs-framework-gate-starter paradogs-framework-server-starter paradogs-framework-master-starter - paradogs-framework-common \ No newline at end of file diff --git a/paradogs-generator/src/main/java/com/paradogs/generator/DBEntityGenerator.java b/paradogs-generator/src/main/java/com/paradogs/generator/DBEntityGenerator.java index c1cde16..2b87b3d 100644 --- a/paradogs-generator/src/main/java/com/paradogs/generator/DBEntityGenerator.java +++ b/paradogs-generator/src/main/java/com/paradogs/generator/DBEntityGenerator.java @@ -11,7 +11,7 @@ import java.util.Collections; /** * @author: yumi * @date: 2023/11/14 10:00 - * @Description: TODO + * @Description: 待优化,代码生成等项目完善之后再做 !!! */ public class DBEntityGenerator { public static void main(String[] args) { @@ -22,8 +22,7 @@ public class DBEntityGenerator { .globalConfig(builder -> { builder.author("yumi") // 设置作者 .commentDate("yyyy-MM-dd") - .outputDir(System.getProperty("user.dir") + "/paradogs-framework/paradogs-framework-common/src/main/java") // 设置输出目录为项目的src/main/java目录 - .fileOverride(); // 覆盖已生成文件 + .outputDir(System.getProperty("user.dir") + "/paradogs-framework/paradogs-framework-common/src/main/java"); // 设置输出目录为项目的src/main/java目录 }) .packageConfig(builder -> { builder.parent("com.paradogs.framework.common") // 设置父包名 @@ -36,12 +35,16 @@ public class DBEntityGenerator { builder // .addInclude("table_name") // 设置需要生成的表名,如果要生成所有表,可以省略此行 .addTablePrefix("g_") + .entityBuilder() + .enableFileOverride() // // 覆盖已生成文件 .enableLombok() .superClass(BaseEntity.class) .enableTableFieldAnnotation() // 增加 @TableField .idType(IdType.AUTO) + .serviceBuilder() + .enableFileOverride() // // 覆盖已生成文件 .formatServiceFileName("%sDao") // 去掉 'I' 前缀,Service 改为 Dao 名称 .formatServiceImplFileName("%sDaoImpl") .build(); @@ -50,6 +53,7 @@ public class DBEntityGenerator { builder // .disable(TemplateType.SERVICE) // 禁用 Service 生成 // .disable(TemplateType.SERVICE_IMPL) // 禁用 ServiceImpl 生成 + .disable(TemplateType.MAPPER) .disable(TemplateType.CONTROLLER); // 禁用 Controller 生成 }) diff --git a/paradogs-generator/src/main/java/com/paradogs/generator/ProtobufIDLGenerator.java b/paradogs-generator/src/main/java/com/paradogs/generator/ProtobufIDLGenerator.java index f0b9243..fe2cd61 100644 --- a/paradogs-generator/src/main/java/com/paradogs/generator/ProtobufIDLGenerator.java +++ b/paradogs-generator/src/main/java/com/paradogs/generator/ProtobufIDLGenerator.java @@ -15,7 +15,7 @@ import java.nio.file.Paths; public class ProtobufIDLGenerator { public static void main(String[] args) { SpringApplication.run(ProtobufIDLGenerator.class, args); - String outDir = Paths.get(System.getProperty("user.dir"), "proto").toString(); + String outDir = Paths.get(System.getProperty("user.dir"), "mybatis-plus").toString(); String[] scanPackages = new String[]{"com.paradogs.framework.core"}; GeneratorUtils.generatorIDL(outDir, scanPackages); } diff --git a/paradogs-generator/src/main/resources/mybatis-plus/entity.ftl b/paradogs-generator/src/main/resources/mybatis-plus/entity.ftl new file mode 100644 index 0000000..c5cf02c --- /dev/null +++ b/paradogs-generator/src/main/resources/mybatis-plus/entity.ftl @@ -0,0 +1,20 @@ +package ${package.Entity}; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import ${package.Entity.base}.BaseEntity; +import lombok.*; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@ToString(callSuper = true) +@EqualsAndHashCode(callSuper = true) +@TableName("${tableName}") +public class ${entity} extends BaseEntity { + +<#list fields as field> + @TableField("${field.name}") + private ${field.type} ${field.property}; + +} \ No newline at end of file -- Gitee From e1ba36b2763b4eb0eaa504ff230efd23d956423c Mon Sep 17 00:00:00 2001 From: "410408824@qq.com" <410408824@qq.com> Date: Wed, 6 Dec 2023 15:12:45 +0800 Subject: [PATCH 3/7] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E8=A1=A8=E5=AE=9E=E4=BD=93=E7=B1=BB=E4=BB=A3=E7=A0=81=E7=94=9F?= =?UTF-8?q?=E6=88=90=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../demo/client/DemoClientApplication.java | 11 +- .../demo/gate/controller/GateController.java | 13 +- .../demo/logic/misc/LogicMsgConsumer.java | 50 +++--- .../paradogs/demo/logic/misc/SyncAspect.java | 1 - .../login/controller/LoginController.java | 4 +- .../paradogs-framework-common/pom.xml | 4 + .../framework/common/dao/InventoryDao.java | 16 ++ .../framework/common/dao/RoleDao.java | 16 ++ .../common/dao/impl/InventoryDaoImpl.java | 20 +++ .../common/dao/impl/RoleDaoImpl.java | 20 +++ .../framework/common/data/RoleLevel.java | 107 +++++++++++++ .../framework/common/entity/Inventory.java | 38 +++++ .../framework/common/entity/Player.java | 2 - .../framework/common/entity/Role.java | 47 ++++++ .../common/entity/base/BaseEntity.java | 3 + .../common/mapper/InventoryMapper.java | 16 ++ .../framework/common/mapper/RoleMapper.java | 16 ++ .../{CGGatewayLogin.java => CGGateLogin.java} | 2 +- .../framework/common/utils/ExcelUtils.java | 105 +++++++++++++ ...345\256\266\347\255\211\347\272\247).xlsx" | Bin 0 -> 9864 bytes .../core/annoations/EnableParadogs.java | 3 +- .../core/annoations/request/PRMsgMapping.java | 4 + .../core/config/DataConfiguration.java | 14 ++ .../core/config/MybatisPlusConfiguration.java | 3 +- .../framework/core/msg/MsgHeader.java | 9 +- .../framework/core/netty/PRCodec.java | 5 + .../framework/core/utils/MsgUtils.java | 4 +- .../gate/PRGateServerMsgHandler.java | 2 +- paradogs-generator/pom.xml | 4 + .../paradogs/generator/DBEntityGenerator.java | 2 +- .../generator/ExcelDataGenerator.java | 146 ++++++++++++++++++ .../generator/ProtobufIDLGenerator.java | 6 +- .../misc/ExcelDataGeneratorListener.java | 63 ++++++++ .../generator/utils/GeneratorUtils.java | 6 + .../src/main/resources/ftls/data.ftl | 97 ++++++++++++ .../{mybatis-plus => ftls}/entity.ftl | 0 pom.xml | 6 + proto/BaseMsg_CmdVersion.proto | 12 -- proto/Connection.proto | 19 --- proto/MsgHeader.proto | 9 -- proto/Player.proto | 9 -- proto/R.proto | 10 -- proto/ServerProperties.proto | 9 -- 43 files changed, 801 insertions(+), 132 deletions(-) create mode 100644 paradogs-framework/paradogs-framework-common/src/main/java/com/paradogs/framework/common/dao/InventoryDao.java create mode 100644 paradogs-framework/paradogs-framework-common/src/main/java/com/paradogs/framework/common/dao/RoleDao.java create mode 100644 paradogs-framework/paradogs-framework-common/src/main/java/com/paradogs/framework/common/dao/impl/InventoryDaoImpl.java create mode 100644 paradogs-framework/paradogs-framework-common/src/main/java/com/paradogs/framework/common/dao/impl/RoleDaoImpl.java create mode 100644 paradogs-framework/paradogs-framework-common/src/main/java/com/paradogs/framework/common/data/RoleLevel.java create mode 100644 paradogs-framework/paradogs-framework-common/src/main/java/com/paradogs/framework/common/entity/Inventory.java create mode 100644 paradogs-framework/paradogs-framework-common/src/main/java/com/paradogs/framework/common/entity/Role.java create mode 100644 paradogs-framework/paradogs-framework-common/src/main/java/com/paradogs/framework/common/mapper/InventoryMapper.java create mode 100644 paradogs-framework/paradogs-framework-common/src/main/java/com/paradogs/framework/common/mapper/RoleMapper.java rename paradogs-framework/paradogs-framework-common/src/main/java/com/paradogs/framework/common/pojo/cg/{CGGatewayLogin.java => CGGateLogin.java} (93%) create mode 100644 paradogs-framework/paradogs-framework-common/src/main/java/com/paradogs/framework/common/utils/ExcelUtils.java create mode 100644 "paradogs-framework/paradogs-framework-common/src/main/resources/data/roleLevel(\347\216\251\345\256\266\347\255\211\347\272\247).xlsx" create mode 100644 paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/config/DataConfiguration.java create mode 100644 paradogs-generator/src/main/java/com/paradogs/generator/ExcelDataGenerator.java create mode 100644 paradogs-generator/src/main/java/com/paradogs/generator/misc/ExcelDataGeneratorListener.java create mode 100644 paradogs-generator/src/main/resources/ftls/data.ftl rename paradogs-generator/src/main/resources/{mybatis-plus => ftls}/entity.ftl (100%) delete mode 100644 proto/BaseMsg_CmdVersion.proto delete mode 100644 proto/Connection.proto delete mode 100644 proto/MsgHeader.proto delete mode 100644 proto/Player.proto delete mode 100644 proto/R.proto delete mode 100644 proto/ServerProperties.proto diff --git a/paradogs-demo/paradogs-demo-client/src/main/java/com/paradogs/demo/client/DemoClientApplication.java b/paradogs-demo/paradogs-demo-client/src/main/java/com/paradogs/demo/client/DemoClientApplication.java index 37f7096..deaaa13 100644 --- a/paradogs-demo/paradogs-demo-client/src/main/java/com/paradogs/demo/client/DemoClientApplication.java +++ b/paradogs-demo/paradogs-demo-client/src/main/java/com/paradogs/demo/client/DemoClientApplication.java @@ -2,8 +2,7 @@ package com.paradogs.demo.client; import com.paradogs.demo.client.demo.Client; import com.paradogs.demo.client.pojo.CGLogin; -import com.paradogs.framework.common.pojo.cg.CGGatewayLogin; -import com.paradogs.framework.common.pojo.gc.GCAllocGateway; +import com.paradogs.framework.common.pojo.cg.CGGateLogin; import com.paradogs.framework.common.pojo.gc.GCApplyGate; import com.paradogs.framework.core.msg.ByteData; import com.paradogs.framework.core.msg.R; @@ -91,7 +90,7 @@ public class DemoClientApplication { }); Channel gateChannel = client.connect(result.getHost(), result.getPort()).sync().channel(); log.info("Connect Gate success"); - Client.send(gateChannel, "gate|login", new CGGatewayLogin(result.getToken())); + Client.send(gateChannel, "gate|login", new CGGateLogin(result.getToken())); Thread.sleep(1000); new Thread(new Runnable() { @@ -99,8 +98,8 @@ public class DemoClientApplication { @Override public void run() { while (true) { - Client.send(gateChannel, "logic|misc.updateData", new CGGatewayLogin("123")); - Thread.sleep(1000); + Client.send(gateChannel, "logic|misc.updateData", new CGGateLogin("123")); + Thread.sleep(199999000); } } }).start(); @@ -112,6 +111,6 @@ public class DemoClientApplication { Channel channel = client.connect("localhost", 80).sync().channel(); - Client.send(channel, "login|applyGate", new CGLogin("yumi", "123")); + Client.send(channel, "login|login", new CGLogin("yumi", "123")); } } diff --git a/paradogs-demo/paradogs-demo-gate/src/main/java/com/paradogs/demo/gate/controller/GateController.java b/paradogs-demo/paradogs-demo-gate/src/main/java/com/paradogs/demo/gate/controller/GateController.java index 99048fc..f9b81fe 100644 --- a/paradogs-demo/paradogs-demo-gate/src/main/java/com/paradogs/demo/gate/controller/GateController.java +++ b/paradogs-demo/paradogs-demo-gate/src/main/java/com/paradogs/demo/gate/controller/GateController.java @@ -2,7 +2,7 @@ package com.paradogs.demo.gate.controller; import com.paradogs.demo.gate.misc.PlayerOnlineHolder; import com.paradogs.demo.gate.rpc.LogicClient; -import com.paradogs.framework.common.pojo.cg.CGGatewayLogin; +import com.paradogs.framework.common.pojo.cg.CGGateLogin; import com.paradogs.framework.common.pojo.cg.CGPrepareLogin; import com.paradogs.framework.common.pojo.misc.LongWrapper; import com.paradogs.framework.core.annoations.request.PRController; @@ -10,18 +10,11 @@ import com.paradogs.framework.core.annoations.request.PRMsgMapping; import com.paradogs.framework.core.msg.GCAck; import com.paradogs.framework.core.msg.PRMsgContextHolder; import com.paradogs.framework.core.msg.R; -import com.paradogs.framework.core.netty.PRConnHolder; import com.paradogs.framework.core.utils.MsgUtils; -import com.paradogs.framework.core.utils.PRAsync; import com.paradogs.framework.gate.GateChannelHolder; import io.netty.channel.Channel; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.scheduling.annotation.Async; - -import java.util.HashMap; -import java.util.Map; -import java.util.concurrent.CompletableFuture; /** * @author: yumi @@ -54,7 +47,7 @@ public class GateController { * @return */ @PRMsgMapping(value = "login", async = true) - public GCAck login(CGGatewayLogin msg) { + public GCAck login(CGGateLogin msg) { PlayerOnlineHolder.WillLoginInfo info = playerOnlineHolder.get(msg.getToken()); if (info != null) { logicClient.loadPlayer(new LongWrapper(info.getUid())); @@ -67,7 +60,7 @@ public class GateController { } /** - * 向玩家同步玩家自身数据 + * 同步玩家自身数据 */ @PRMsgMapping("syncData") public void syncData(R syncData) { diff --git a/paradogs-demo/paradogs-demo-logic/src/main/java/com/paradogs/demo/logic/misc/LogicMsgConsumer.java b/paradogs-demo/paradogs-demo-logic/src/main/java/com/paradogs/demo/logic/misc/LogicMsgConsumer.java index fe32e7b..7e66821 100644 --- a/paradogs-demo/paradogs-demo-logic/src/main/java/com/paradogs/demo/logic/misc/LogicMsgConsumer.java +++ b/paradogs-demo/paradogs-demo-logic/src/main/java/com/paradogs/demo/logic/misc/LogicMsgConsumer.java @@ -1,25 +1,25 @@ -package com.paradogs.demo.logic.misc; - -import com.paradogs.framework.core.msg.ByteData; -import com.paradogs.framework.server.ServerMsgConsumer; -import lombok.extern.slf4j.Slf4j; -import org.springframework.context.annotation.Scope; -import org.springframework.stereotype.Component; - -import java.lang.reflect.InvocationTargetException; - -/** - * @author: yumi - * @date: 2023/12/1 17:18 - * @Description: TODO - */ -@Slf4j -@Scope("prototype") -@Component -public class LogicMsgConsumer extends ServerMsgConsumer { - - @Override - public void handle(ByteData byteData) throws InvocationTargetException, IllegalAccessException { - log.info("-------------------------------------"); - } -} +//package com.paradogs.demo.logic.misc; +// +//import com.paradogs.framework.core.msg.ByteData; +//import com.paradogs.framework.server.ServerMsgConsumer; +//import lombok.extern.slf4j.Slf4j; +//import org.springframework.context.annotation.Scope; +//import org.springframework.stereotype.Component; +// +//import java.lang.reflect.InvocationTargetException; +// +///** +// * @author: yumi +// * @date: 2023/12/1 17:18 +// * @Description: TODO +// */ +//@Slf4j +//@Scope("prototype") +//@Component +//public class LogicMsgConsumer extends ServerMsgConsumer { +// +// @Override +// public void handle(ByteData byteData) throws InvocationTargetException, IllegalAccessException { +// log.info("-------------------------------------"); +// } +//} diff --git a/paradogs-demo/paradogs-demo-logic/src/main/java/com/paradogs/demo/logic/misc/SyncAspect.java b/paradogs-demo/paradogs-demo-logic/src/main/java/com/paradogs/demo/logic/misc/SyncAspect.java index 7b720e0..f29c2fa 100644 --- a/paradogs-demo/paradogs-demo-logic/src/main/java/com/paradogs/demo/logic/misc/SyncAspect.java +++ b/paradogs-demo/paradogs-demo-logic/src/main/java/com/paradogs/demo/logic/misc/SyncAspect.java @@ -51,7 +51,6 @@ public class SyncAspect { R syncData = R.success(result); boolean needSync = false; for (BaseManager manager : template.getManagers()) { - log.info(manager.getData().getClass().getSimpleName()); if (manager.isDirty()) { ReflectUtils.callSetter(syncData, manager.getData().getClass().getSimpleName(), manager.getData()); needSync = true; diff --git a/paradogs-demo/paradogs-demo-login/src/main/java/com/paradogs/demo/login/controller/LoginController.java b/paradogs-demo/paradogs-demo-login/src/main/java/com/paradogs/demo/login/controller/LoginController.java index 7536324..72b0b7b 100644 --- a/paradogs-demo/paradogs-demo-login/src/main/java/com/paradogs/demo/login/controller/LoginController.java +++ b/paradogs-demo/paradogs-demo-login/src/main/java/com/paradogs/demo/login/controller/LoginController.java @@ -38,8 +38,8 @@ public class LoginController { @Autowired private PlayerDao playerDao; - @PRMsgMapping(value = "applyGate", async = true) - public GCApplyGate applyGate(CGLogin dto) { + @PRMsgMapping(value = "login", async = true) + public GCApplyGate login(CGLogin dto) { Player player = playerDao.getOne(Wrap.lbq() .eq(Player::getAccount, dto.getAccount()) .eq(Player::getPwd, dto.getPassword())); diff --git a/paradogs-framework/paradogs-framework-common/pom.xml b/paradogs-framework/paradogs-framework-common/pom.xml index 1732bc1..3a1ba23 100644 --- a/paradogs-framework/paradogs-framework-common/pom.xml +++ b/paradogs-framework/paradogs-framework-common/pom.xml @@ -33,6 +33,10 @@ io.netty netty-all + + com.alibaba + easyexcel + \ No newline at end of file diff --git a/paradogs-framework/paradogs-framework-common/src/main/java/com/paradogs/framework/common/dao/InventoryDao.java b/paradogs-framework/paradogs-framework-common/src/main/java/com/paradogs/framework/common/dao/InventoryDao.java new file mode 100644 index 0000000..8f292c0 --- /dev/null +++ b/paradogs-framework/paradogs-framework-common/src/main/java/com/paradogs/framework/common/dao/InventoryDao.java @@ -0,0 +1,16 @@ +package com.paradogs.framework.common.dao; + +import com.paradogs.framework.common.entity.Inventory; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 服务类 + *

+ * + * @author yumi + * @since 2023-11-30 + */ +public interface InventoryDao extends IService { + +} diff --git a/paradogs-framework/paradogs-framework-common/src/main/java/com/paradogs/framework/common/dao/RoleDao.java b/paradogs-framework/paradogs-framework-common/src/main/java/com/paradogs/framework/common/dao/RoleDao.java new file mode 100644 index 0000000..c74f16e --- /dev/null +++ b/paradogs-framework/paradogs-framework-common/src/main/java/com/paradogs/framework/common/dao/RoleDao.java @@ -0,0 +1,16 @@ +package com.paradogs.framework.common.dao; + +import com.paradogs.framework.common.entity.Role; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 服务类 + *

+ * + * @author yumi + * @since 2023-11-30 + */ +public interface RoleDao extends IService { + +} diff --git a/paradogs-framework/paradogs-framework-common/src/main/java/com/paradogs/framework/common/dao/impl/InventoryDaoImpl.java b/paradogs-framework/paradogs-framework-common/src/main/java/com/paradogs/framework/common/dao/impl/InventoryDaoImpl.java new file mode 100644 index 0000000..6bc65f8 --- /dev/null +++ b/paradogs-framework/paradogs-framework-common/src/main/java/com/paradogs/framework/common/dao/impl/InventoryDaoImpl.java @@ -0,0 +1,20 @@ +package com.paradogs.framework.common.dao.impl; + +import com.paradogs.framework.common.entity.Inventory; +import com.paradogs.framework.common.mapper.InventoryMapper; +import com.paradogs.framework.common.dao.InventoryDao; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 服务实现类 + *

+ * + * @author yumi + * @since 2023-11-30 + */ +@Service +public class InventoryDaoImpl extends ServiceImpl implements InventoryDao { + +} diff --git a/paradogs-framework/paradogs-framework-common/src/main/java/com/paradogs/framework/common/dao/impl/RoleDaoImpl.java b/paradogs-framework/paradogs-framework-common/src/main/java/com/paradogs/framework/common/dao/impl/RoleDaoImpl.java new file mode 100644 index 0000000..32e1cb6 --- /dev/null +++ b/paradogs-framework/paradogs-framework-common/src/main/java/com/paradogs/framework/common/dao/impl/RoleDaoImpl.java @@ -0,0 +1,20 @@ +package com.paradogs.framework.common.dao.impl; + +import com.paradogs.framework.common.entity.Role; +import com.paradogs.framework.common.mapper.RoleMapper; +import com.paradogs.framework.common.dao.RoleDao; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 服务实现类 + *

+ * + * @author yumi + * @since 2023-11-30 + */ +@Service +public class RoleDaoImpl extends ServiceImpl implements RoleDao { + +} diff --git a/paradogs-framework/paradogs-framework-common/src/main/java/com/paradogs/framework/common/data/RoleLevel.java b/paradogs-framework/paradogs-framework-common/src/main/java/com/paradogs/framework/common/data/RoleLevel.java new file mode 100644 index 0000000..6ac1744 --- /dev/null +++ b/paradogs-framework/paradogs-framework-common/src/main/java/com/paradogs/framework/common/data/RoleLevel.java @@ -0,0 +1,107 @@ +package com.paradogs.framework.common.data; + +import com.paradogs.framework.common.utils.ExcelUtils; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Component; + +import java.io.File; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +/** + * RoleLevel class generated by Freemarker. + * @Description: roleLevel(玩家等级).xlsx + */ +@Slf4j +@Component +public class RoleLevel { + + private final static String fileName = "roleLevel(玩家等级).xlsx"; + + /** + * -1 项 + */ + private final static Config config; + + /** + * 数据 map[id] = data + */ + private final static Map dataMap; + + static { + dataMap = new LinkedHashMap<>(); + Config _config = new Config(); + File file = new File("G:/project/me/git/paradogs/paradogs-framework/paradogs-framework-common/src/main/resources/data/roleLevel(玩家等级).xlsx"); + List