mirror of
https://github.com/tiennm99/zfoo.git
synced 2026-05-22 12:26:41 +00:00
perf[net]: 校验一个协议只能对应一个被@PacketReceiver标注的方法
This commit is contained in:
@@ -48,12 +48,6 @@ public abstract class PacketBus {
|
||||
|
||||
private static final Logger logger = LoggerFactory.getLogger(PacketBus.class);
|
||||
|
||||
/**
|
||||
* 客户端和服务端都有接受packet的方法,packetReceiverList对应的就是包的接收方法,将receiver注册到IProtocolRegistration
|
||||
*/
|
||||
public static final IProtocolRegistration[] packetReceiverList = ProtocolManager.protocols;
|
||||
|
||||
|
||||
/**
|
||||
* 正常消息的接收
|
||||
* <p>
|
||||
@@ -61,7 +55,8 @@ public abstract class PacketBus {
|
||||
* 接收者同时只能处理一个session的一个包,同一个发送者发送过来的包排队处理
|
||||
*/
|
||||
public static void submit(Session session, IPacket packet, IAttachment attachment) {
|
||||
var packetReceiver = (IPacketReceiver) packetReceiverList[packet.protocolId()].receiver();
|
||||
// 客户端和服务端都有接受packet的方法,packetReceiverList对应的就是包的接收方法,将receiver注册到IProtocolRegistration
|
||||
var packetReceiver = (IPacketReceiver) ProtocolManager.getProtocol(packet.protocolId()).receiver();
|
||||
if (packetReceiver == null) {
|
||||
throw new RuntimeException(StringUtils.format("no any packetReceiverDefinition found for this [packet:{}]", packet.getClass().getName()));
|
||||
}
|
||||
@@ -127,12 +122,15 @@ public abstract class PacketBus {
|
||||
|
||||
try {
|
||||
var protocolId = ProtocolAnalysis.getProtocolIdByClass(packetClazz);
|
||||
var receiverDefinition = new PacketReceiverDefinition(bean, method, packetClazz, attachmentClazz);
|
||||
var enhanceReceiverDefinition = EnhanceUtils.createPacketReceiver(receiverDefinition);
|
||||
|
||||
// 将receiver注册到IProtocolRegistration
|
||||
var protocolRegistration = packetReceiverList[protocolId];
|
||||
var protocolRegistration = ProtocolManager.getProtocol(protocolId);
|
||||
AssertionUtils.notNull(protocolRegistration, "协议类[class:{}][protocolId:{}]没有注册", packetClazz.getSimpleName(), protocolId);
|
||||
AssertionUtils.isNull(protocolRegistration.receiver(), "协议类[class:{}]被重复接收[at{}],一个协议只能对应一个被@PacketReceiver标注的方法"
|
||||
, packetClazz.getSimpleName(), packetClazz.getSimpleName());
|
||||
|
||||
var receiverDefinition = new PacketReceiverDefinition(bean, method, packetClazz, attachmentClazz);
|
||||
var enhanceReceiverDefinition = EnhanceUtils.createPacketReceiver(receiverDefinition);
|
||||
|
||||
var receiverField = ReflectionUtils.getFieldByNameInPOJOClass(protocolRegistration.getClass(), "receiver");
|
||||
ReflectionUtils.makeAccessible(receiverField);
|
||||
|
||||
Reference in New Issue
Block a user