# Server模块 [![](https://img.shields.io/badge/simple--robot--module-debugger-green)](https://github.com/ForteScarlet/simple-robot-core) [![](https://img.shields.io/maven-central/v/love.forte.simple-robot-module/simple-robot-module-debugger-server)](https://search.maven.org/artifact/love.forte.simple-robot-module/simple-robot-module-debugger-server) 依赖于Common模块,在程序启动后启动一个socket服务端来支持远程debug。其对应的客户端为后续会介绍到的`client`模块。 >[info] server 模块一般用于使用在对那些难以本地debug的组件使用,例如JCQ组件。 <br> ## **简介** server会在程序中开启一个socket服务,并监听来自于client的连接。 当client连接后,便可以通过client向server提交事件并触发server端的监听事件,以实现远程通过client对server进行调试。 当配置中的`simbot.module.debugger.listen=true`的时候,server中所触发的其他非debug监听事件的时候,会将此事件提交给client,实现通过client监听server端的事件。 但是需要注意的是,不论事件提交为`client -> server`还是`server -> client`,他们所接收到的`MsgGet`实例永远是`debugger-common`模块中提供的debugger特供的实例,不属于任何组件。 一个server可连接多个client。 <br> ## **使用** ### **① 构建项目** 以maven为例: (版本参考maven仓库或者此文档上方的版本号图标) ```xml <!-- https://search.maven.org/artifact/love.forte.simple-robot-module/simple-robot-module-debugger-server--> <dependency> <groupId>love.forte.simple-robot-module</groupId> <artifactId>simple-robot-module-debugger-server</artifactId> <version>${project.version}</version> </dependency> ``` <br> ### **② 配置文件** ```properties # suppress inspection "UnusedProperty" for whole file # debugger server # debug server socket服务监听端口, 默认9998 simbot.module.debugger.port=9998 # debug server socket服务记录所有客户端的group name。一般应该不用管,因为我忘了这个是干嘛的了 # simbot.module.debugger.groupName=debugger_server # 如果为true,则会注册一个消息拦截器,并上报一切非DebugMsg的监听消息,默认为false simbot.module.debugger.listen=false ``` <br> ## **③ 使用** 一般来讲,当运行环境中存在server模组的时候,server将会自动被启动,无需额外启动代码。 但是当你需要一些额外的操作的时候,也是可以的,例如主动向client提交一些事件。 ```java // 如果不用接口启动,则记得标注注解。默认的配置文件的文件名为:simple-robot-conf.properties @SimpleRobotApplication public class DebugServerRunApplication { public static void main(String[] args) { DebugContext context = new DebugApplication().run(DebugServerRunApplication.class, args); // debug控制器, 此处是server controller DebugController controller = context.getController(); // 如果要主动通过debug server向client提交事件: // send(...), 这个是发送指定类型的消息 // controller.send(MsgGetTypes.privateMsg, msg -> { // System.out.println("随机的msg为:" + msg); // // 手动设置bot的账号为一个固定值 // msg.setThisCode("1149159218"); // }); // 随机消息 // controller.sendRandom(); // 随机消息 // controller.sendRandom(msg -> { // System.out.println("随机的msg为:" + msg); // // 手动设置bot的账号为一个固定值 // msg.setThisCode("1149159218"); // }); // 如果 server被关闭了,则会跳出循环,执行下一句 while(controller.isActive()){ } System.out.println("out - not active"); } } ``` >[info] 正常情况下,server的socket服务不会自动关闭。 <br>