还原pom文件version占位符,codec-struct支持解析父类字段

This commit is contained in:
kingston-csj
2024-03-27 18:18:22 +08:00
parent d8bcc83c84
commit db07db128c
15 changed files with 87 additions and 42 deletions
+4 -3
View File
@@ -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,欢迎学习/使用,期待一起贡献代码!!
@@ -22,7 +22,7 @@
<dependency>
<groupId>io.github.jforgame</groupId>
<artifactId>jforgame-codec-api</artifactId>
<version>1.0.0</version>
<version>${project.parent.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
@@ -16,7 +16,7 @@
<dependency>
<groupId>io.github.jforgame</groupId>
<artifactId>jforgame-codec-api</artifactId>
<version>1.0.0</version>
<version>${project.parent.version}</version>
<scope>compile</scope>
</dependency>
</dependencies>
@@ -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<Class<?>, Codec> class2Serializers = new ConcurrentHashMap<>();
private static final Map<Class<?>, 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<FieldCodecMeta> 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<FieldCodecMeta> 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;
@@ -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);
}
@@ -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;
}
}
@@ -0,0 +1,12 @@
public class PlayerMessage {
private long playerId;
public long getPlayerId() {
return playerId;
}
public void setPlayerId(long playerId) {
this.playerId = playerId;
}
}
@@ -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());
}
}
@@ -7,6 +7,11 @@ package jforgame.commons;
*/
public class TimeUtil {
private TimeUtil() {
}
/**
* Number of milliseconds in a standard second.
*/
@@ -131,7 +131,7 @@ public class LazyCacheMap<K, V> {
}
@SuppressWarnings("hiding")
class Element<V> {
static class Element<V> {
V value;
/** 元素添加时的时间戳 */
long bornTime;
@@ -35,18 +35,19 @@ public class TestLazyCacheMap {
@Test
public void testTimeout() throws Exception {
LazyCacheMap<String, String> cache = new LazyCacheMap<>(3, 100, true);
LazyCacheMap<String, String> 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"));
}
}
@@ -27,7 +27,7 @@
<dependency>
<groupId>io.github.jforgame</groupId>
<artifactId>jforgame-codec-api</artifactId>
<version>1.0.0</version>
<version>${project.parent.version}</version>
</dependency>
</dependencies>
</project>
@@ -24,13 +24,6 @@
<version>${project.parent.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>io.github.jforgame</groupId>
<artifactId>jforgame-codec-api</artifactId>
<version>1.0.0</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.apache.mina</groupId>
<artifactId>mina-core</artifactId>
@@ -29,12 +29,5 @@
<version>${project.parent.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>io.github.jforgame</groupId>
<artifactId>jforgame-codec-api</artifactId>
<version>1.0.0</version>
<scope>compile</scope>
</dependency>
</dependencies>
</project>
+1 -1
View File
@@ -35,7 +35,7 @@
<modules>
<module>jforgame-commons</module>
<!-- <module>jforgame-codec-parent</module>-->
<module>jforgame-codec-parent</module>
<module>jforgame-socket-parent</module>
<module>jforgame-hotswap</module>
<module>jforgame-orm</module>