Skip to content

Commit 59a7b69

Browse files
author
Evan Hu
committed
完善代码
1 parent a542981 commit 59a7b69

File tree

5 files changed

+75
-44
lines changed

5 files changed

+75
-44
lines changed

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

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package info.xiaomo.gengine.network;
22

33
import com.google.protobuf.Message;
4+
import com.google.protobuf.ProtocolMessageEnum;
45

56
/** @author xiaomo */
67
public interface IMessagePool {
@@ -19,7 +20,7 @@ public interface IMessagePool {
1920
* @param message message
2021
* @return int
2122
*/
22-
int getMessageId(Message message);
23+
Integer getMessageId(Message message);
2324

2425
/**
2526
* 获取handler
@@ -37,11 +38,15 @@ public interface IMessagePool {
3738
*/
3839
void register(int messageId, Message messageClazz, Class<? extends AbstractHandler> handler);
3940

41+
void register(ProtocolMessageEnum messageId, Message messageClazz, Class<? extends AbstractHandler> handler);
42+
4043
/**
4144
* 注册
4245
*
4346
* @param messageId messageId
4447
* @param messageClazz messageClazz
4548
*/
4649
void register(int messageId, Message messageClazz);
50+
51+
void register(ProtocolMessageEnum messageId, Message messageClazz);
4752
}

src/main/java/info/xiaomo/gengine/network/handler/DefaultProtobufEncoder.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@ public DefaultProtobufEncoder(IMessagePool pool) {
1919
@Override
2020
protected void encode(
2121
ChannelHandlerContext channelHandlerContext, Message message, ByteBuf byteBuf) {
22-
int msgId = pool.getMessageId(message);
23-
if (msgId == 0) {
22+
Integer msgId = pool.getMessageId(message);
23+
if (msgId == null) {
2424
log.error("消息未注册:{}", message.getClass().getSimpleName());
2525
return;
2626
}

src/main/java/info/xiaomo/gengine/network/handler/MessageExecutor.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,9 @@ public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) {
3030

3131
@Override
3232
public void channelRead0(ChannelHandlerContext ctx, Message message) {
33-
int msgId = pool.getMessageId(message);
33+
Integer msgId = pool.getMessageId(message);
3434

35-
if (msgId == 0) {
35+
if (msgId == null) {
3636
log.error("请求消息未设置msgId");
3737
return;
3838
}
Lines changed: 51 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package info.xiaomo.gengine.network.pool;
22

33
import com.google.protobuf.Message;
4+
import com.google.protobuf.ProtocolMessageEnum;
45
import java.util.HashMap;
56
import java.util.Map;
67
import info.xiaomo.gengine.network.AbstractHandler;
@@ -9,48 +10,61 @@
910
/** desc : 消息池的父类 Copyright(©) 2017 by xiaomo. */
1011
public class MessagePool implements IMessagePool {
1112

12-
/** 消息类字典 */
13-
public static final Map<Integer, Message> messages = new HashMap<>(10);
13+
/** 消息类字典 */
14+
public static final Map<Integer, Message> messages = new HashMap<>(10);
1415

15-
/** 类和 */
16-
private final Map<String, Integer> ids = new HashMap<>(10);
16+
/** 类和 */
17+
private final Map<String, Integer> ids = new HashMap<>(10);
1718

18-
private final Map<Integer, Class<? extends AbstractHandler>> handlers = new HashMap<>(10);
19+
private final Map<Integer, Class<? extends AbstractHandler>> handlers = new HashMap<>(10);
1920

20-
@Override
21-
public Message getMessage(int messageId) {
22-
return messages.get(messageId);
23-
}
21+
@Override
22+
public Message getMessage(int messageId) {
23+
return messages.get(messageId);
24+
}
2425

25-
@Override
26-
public int getMessageId(Message message) {
27-
return ids.get(message.getClass().getName());
28-
}
26+
@Override
27+
public Integer getMessageId(Message message) {
28+
return ids.get(message.getClass().getName());
29+
}
2930

30-
@Override
31-
public AbstractHandler getHandler(int messageId) {
32-
Class<? extends AbstractHandler> clazz = handlers.get(messageId);
33-
if (clazz != null) {
34-
try {
35-
return clazz.getDeclaredConstructor().newInstance();
36-
} catch (Exception e) {
31+
@Override
32+
public AbstractHandler getHandler(int messageId) {
33+
Class<? extends AbstractHandler> clazz = handlers.get(messageId);
34+
if (clazz != null) {
35+
try {
36+
return clazz.getDeclaredConstructor().newInstance();
37+
} catch (Exception e) {
38+
return null;
39+
}
40+
}
3741
return null;
38-
}
3942
}
40-
return null;
41-
}
42-
43-
@Override
44-
public void register(
45-
int messageId, Message messageClazz, Class<? extends AbstractHandler> handler) {
46-
messages.put(messageId, messageClazz);
47-
handlers.put(messageId, handler);
48-
ids.put(messageClazz.getClass().getName(), messageId);
49-
}
50-
51-
@Override
52-
public void register(int messageId, Message messageClazz) {
53-
messages.put(messageId, messageClazz);
54-
ids.put(messageClazz.getClass().getName(), messageId);
55-
}
43+
44+
@Override
45+
public void register(
46+
int messageId, Message messageClazz, Class<? extends AbstractHandler> handler) {
47+
messages.put(messageId, messageClazz);
48+
handlers.put(messageId, handler);
49+
ids.put(messageClazz.getClass().getName(), messageId);
50+
}
51+
52+
@Override
53+
public void register(
54+
ProtocolMessageEnum messageId,
55+
Message messageClazz,
56+
Class<? extends AbstractHandler> handler) {
57+
register(messageId.getNumber(), messageClazz, handler);
58+
}
59+
60+
@Override
61+
public void register(int messageId, Message messageClazz) {
62+
messages.put(messageId, messageClazz);
63+
ids.put(messageClazz.getClass().getName(), messageId);
64+
}
65+
66+
@Override
67+
public void register(ProtocolMessageEnum messageId, Message messageClazz) {
68+
register(messageId.getNumber(), messageClazz);
69+
}
5670
}

src/main/java/info/xiaomo/gengine/network/pool/MessageRouter.java

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package info.xiaomo.gengine.network.pool;
22

33
import com.google.protobuf.Message;
4+
import com.sun.istack.internal.Nullable;
45
import java.util.HashMap;
56
import java.util.Map;
67
import info.xiaomo.gengine.network.*;
@@ -42,10 +43,21 @@ public void consume(Message message, Channel channel) {
4243
return;
4344
}
4445

45-
int msgId = msgPool.getMessageId(message);
46+
Integer msgId = msgPool.getMessageId(message);
47+
48+
if (msgId == null) {
49+
log.error("消息未注册:{}", message);
50+
return;
51+
}
52+
4653
log.debug("收到消息:" + msgId);
4754

48-
AbstractHandler handler = msgPool.getHandler(msgId);
55+
@Nullable AbstractHandler handler = msgPool.getHandler(msgId);
56+
if (handler == null) {
57+
log.error("msgId:{} 未注册handler", msgId);
58+
return;
59+
}
60+
4961
handler.setMessage(message);
5062
handler.setParam(session);
5163
handler.setSession(session);

0 commit comments

Comments
 (0)