Skip to content

Commit b018763

Browse files
author
Peng Hu
committed
关服消息
1 parent 1d7855d commit b018763

17 files changed

+128
-75
lines changed

src/main/java/info/xiaomo/gengine/config/AbstractFileConfigDataManager.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ private void parseFileConfig() throws Exception {
143143
Map<String, Object> tempCaches = new HashMap<>(10);
144144
cacheClz.forEach((clzName, clz) -> {
145145
try {
146-
Object obj = clz.newInstance();
146+
Object obj = clz.getConstructor().newInstance();
147147
if (IConfigCache.class.isAssignableFrom(clz)) {
148148
IConfigCache cache = (IConfigCache) obj;
149149
cache.build();

src/main/java/info/xiaomo/gengine/config/excel/ExcelConfigWrapper.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
package info.xiaomo.gengine.config.excel;
22

33
import java.lang.reflect.Field;
4+
import java.lang.reflect.InvocationTargetException;
45
import java.util.HashMap;
56
import java.util.List;
67
import java.util.Map;
78
import java.util.Objects;
9+
810
import info.xiaomo.gengine.config.ConfigContainer;
911
import info.xiaomo.gengine.config.IConfigWrapper;
1012
import info.xiaomo.gengine.config.beans.ColumnDesc;
@@ -101,7 +103,7 @@ public ExcelConfigWrapper build() {
101103
Map<Integer, String> header = table.remove(tableDesc.getHeader());
102104
table.forEach((rowIndex, rowData) -> {
103105
try {
104-
Object config = clz.newInstance();
106+
Object config = clz.getConstructor().newInstance();
105107
header.forEach((columnIndex, columnName) -> {
106108
String cellData = rowData.get(columnIndex);
107109
ColumnDesc columnDesc = columns.get(columnName);
@@ -164,7 +166,7 @@ public ExcelConfigWrapper build() {
164166
container.getConfigMap().put(sb.toString(), config);
165167
}
166168
container.getConfigList().add(config);
167-
} catch (InstantiationException | IllegalAccessException e) {
169+
} catch (InstantiationException | IllegalAccessException | NoSuchMethodException | InvocationTargetException e) {
168170
e.printStackTrace();
169171
}
170172
});

src/main/java/info/xiaomo/gengine/config/excel/parser/DataConfigXmlParser.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -149,10 +149,10 @@ public static Map<String, TableDesc<IConfig>> parseConfigs(String xmlFilePath) t
149149
String[] converters = convertersStr.split(",");
150150
if (converters.length > 0) {
151151
Class<? extends IConverter> converterClz = (Class<? extends IConverter>) Class.forName(converters[0]);
152-
IConverter converter = converterClz.newInstance();
152+
IConverter converter = converterClz.getConstructor().newInstance();
153153
for (int i = 1; i < converters.length; i++) {
154154
converterClz = (Class<? extends IConverter>) Class.forName(converters[i]);
155-
converter = converter.andThen(converterClz.newInstance());
155+
converter = converter.andThen(converterClz.getConstructor().newInstance());
156156
}
157157
columnDesc.setConverter(converter);
158158
}
@@ -173,7 +173,7 @@ public static Map<String, TableDesc<IConfig>> parseConfigs(String xmlFilePath) t
173173
}
174174

175175
Class<? extends IConverter> converterClz = (Class<? extends IConverter>) Class.forName(converterClzName);
176-
IConverter converter = converterClz.newInstance();
176+
IConverter converter = converterClz.getConstructor().newInstance();
177177
for (int i = 1; i < converters.size(); i++) {
178178
converterElement = (Element) converters.get(i);
179179

@@ -186,7 +186,7 @@ public static Map<String, TableDesc<IConfig>> parseConfigs(String xmlFilePath) t
186186
throw new RuntimeException(String.format("【%s】的属性字段【%s】存在一个空的converter配置", clz.getName(), fieldName));
187187
}
188188
converterClz = (Class<? extends IConverter>) Class.forName(converterClzName);
189-
converter = converter.andThen(converterClz.newInstance());
189+
converter = converter.andThen(converterClz.getConstructor().newInstance());
190190
}
191191
columnDesc.setConverter(converter);
192192
}

src/main/java/info/xiaomo/gengine/config/util/ReflectUtils.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,9 +87,9 @@ public static ColumnDesc getColumnDesc(Field field) throws Exception {
8787
// 将多个转换器转为一个
8888
Class<? extends IConverter>[] converters = column.value();
8989
if (converters.length > 0) {
90-
IConverter converter = converters[0].newInstance();
90+
IConverter converter = converters[0].getConstructor().newInstance();
9191
for (int i = 1; i < converters.length; i++) {
92-
converter = converter.andThen(converters[i].newInstance());
92+
converter = converter.andThen(converters[i].getConstructor().newInstance());
9393
}
9494
columnDesc.setConverter(converter);
9595
}

src/main/java/info/xiaomo/gengine/logger/LogService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ public static void init(String dsConfig, int coreThreadPoolSize, int maximumThre
4242

4343
Set<Class<AbstractLog>> ret = LogBeanUtil.getSubClasses("info.xiaomo.gengine.log", AbstractLog.class);
4444
for (Class<AbstractLog> logClass : ret) {
45-
AbstractLog log = logClass.newInstance();
45+
AbstractLog log = logClass.getConstructor().newInstance();
4646
log.init();
4747
}
4848
INSTANCE = new LogService();

src/main/java/info/xiaomo/gengine/network/NetworkServiceBuilder.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,10 @@
1111
@Data
1212
public class NetworkServiceBuilder {
1313

14+
private int upLimit = 2048;//解码大小限制
15+
16+
private int downLimit = 5120;//编码大小限制
17+
1418
/**
1519
* 网络线程池线程数量
1620
*/

src/main/java/info/xiaomo/gengine/network/NetworkServiceImpl.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ protected void initChannel(Channel ch) {
9797
pip.addLast(new WebSocketServerProtocolHandler("/"));
9898
pip.addLast(new WebSocketDecoder());
9999
pip.addLast(new WebSocketEncoder());
100-
pip.addLast(new MessageDecoder(builder.getImessageandhandler()));
100+
pip.addLast(new MessageDecoder(builder.getUpLimit()));
101101
pip.addLast(new MessageExecutor(builder.getConsumer(), builder.getListener()));
102102
for (ChannelHandler handler : builder.getExtraHandlers()) {
103103
pip.addLast(handler);
@@ -123,10 +123,10 @@ protected void initChannel(Channel ch) {
123123
int lengthFieldLength = 4;
124124
int ignoreLength = -4;
125125
int offset = 0;
126-
pip.addLast(new LengthFieldBasedFrameDecoder(maxLength, offset, lengthFieldLength, ignoreLength, lengthFieldLength));
127-
pip.addLast(new MessageDecoder(builder.getImessageandhandler()));
128-
pip.addLast(new LengthFieldPrepender(4, true));
129-
pip.addLast(new MessageEncoder(builder.getImessageandhandler()));
126+
// pip.addLast(new LengthFieldBasedFrameDecoder(maxLength, offset, lengthFieldLength, ignoreLength, lengthFieldLength));
127+
pip.addLast(new MessageDecoder(builder.getUpLimit()));
128+
// pip.addLast(new LengthFieldPrepender(4, true));
129+
pip.addLast(new MessageEncoder(builder.getDownLimit()));
130130
pip.addLast(new MessageExecutor(builder.getConsumer(), builder.getListener()));
131131
for (ChannelHandler handler : builder.getExtraHandlers()) {
132132
pip.addLast(handler);
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package info.xiaomo.gengine.network;
2+
3+
import lombok.Data;
4+
5+
@Data
6+
public class Packet {
7+
public static final byte HEAD_TCP = -128;
8+
public static final byte HEAD_UDP = 0;
9+
public static final byte HEAD_NEED_ACK = 64;
10+
public static final byte HEAD_ACK = 44;
11+
public static final byte HEAD_PROTOCOL_MASK = 3;
12+
public static final byte PROTOCOL_PROTOBUF = 0;
13+
public static final byte PROTOCOL_JSON = 1;
14+
private final byte head;
15+
private final short sid;
16+
private final int cmd;
17+
private final byte[] bytes;
18+
19+
public Packet(byte head, int cmd, byte[] bytes) {
20+
this(head, (short) 0, cmd, bytes);
21+
}
22+
23+
public Packet(byte head, short sid, int cmd, byte[] bytes) {
24+
this.cmd = cmd;
25+
this.bytes = bytes;
26+
this.head = head;
27+
this.sid = sid;
28+
}
29+
}

src/main/java/info/xiaomo/gengine/network/client/Client.java

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
package info.xiaomo.gengine.network.client;
22

33
import com.google.protobuf.AbstractMessage;
4+
import com.google.protobuf.Descriptors;
5+
import com.google.protobuf.Message;
6+
import info.xiaomo.gengine.network.Packet;
47
import info.xiaomo.gengine.network.handler.MessageDecoder;
58
import info.xiaomo.gengine.network.handler.MessageEncoder;
69
import info.xiaomo.gengine.network.pool.MessageAndHandlerPool;
@@ -17,6 +20,7 @@
1720
import java.io.IOException;
1821
import java.util.List;
1922
import java.util.Map;
23+
import java.util.Set;
2024
import java.util.concurrent.*;
2125

2226
/**
@@ -89,8 +93,8 @@ protected void initChannel(SocketChannel ch) throws Exception {
8993
if (idleCheck) {
9094
pip.addLast("Idle", new IdleStateHandler(builder.getMaxIdleTime(), 0, 0));
9195
}
92-
pip.addLast("NettyMessageDecoder", new MessageDecoder(builder.getMsgPool()));
93-
pip.addLast("NettyMessageEncoder", new MessageEncoder(new MessageAndHandlerPool()));
96+
pip.addLast("NettyMessageDecoder", new MessageDecoder(builder.getUpLimit()));
97+
pip.addLast("NettyMessageEncoder", new MessageEncoder(builder.getDownLimit()));
9498
pip.addLast("NettyMessageExecutor", new ClientMessageExecutor(
9599
builder.getConsumer(),
96100
builder.getEventListener(),
@@ -147,12 +151,24 @@ public boolean sendMsg(List<AbstractMessage> list) {
147151
public boolean sendMsg(AbstractMessage message) {
148152
Channel channel = getChannel(Thread.currentThread().getId());
149153
if (channel != null && channel.isActive()) {
150-
channel.writeAndFlush(message);
154+
int cmd = getMessageID(message);
155+
Packet packet = new Packet(Packet.HEAD_TCP, cmd, message.toByteArray());
156+
channel.writeAndFlush(packet);
151157
return true;
152158
}
153159
return false;
154160
}
155161

162+
public static int getMessageID(Message msg) {
163+
for (Map.Entry<Descriptors.FieldDescriptor, Object> fieldDescriptorObjectEntry : msg.getAllFields().entrySet()) {
164+
if (fieldDescriptorObjectEntry.getKey().getName().equals("msgId")) {
165+
return ((Descriptors.EnumValueDescriptor) fieldDescriptorObjectEntry.getValue()).getNumber();
166+
}
167+
}
168+
LOGGER.error("在消息体中没有找到对应的消息id:{}", msg);
169+
return 0;
170+
}
171+
156172
/**
157173
* 发送同步消息,只有clientBuilder.validate = true的时候才能发送同步消息
158174
*

src/main/java/info/xiaomo/gengine/network/client/ClientBuilder.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@
1515
@Data
1616
public class ClientBuilder {
1717

18+
private int upLimit = 2048;//解码大小限制
19+
20+
private int downLimit = 5120;//编码大小限制
21+
1822
/**
1923
* 网络线程池线程数量
2024
*/

0 commit comments

Comments
 (0)