mirror of
https://github.com/kingston-csj/jforgame.git
synced 2026-10-29 11:36:39 +08:00
还原pom文件version占位符,codec-struct支持解析父类字段
This commit is contained in:
@@ -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>
|
||||
|
||||
+18
-13
@@ -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;
|
||||
|
||||
+2
-3
@@ -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>
|
||||
Reference in New Issue
Block a user