Releases: iohao/ioGame
21.34
21.34 Release Notes
This release focuses on improving the stability and readability of HTTP-related Netty handlers introduced after 21.32.
Highlights
- Refined HTTP handler flow in external-netty
- Simplified HttpFallbackHandler.channelRead with early-return control flow for clearer behavior.
- Simplified HttpRealIpHandler by removing unnecessary try/finally and manual ReferenceCountUtil.release(...) in pass-through scenarios.
- Safety improvement for message lifecycle handling
- Reduced risk of incorrect reference-count handling when messages are forwarded down the Netty pipeline.
- Version alignment
- Project/module versions have been updated to 21.34 across the repository.
Included commits (after 21.32)
21.32
21.31
What's Changed
- 添加环境变量配置覆盖功能 by @kolnick in #529
- fix(protobuf): handle same package proto type reference by @Rainfisher in #507
New Contributors
- @kolnick made their first contribution in #529
- @Rainfisher made their first contribution in #507
Full Changelog: 21.30...21.31
ioGame 21.30
https://github.com/iohao/ioGame/releases/tag/21.30
Version update summary
- fix(generate-code): #490 Fixed the escaping of special characters in the Listener exampleCode for the code generation module. 修复 C# 代码生成时的转义字符
ioGame 21.29
Version update summary
- #473 fix(core): Change the method name from DataSelfEncode getEncodeData to encodeData to avoid JSON serialization.
- fix(doc): #459 Supporting the referencing of classes within a JAR file in a multi-module Gradle environment.
- feat(generate-code): #452
- fix(generate-code): broadcast_action_example_action.txt、broadcast_action_example.txt
- feat(external): #469 Add HttpFallbackHandler to determine if it's a WebSocket upgrade request.
- perf(doc): Pre-create the Pb for the BroadcastDocument dataClass.
[other updates]
Upgrade reactor-netty 1.2.7、commons-io 2.19.0ioGame 21.28
Version update summary
- feat(room): The room supports convenient operations.
- Deprecated RoomStatusEnum.
- feat(room): The room supports convenient broadcastRange.
- docs(all): Update documentation link (https://iohao.github.io/game)
- #451 Refactor the usage documentation to use the new access address: https://iohao.github.io/game/
[other updates]
<netty.version>4.1.122.Final</netty.version>ioGame 21.27 GDScript SDK、GenerateCode
Documentation and Logs
Releases: 1 to 2 versions are released every month, and upgrades within a major version are always compatible, such as 21.1 is upgraded to any higher version 21.x
Version update summary
feat(generate-code): #449 Supports GDScript GenerateCode
About examples: https://github.com/iohao/ioGameSdkGDScriptExampleGodot
public final class GenerateTest {
// setting root path
static String rootPath = "/Users/join/gitme/ioGame-sdk/";
public static void main(String[] args) {
// CHINA or US
Locale.setDefault(Locale.CHINA);
// Load the business framework of each gameLogicServer
// cn: 加载游戏逻辑服的业务框架
yourListLogic().forEach(BrokerClientStartup::createBarSkeleton);
/*
* Generate actions, broadcasts, and error codes.
* cn: 生成 action、广播、错误码
*/
// ----- About generating GDScript code -----
generateCodeGDScriptGodot();
// Added an enumeration error code class to generate error code related information
IoGameDocumentHelper.addErrorCodeClass(YourGameCodeEnum.class);
// Generate document
IoGameDocumentHelper.generateDocument();
}
private static void generateCodeGDScriptGodot() {
var documentGenerate = new GDScriptDocumentGenerate();
// By default, it will be generated in the target/code directory
// cn: 设置代码生成所存放的路径,如果不做任何设置,将会生成在 target/code 目录中
String path = rootPath + "ioGameSdkGDScriptExampleGodot/gen/code";
documentGenerate.setPath(path);
IoGameDocumentHelper.addDocumentGenerate(documentGenerate);
}
}ioGame 21.26 Java Netty Game Server
Documentation and Logs
Releases: 1 to 2 versions are released every month, and upgrades within a major version are always compatible, such as 21.1 is upgraded to any higher version 21.x
Version update summary
- refactor(Code generation): Code generation supports importing multiple .proto files
- refactor(i18n): #376
Supports importing multiple .proto files
public interface SdkProtoFile {
String fileName = "common.proto";
String filePackage = "common";
String fileName2 = "common2.proto";
String filePackage2 = "common2";
}
...
@ProtoFileMerge(fileName = SdkProtoFile.fileName, filePackage = SdkProtoFile.filePackage)
public final class LoginVerifyMessage {
/** jwt */
String jwt;
}
...
@ProtoFileMerge(fileName = SdkProtoFile.fileName2, filePackage = SdkProtoFile.filePackage2)
public final class BulletMessage {
/** id */
int bulletId;
/** bullet name */
String name;
}[other updates]
<netty.version>4.1.121.Final</netty.version>ioGame 21.25 Java Netty Game Server
Documentation and Logs
Releases: 1 to 2 versions are released every month, and upgrades within a major version are always compatible, such as 21.1 is upgraded to any higher version 21.x
Version update summary
fix(broker): DefaultWithElementSelector
refactor(net): enhance ResponseCollectItemMessage
refactor(core): FlowContext add the createResponseMessage method
[other updates]
<netty.version>4.1.119.Final</netty.version>ioGame 21.24 Netty Java Game Server
Documentation and Logs
Releases: 1 to 2 versions are released every month, and upgrades within a major version are always compatible, such as 21.1 is upgraded to any higher version 21.x
Version update summary
- refactor(client): Client support boxing and unboxing
- refactor(core): FlowContextKit add ofFlowContext method
- refactor(room): room add getPlayerBySeat method
- fix(core): #425 When there is a method with the same name as the action, the
actionMethodIndexis not obtained correctly.- refactor(core): MethodParser add parseData method
[client] Client support boxing and unboxing.
// my client,support:int、long、boolean、String、List
public final class MyInputCommandRegion extends AbstractInputCommandRegion {
@Override
public void initInputCommand() {
this.inputCommandCreate.cmd = 1;
// Client support boxing and unboxing
ofCommand(2).setTitle("enterRoom").setRequestData(() -> {
// enterRoom
long roomId = 2;
return roomId;
});
// or
ofCommand(2).setTitle("enterRoom").setRequestData(() -> {
// enterRoom
return LongValue.of(2);
});
}
}
// my action
@ActionController(1)
public final class MyAction {
/**
* enterRoom
*
* @param roomId roomId
*/
@ActionMethod(2)
public void enterRoom(long roomId) {
}
}[other updates]
<netty.version>4.1.117.Final</netty.version>