游戏逻辑服介绍
从架构简图中,我们知道了整体架构由三部分组成,分别是 1.游戏对外服、2.游戏网关、3.游戏逻辑服,三者既可相互独立,又可相互融合。
游戏逻辑服在架构图位置的右边部分,GameLogicServer。
介绍
游戏逻辑服的职责是处理具体的业务逻辑,也就是我们编写的 action。
如何安装
如果你是初次体验或想快速了解框架的,在 pom.xml 添加如下内容,
run-one-netty 已经包含了游戏对外服、Broker(游戏网关)、游戏逻辑服。
pom.xml
<dependency>
    <groupId>com.iohao.game</groupId>
    <artifactId>run-one-netty</artifactId>
    <version>${ioGame.version}</version>
</dependency>
通常在实际开发中,比较推荐的做法中单独为游戏逻辑服创建一个模块,并在 pom.xml 中添加如下内容
see https://central.sonatype.com/artifact/com.iohao.game/bolt-client
pom.xml
<dependency>
    <groupId>com.iohao.game</groupId>
    <artifactId>bolt-client</artifactId>
    <version>${ioGame.version}</version>
</dependency>
创建游戏对外服
游戏逻辑服需要继承 AbstractBrokerClientStartup , 有三个方法需要实现
- createBarSkeleton,当前游戏逻辑服使用的业务框架。
 - createBrokerClientBuilder,当前游戏逻辑服信息。
 - createBrokerAddress,游戏网关的连接地址。
 
代码说明
- code 4,业务框架构建器参数
 - code 5,扫描 action 类所在包。 内部会扫描当前类路径和子包路径下的所有类,无论有多少个 action 类,只需要配置任意一个类就行。
 - code 7,创建业务框架构建器
 - code 8,添加控制台输出插件
 - code 10,创建业务框架
 - code 14~18,创建游戏逻辑服构建器,并设置逻辑服名称。
 - code 21~25,设置连接到 Broker 的地址。
 
public class DemoLogicServer extends AbstractBrokerClientStartup {
    @Override
    public BarSkeleton createBarSkeleton() {
        var config = new BarSkeletonBuilderParamConfig()
                .scanActionPackage(DemoAction.class);
        var builder = config.createBuilder();
        builder.addInOut(new DebugInOut());
        return builder.build();
    }
    @Override
    public BrokerClientBuilder createBrokerClientBuilder() {
        BrokerClientBuilder builder = BrokerClient.newBuilder();
        builder.appName("DemoLogicServer");
        return builder;
    }
    @Override
    public BrokerAddress createBrokerAddress() {
        String localIp = "127.0.0.1";
        int brokerPort = IoGameGlobalConfig.brokerPort;
        return new BrokerAddress(localIp, brokerPort);
    }
}
startupSuccess
游戏逻辑服启动成功后,会执行 startupSuccess 方法。 开发者可以在这里做一些业务逻辑,如
public class DemoLogicServer extends AbstractBrokerClientStartup {
    ...
    @Override
    public void startupSuccess(BrokerClient brokerClient) {
        // BarSkeleton barSkeleton = brokerClient.getBarSkeleton();
        // ExecutorRegion executorRegion = barSkeleton.getExecutorRegion();
        // EventBus eventBus = barSkeleton.option(SkeletonAttr.eventBus);
        // barSkeleton.option(SkeletonAttr.brokerClientContext);
    }
}
启动
public static void main(String[] args) {
    BrokerClientApplication.start(new DemoLogicServer());
}