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