From db07db128c00d0631c3fabdf6b80d916675cf4e2 Mon Sep 17 00:00:00 2001 From: kingston-csj <475139136@qq.com> Date: Wed, 27 Mar 2024 18:18:22 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BF=98=E5=8E=9Fpom=E6=96=87=E4=BB=B6version?= =?UTF-8?q?=E5=8D=A0=E4=BD=8D=E7=AC=A6,codec-struct=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E8=A7=A3=E6=9E=90=E7=88=B6=E7=B1=BB=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 7 +++-- .../jforgame-codec-protobuf/pom.xml | 2 +- .../jforgame-codec-struct/pom.xml | 2 +- .../java/jforgame/codec/struct/Codec.java | 31 +++++++++++-------- .../codec/struct/StructMessageCodec.java | 5 ++- .../src/test/java/PlayerLevelUpMessage.java | 12 +++++++ .../src/test/java/PlayerMessage.java | 12 +++++++ .../src/test/java/TestChildMessage.java | 24 ++++++++++++++ .../main/java/jforgame/commons/TimeUtil.java | 5 +++ .../jforgame/commons/ds/LazyCacheMap.java | 2 +- .../commons/utils/TestLazyCacheMap.java | 9 +++--- .../jforgame-socket-api/pom.xml | 2 +- .../jforgame-socket-mina/pom.xml | 7 ----- .../jforgame-socket-netty/pom.xml | 7 ----- pom.xml | 2 +- 15 files changed, 87 insertions(+), 42 deletions(-) create mode 100644 jforgame-codec-parent/jforgame-codec-struct/src/test/java/PlayerLevelUpMessage.java create mode 100644 jforgame-codec-parent/jforgame-codec-struct/src/test/java/PlayerMessage.java create mode 100644 jforgame-codec-parent/jforgame-codec-struct/src/test/java/TestChildMessage.java diff --git a/README.md b/README.md index 206ea806..15b82408 100644 --- a/README.md +++ b/README.md @@ -71,9 +71,10 @@ 各模块demo教程 --> [wiki](https://github.com/kingston-csj/jforgame/wiki/Examples) - 本栏目详细教程 --> [从零开始搭建游戏服务器框架](https://blog.csdn.net/littleschemer/category_9269220.html) - [漫谈游戏服务器](https://blog.csdn.net/littleschemer/category_12576391.html) - [开房间类网游五子棋代码](https://blog.csdn.net/littleschemer/article/details/137053262) + 本栏目详细教程 --> + [从零开始搭建游戏服务器框架](https://blog.csdn.net/littleschemer/category_9269220.html) + [漫谈游戏服务器](https://blog.csdn.net/littleschemer/category_12576391.html) + [开房间类网游五子棋代码](https://blog.csdn.net/littleschemer/article/details/137053262) 欢迎star/fork,欢迎学习/使用,期待一起贡献代码!! diff --git a/jforgame-codec-parent/jforgame-codec-protobuf/pom.xml b/jforgame-codec-parent/jforgame-codec-protobuf/pom.xml index 2c1b55b0..9b90c308 100644 --- a/jforgame-codec-parent/jforgame-codec-protobuf/pom.xml +++ b/jforgame-codec-parent/jforgame-codec-protobuf/pom.xml @@ -22,7 +22,7 @@ io.github.jforgame jforgame-codec-api - 1.0.0 + ${project.parent.version} compile diff --git a/jforgame-codec-parent/jforgame-codec-struct/pom.xml b/jforgame-codec-parent/jforgame-codec-struct/pom.xml index 3c3b89a6..068ccb28 100644 --- a/jforgame-codec-parent/jforgame-codec-struct/pom.xml +++ b/jforgame-codec-parent/jforgame-codec-struct/pom.xml @@ -16,7 +16,7 @@ io.github.jforgame jforgame-codec-api - 1.0.0 + ${project.parent.version} compile diff --git a/jforgame-codec-parent/jforgame-codec-struct/src/main/java/jforgame/codec/struct/Codec.java b/jforgame-codec-parent/jforgame-codec-struct/src/main/java/jforgame/codec/struct/Codec.java index 294b400d..0a1e6bce 100644 --- a/jforgame-codec-parent/jforgame-codec-struct/src/main/java/jforgame/codec/struct/Codec.java +++ b/jforgame-codec-parent/jforgame-codec-struct/src/main/java/jforgame/codec/struct/Codec.java @@ -4,7 +4,6 @@ import java.lang.reflect.Field; import java.lang.reflect.Modifier; import java.nio.ByteBuffer; import java.util.ArrayList; -import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Set; @@ -12,7 +11,7 @@ import java.util.concurrent.ConcurrentHashMap; public abstract class Codec { - private static Map, Codec> class2Serializers = new ConcurrentHashMap<>(); + private static final Map, Codec> class2Serializers = new ConcurrentHashMap<>(); static { register(Boolean.TYPE, new BooleanCodec()); @@ -69,19 +68,25 @@ public abstract class Codec { if (clazz.isArray()) { return class2Serializers.get(Object[].class); } - Field[] fields = clazz.getDeclaredFields(); - List fieldsMeta = new ArrayList<>(); - for (Field field: fields) { - int modifier = field.getModifiers(); - if (Modifier.isFinal(modifier) || Modifier.isStatic(modifier) || Modifier.isTransient(modifier)) { - continue; - } - field.setAccessible(true); - Class type = field.getType(); - Codec codec = Codec.getSerializer(type); + Class currClazz = clazz; - fieldsMeta.add(FieldCodecMeta.valueOf(field, codec)); + List fieldsMeta = new ArrayList<>(); + while (currClazz != Object.class) { + Field[] fields = currClazz.getDeclaredFields(); + for (Field field: fields) { + int modifier = field.getModifiers(); + if (Modifier.isFinal(modifier) || Modifier.isStatic(modifier) || Modifier.isTransient(modifier)) { + continue; + } + field.setAccessible(true); + Class type = field.getType(); + Codec codec = Codec.getSerializer(type); + + fieldsMeta.add(FieldCodecMeta.valueOf(field, codec)); + } + currClazz = currClazz.getSuperclass(); } + Codec messageCodec = BeanCodec.valueOf(fieldsMeta); Codec.register(clazz, messageCodec); return messageCodec; diff --git a/jforgame-codec-parent/jforgame-codec-struct/src/main/java/jforgame/codec/struct/StructMessageCodec.java b/jforgame-codec-parent/jforgame-codec-struct/src/main/java/jforgame/codec/struct/StructMessageCodec.java index ca4d2faa..9fd50caf 100644 --- a/jforgame-codec-parent/jforgame-codec-struct/src/main/java/jforgame/codec/struct/StructMessageCodec.java +++ b/jforgame-codec-parent/jforgame-codec-struct/src/main/java/jforgame/codec/struct/StructMessageCodec.java @@ -8,7 +8,7 @@ import java.nio.ByteBuffer; public class StructMessageCodec implements MessageCodec { - private static Logger logger = LoggerFactory.getLogger(StructMessageCodec.class); + private static final Logger logger = LoggerFactory.getLogger(StructMessageCodec.class); private int WRITE_BUFF_SIZE = 1024; @@ -23,8 +23,7 @@ public class StructMessageCodec implements MessageCodec { try { Codec messageCodec = Codec.getSerializer(msgClazz); - Object message = messageCodec.decode(in, msgClazz, null); - return message; + return messageCodec.decode(in, msgClazz, null); } catch (Exception e) { logger.error("", e); } diff --git a/jforgame-codec-parent/jforgame-codec-struct/src/test/java/PlayerLevelUpMessage.java b/jforgame-codec-parent/jforgame-codec-struct/src/test/java/PlayerLevelUpMessage.java new file mode 100644 index 00000000..d0a19f59 --- /dev/null +++ b/jforgame-codec-parent/jforgame-codec-struct/src/test/java/PlayerLevelUpMessage.java @@ -0,0 +1,12 @@ +public class PlayerLevelUpMessage extends PlayerMessage { + + private int afterLevel; + + public int getAfterLevel() { + return afterLevel; + } + + public void setAfterLevel(int afterLevel) { + this.afterLevel = afterLevel; + } +} diff --git a/jforgame-codec-parent/jforgame-codec-struct/src/test/java/PlayerMessage.java b/jforgame-codec-parent/jforgame-codec-struct/src/test/java/PlayerMessage.java new file mode 100644 index 00000000..aec8a007 --- /dev/null +++ b/jforgame-codec-parent/jforgame-codec-struct/src/test/java/PlayerMessage.java @@ -0,0 +1,12 @@ +public class PlayerMessage { + + private long playerId; + + public long getPlayerId() { + return playerId; + } + + public void setPlayerId(long playerId) { + this.playerId = playerId; + } +} diff --git a/jforgame-codec-parent/jforgame-codec-struct/src/test/java/TestChildMessage.java b/jforgame-codec-parent/jforgame-codec-struct/src/test/java/TestChildMessage.java new file mode 100644 index 00000000..88b2fd2a --- /dev/null +++ b/jforgame-codec-parent/jforgame-codec-struct/src/test/java/TestChildMessage.java @@ -0,0 +1,24 @@ +import jforgame.codec.MessageCodec; +import jforgame.codec.struct.StructMessageCodec; +import org.junit.Assert; +import org.junit.Test; + +public class TestChildMessage { + + private MessageCodec messageCodec = new StructMessageCodec(); + + @Test + public void test() throws Exception { + + PlayerLevelUpMessage childMsg = new PlayerLevelUpMessage(); + childMsg.setPlayerId(123456L); + childMsg.setAfterLevel(100); + + byte[] encode = messageCodec.encode(childMsg); + + PlayerLevelUpMessage newMsg = (PlayerLevelUpMessage) messageCodec.decode(PlayerLevelUpMessage.class, encode); + Assert.assertEquals(100, newMsg.getAfterLevel()); + Assert.assertEquals(123456L, newMsg.getPlayerId()); + } + +} diff --git a/jforgame-commons/src/main/java/jforgame/commons/TimeUtil.java b/jforgame-commons/src/main/java/jforgame/commons/TimeUtil.java index 66a80630..f08d740c 100644 --- a/jforgame-commons/src/main/java/jforgame/commons/TimeUtil.java +++ b/jforgame-commons/src/main/java/jforgame/commons/TimeUtil.java @@ -7,6 +7,11 @@ package jforgame.commons; */ public class TimeUtil { + + private TimeUtil() { + + } + /** * Number of milliseconds in a standard second. */ diff --git a/jforgame-commons/src/main/java/jforgame/commons/ds/LazyCacheMap.java b/jforgame-commons/src/main/java/jforgame/commons/ds/LazyCacheMap.java index bc36db46..9c1c58af 100644 --- a/jforgame-commons/src/main/java/jforgame/commons/ds/LazyCacheMap.java +++ b/jforgame-commons/src/main/java/jforgame/commons/ds/LazyCacheMap.java @@ -131,7 +131,7 @@ public class LazyCacheMap { } @SuppressWarnings("hiding") - class Element { + static class Element { V value; /** 元素添加时的时间戳 */ long bornTime; diff --git a/jforgame-commons/src/test/java/jforgame/commons/utils/TestLazyCacheMap.java b/jforgame-commons/src/test/java/jforgame/commons/utils/TestLazyCacheMap.java index 1980e3fc..345c8763 100644 --- a/jforgame-commons/src/test/java/jforgame/commons/utils/TestLazyCacheMap.java +++ b/jforgame-commons/src/test/java/jforgame/commons/utils/TestLazyCacheMap.java @@ -35,18 +35,19 @@ public class TestLazyCacheMap { @Test public void testTimeout() throws Exception { - LazyCacheMap cache = new LazyCacheMap<>(3, 100, true); + LazyCacheMap cache = new LazyCacheMap<>(2, 300, true); cache.put("a", "a"); cache.put("b", "b"); - Thread.sleep(150); + Thread.sleep(200); + Assert.assertNotNull(cache.get("a")); cache.put("c", "c"); - Assert.assertNotNull(cache.get("b")); + Thread.sleep(100); Assert.assertNotNull(cache.get("c")); - Assert.assertNull(cache.get("a")); + Assert.assertNull(cache.get("b")); } } diff --git a/jforgame-socket-parent/jforgame-socket-api/pom.xml b/jforgame-socket-parent/jforgame-socket-api/pom.xml index b2ab4320..bf58b925 100644 --- a/jforgame-socket-parent/jforgame-socket-api/pom.xml +++ b/jforgame-socket-parent/jforgame-socket-api/pom.xml @@ -27,7 +27,7 @@ io.github.jforgame jforgame-codec-api - 1.0.0 + ${project.parent.version} \ No newline at end of file diff --git a/jforgame-socket-parent/jforgame-socket-mina/pom.xml b/jforgame-socket-parent/jforgame-socket-mina/pom.xml index 36024130..f514033a 100644 --- a/jforgame-socket-parent/jforgame-socket-mina/pom.xml +++ b/jforgame-socket-parent/jforgame-socket-mina/pom.xml @@ -24,13 +24,6 @@ ${project.parent.version} compile - - io.github.jforgame - jforgame-codec-api - 1.0.0 - compile - - org.apache.mina mina-core diff --git a/jforgame-socket-parent/jforgame-socket-netty/pom.xml b/jforgame-socket-parent/jforgame-socket-netty/pom.xml index 2f1d01c7..2842d4e2 100644 --- a/jforgame-socket-parent/jforgame-socket-netty/pom.xml +++ b/jforgame-socket-parent/jforgame-socket-netty/pom.xml @@ -29,12 +29,5 @@ ${project.parent.version} compile - - io.github.jforgame - jforgame-codec-api - 1.0.0 - compile - - \ No newline at end of file diff --git a/pom.xml b/pom.xml index a7e92989..240680db 100644 --- a/pom.xml +++ b/pom.xml @@ -35,7 +35,7 @@ jforgame-commons - + jforgame-codec-parent jforgame-socket-parent jforgame-hotswap jforgame-orm