mirror of
https://github.com/tiennm99/zfoo.git
synced 2026-10-14 14:17:56 +00:00
Merge remote-tracking branch 'origin/main'
This commit is contained in:
commit
67220ca576
28 files changed
+273
-219
No files matched your search
@@ -36,6 +36,7 @@
|
||||
<netty.version>4.1.84.Final</netty.version>
|
||||
<jprotobuf.version>2.4.17</jprotobuf.version>
|
||||
<kryo.version>5.3.0</kryo.version>
|
||||
<reflections.version>0.10.2</reflections.version>
|
||||
|
||||
<!-- zookeeper -->
|
||||
<curator.version>5.3.0</curator.version>
|
||||
|
||||
@@ -34,16 +34,9 @@ public class NetConfig {
|
||||
private String protocolParam;
|
||||
|
||||
/**
|
||||
* 是否生成对应语言的协议
|
||||
* 生成协议列表
|
||||
*/
|
||||
private boolean javascriptProtocol;
|
||||
private boolean typescriptProtocol;
|
||||
private boolean csharpProtocol;
|
||||
private boolean luaProtocol;
|
||||
private boolean gdscriptProtocol;
|
||||
private boolean cppProtocol;
|
||||
private boolean goProtocol;
|
||||
private boolean protobufProtocol;
|
||||
private String protocolList;
|
||||
|
||||
/**
|
||||
* 注册中心
|
||||
@@ -110,30 +103,6 @@ public class NetConfig {
|
||||
this.protocolParam = protocolParam;
|
||||
}
|
||||
|
||||
public boolean isJavascriptProtocol() {
|
||||
return javascriptProtocol;
|
||||
}
|
||||
|
||||
public void setJavascriptProtocol(boolean javascriptProtocol) {
|
||||
this.javascriptProtocol = javascriptProtocol;
|
||||
}
|
||||
|
||||
public boolean isCsharpProtocol() {
|
||||
return csharpProtocol;
|
||||
}
|
||||
|
||||
public void setCsharpProtocol(boolean csharpProtocol) {
|
||||
this.csharpProtocol = csharpProtocol;
|
||||
}
|
||||
|
||||
public boolean isLuaProtocol() {
|
||||
return luaProtocol;
|
||||
}
|
||||
|
||||
public void setLuaProtocol(boolean luaProtocol) {
|
||||
this.luaProtocol = luaProtocol;
|
||||
}
|
||||
|
||||
public RegistryConfig getRegistry() {
|
||||
return registry;
|
||||
}
|
||||
@@ -166,44 +135,12 @@ public class NetConfig {
|
||||
this.consumer = consumer;
|
||||
}
|
||||
|
||||
public boolean isGdscriptProtocol() {
|
||||
return gdscriptProtocol;
|
||||
public String getProtocolList() {
|
||||
return protocolList;
|
||||
}
|
||||
|
||||
public void setGdscriptProtocol(boolean gdscriptProtocol) {
|
||||
this.gdscriptProtocol = gdscriptProtocol;
|
||||
}
|
||||
|
||||
public boolean isProtobufProtocol() {
|
||||
return protobufProtocol;
|
||||
}
|
||||
|
||||
public void setProtobufProtocol(boolean protobufProtocol) {
|
||||
this.protobufProtocol = protobufProtocol;
|
||||
}
|
||||
|
||||
public boolean isCppProtocol() {
|
||||
return cppProtocol;
|
||||
}
|
||||
|
||||
public void setCppProtocol(boolean cppProtocol) {
|
||||
this.cppProtocol = cppProtocol;
|
||||
}
|
||||
|
||||
public boolean isTypescriptProtocol() {
|
||||
return typescriptProtocol;
|
||||
}
|
||||
|
||||
public void setTypescriptProtocol(boolean typescriptProtocol) {
|
||||
this.typescriptProtocol = typescriptProtocol;
|
||||
}
|
||||
|
||||
public boolean isGoProtocol() {
|
||||
return goProtocol;
|
||||
}
|
||||
|
||||
public void setGoProtocol(boolean goProtocol) {
|
||||
this.goProtocol = goProtocol;
|
||||
public void setProtocolList(String protocolList) {
|
||||
this.protocolList = protocolList;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -18,20 +18,25 @@ import com.zfoo.net.router.route.PacketBus;
|
||||
import com.zfoo.protocol.IPacket;
|
||||
import com.zfoo.protocol.ProtocolManager;
|
||||
import com.zfoo.protocol.buffer.ByteBufUtils;
|
||||
import com.zfoo.protocol.collection.CollectionUtils;
|
||||
import com.zfoo.protocol.exception.ExceptionUtils;
|
||||
import com.zfoo.protocol.generate.GenerateOperation;
|
||||
import com.zfoo.protocol.generate.GenerateProtocolFile;
|
||||
import com.zfoo.protocol.registration.IProtocolRegistration;
|
||||
import com.zfoo.protocol.serializer.CodeLanguage;
|
||||
import com.zfoo.protocol.util.DomUtils;
|
||||
import com.zfoo.protocol.util.StringUtils;
|
||||
import com.zfoo.protocol.xml.XmlProtocols;
|
||||
import io.netty.buffer.ByteBuf;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.util.ResourceUtils;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
import java.util.function.Predicate;
|
||||
|
||||
/**
|
||||
@@ -53,6 +58,7 @@ public class PacketService implements IPacketService {
|
||||
* 2. 服务器内部请求约定以Ask结尾,服务器内部的响应约定以Answer结尾
|
||||
* 3. 服务器主动通知客户端以Notice结尾
|
||||
* 4. 公共的协议放在common模块
|
||||
* 5. 内部协议范围不允许使用
|
||||
*/
|
||||
public static final String NET_REQUEST_SUFFIX = "Request";
|
||||
public static final String NET_RESPONSE_SUFFIX = "Response";
|
||||
@@ -64,12 +70,15 @@ public class PacketService implements IPacketService {
|
||||
|
||||
|
||||
public static final String NET_COMMON_MODULE = "common";
|
||||
/** 内网协议最大id */
|
||||
public static final short MAN_NATIVE_PROTOCOL_ID = 100;
|
||||
|
||||
private final Predicate<IProtocolRegistration> netGenerateProtocolFilter = registration
|
||||
-> ProtocolManager.moduleByModuleId(registration.module()).getName().matches(NET_COMMON_MODULE)
|
||||
|| registration.protocolConstructor().getDeclaringClass().getSimpleName().endsWith(NET_REQUEST_SUFFIX)
|
||||
|| registration.protocolConstructor().getDeclaringClass().getSimpleName().endsWith(NET_RESPONSE_SUFFIX)
|
||||
|| registration.protocolConstructor().getDeclaringClass().getSimpleName().endsWith(NET_NOTICE_SUFFIX);
|
||||
|| registration.protocolConstructor().getDeclaringClass().getSimpleName().endsWith(NET_NOTICE_SUFFIX)
|
||||
|| registration.protocolId() > MAN_NATIVE_PROTOCOL_ID;
|
||||
|
||||
public PacketService() {
|
||||
|
||||
@@ -86,31 +95,16 @@ public class PacketService implements IPacketService {
|
||||
generateOperation.setFoldProtocol(netConfig.isFoldProtocol());
|
||||
generateOperation.setProtocolPath(netConfig.getProtocolPath());
|
||||
generateOperation.setProtocolParam(netConfig.getProtocolParam());
|
||||
if (netConfig.isJavascriptProtocol()) {
|
||||
generateOperation.getGenerateLanguages().add(CodeLanguage.JavaScript);
|
||||
}
|
||||
if (netConfig.isTypescriptProtocol()) {
|
||||
generateOperation.getGenerateLanguages().add(CodeLanguage.TypeScript);
|
||||
}
|
||||
if (netConfig.isCsharpProtocol()) {
|
||||
generateOperation.getGenerateLanguages().add(CodeLanguage.CSharp);
|
||||
}
|
||||
if (netConfig.isLuaProtocol()) {
|
||||
generateOperation.getGenerateLanguages().add(CodeLanguage.Lua);
|
||||
}
|
||||
if (netConfig.isGdscriptProtocol()) {
|
||||
generateOperation.getGenerateLanguages().add(CodeLanguage.GdScript);
|
||||
}
|
||||
if (netConfig.isCppProtocol()) {
|
||||
generateOperation.getGenerateLanguages().add(CodeLanguage.Cpp);
|
||||
}
|
||||
if (netConfig.isGoProtocol()) {
|
||||
generateOperation.getGenerateLanguages().add(CodeLanguage.Go);
|
||||
}
|
||||
if (netConfig.isProtobufProtocol()) {
|
||||
generateOperation.getGenerateLanguages().add(CodeLanguage.Protobuf);
|
||||
}
|
||||
var protocolArr = StringUtils.tokenize(netConfig.getProtocolList(), StringUtils.SEMICOLON_COMMA);
|
||||
|
||||
for (var protocolCode : protocolArr) {
|
||||
protocolCode = protocolCode.replaceAll(StringUtils.SPACE_REGEX, "");
|
||||
var codeLanguage = getProtocolList(protocolCode);
|
||||
if (CollectionUtils.isEmpty(codeLanguage)) {
|
||||
continue;
|
||||
}
|
||||
generateOperation.getGenerateLanguages().addAll(codeLanguage);
|
||||
}
|
||||
// 设置生成协议的过滤器
|
||||
GenerateProtocolFile.generateProtocolFilter = netGenerateProtocolFilter;
|
||||
|
||||
@@ -131,6 +125,28 @@ public class PacketService implements IPacketService {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取要生成协议列表
|
||||
* @param protocolCode
|
||||
* @return
|
||||
*/
|
||||
private Set<CodeLanguage> getProtocolList(String protocolCode) {
|
||||
var languageSet = new HashSet<CodeLanguage>();
|
||||
boolean isNumeric = StringUtils.isNumeric(protocolCode);
|
||||
for (var codeLanguage : CodeLanguage.values()) {
|
||||
if (isNumeric) {
|
||||
var protocolBit = Integer.valueOf(protocolCode);
|
||||
if ((protocolBit & codeLanguage.id) != 0) {
|
||||
languageSet.add(codeLanguage);
|
||||
}
|
||||
} else if (codeLanguage.name().equalsIgnoreCase(protocolCode)) {
|
||||
languageSet.add(codeLanguage);
|
||||
break;
|
||||
}
|
||||
}
|
||||
return languageSet;
|
||||
}
|
||||
|
||||
@Override
|
||||
public DecodedPacketInfo read(ByteBuf buffer) {
|
||||
// 包的长度在上一层已经解析过
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
package com.zfoo.net.packet.common;
|
||||
|
||||
import com.baidu.bjf.remoting.protobuf.annotation.Ignore;
|
||||
import com.baidu.bjf.remoting.protobuf.annotation.Protobuf;
|
||||
import com.baidu.bjf.remoting.protobuf.annotation.ProtobufClass;
|
||||
import com.zfoo.protocol.IPacket;
|
||||
import com.zfoo.protocol.ProtocolManager;
|
||||
@@ -29,10 +30,11 @@ public class Error implements IPacket {
|
||||
@Ignore
|
||||
public static final short PROTOCOL_ID = 101;
|
||||
|
||||
@Protobuf(order = 1)
|
||||
private int module;
|
||||
|
||||
@Protobuf(order = 2)
|
||||
private int errorCode;
|
||||
|
||||
@Protobuf(order = 3)
|
||||
private String errorMessage;
|
||||
|
||||
@Override
|
||||
|
||||
@@ -102,18 +102,10 @@ public class NetDefinitionParser implements BeanDefinitionParser {
|
||||
// 协议protocol.xml文件的位置。 注意:直接写protocol.xml 则是从resources目录下读
|
||||
resolvePlaceholder("protocol-location", "protocolLocation", builder, element, parserContext);
|
||||
|
||||
// 各种语言的文件是否生成
|
||||
resolvePlaceholder("javascript-protocol", "javascriptProtocol", builder, element, parserContext);
|
||||
resolvePlaceholder("typescript-protocol", "typescriptProtocol", builder, element, parserContext);
|
||||
resolvePlaceholder("csharp-protocol", "csharpProtocol", builder, element, parserContext);
|
||||
resolvePlaceholder("lua-protocol", "luaProtocol", builder, element, parserContext);
|
||||
resolvePlaceholder("gdscript-protocol", "gdscriptProtocol", builder, element, parserContext);
|
||||
resolvePlaceholder("cpp-protocol", "cppProtocol", builder, element, parserContext);
|
||||
resolvePlaceholder("go-protocol", "goProtocol", builder, element, parserContext);
|
||||
resolvePlaceholder("protobuf-protocol", "protobufProtocol", builder, element, parserContext);
|
||||
|
||||
// 文件是否折叠
|
||||
resolvePlaceholder("fold-protocol", "foldProtocol", builder, element, parserContext);
|
||||
// 生成各种语言的协议列表
|
||||
resolvePlaceholder("protocol-list", "protocolList", builder, element, parserContext);
|
||||
|
||||
resolvePlaceholder("protocol-path", "protocolPath", builder, element, parserContext);
|
||||
|
||||
|
||||
@@ -65,15 +65,8 @@
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="id" type="xsd:string" use="required"/>
|
||||
<xsd:attribute name="protocol-location" type="xsd:string" use="required"/>
|
||||
<xsd:attribute name="javascript-protocol" type="xsd:string" default="false"/>
|
||||
<xsd:attribute name="typescript-protocol" type="xsd:string" default="false"/>
|
||||
<xsd:attribute name="csharp-protocol" type="xsd:string" default="false"/>
|
||||
<xsd:attribute name="lua-protocol" type="xsd:string" default="false"/>
|
||||
<xsd:attribute name="gdscript-protocol" type="xsd:string" default="false"/>
|
||||
<xsd:attribute name="cpp-protocol" type="xsd:string" default="false"/>
|
||||
<xsd:attribute name="go-protocol" type="xsd:string" default="false"/>
|
||||
<xsd:attribute name="protobuf-protocol" type="xsd:string" default="false"/>
|
||||
<xsd:attribute name="fold-protocol" type="xsd:string" default="false"/>
|
||||
<xsd:attribute name="protocol-list" type="xsd:string" default="0"/>
|
||||
<xsd:attribute name="protocol-path" type="xsd:string"/>
|
||||
<xsd:attribute name="protocol-param" type="xsd:string"/>
|
||||
</xsd:complexType>
|
||||
|
||||
Reference in new issue
Block a user