Skip to content

Commit

Permalink
perf(dev): 优化
Browse files Browse the repository at this point in the history
  • Loading branch information
cnlimiter committed Feb 21, 2024
1 parent e17e257 commit a8206df
Show file tree
Hide file tree
Showing 8 changed files with 70 additions and 18 deletions.
3 changes: 3 additions & 0 deletions src/main/java/cn/evole/onebot/client/OneBotClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import cn.evole.onebot.client.instances.event.EventsBusImpl;
import cn.evole.onebot.client.instances.event.MsgHandlerImpl;
import cn.evole.onebot.client.interfaces.EventsBus;
import cn.evole.onebot.client.internal.TestHandler;
import lombok.Getter;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
Expand Down Expand Up @@ -61,6 +62,8 @@ public void create() {
logger.error("▌ §c{}连接错误,请检查服务端是否开启 §a┈━═☆", URI.create(builder.toString()));
}
});

eventsBus.register(new TestHandler(this));
}

public boolean close() {
Expand Down
17 changes: 17 additions & 0 deletions src/main/java/cn/evole/onebot/client/annotations/EventBus.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package cn.evole.onebot.client.annotations;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
* @Project: onebot-client
* @Author: cnlimiter
* @CreateTime: 2024/2/20 10:12
* @Description:
*/
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface EventBus {
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@

@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface EventHandler {
public @interface SubscribeEvent {
/**
* 内部注册的处理器优先度更高
* @return 是否内部注册
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package cn.evole.onebot.client.instances.event;

import cn.evole.onebot.client.annotations.EventHandler;
import cn.evole.onebot.client.annotations.SubscribeEvent;
import cn.evole.onebot.client.interfaces.Listener;
import net.kyori.event.PostOrders;
import net.kyori.event.method.MethodScanner;
Expand All @@ -24,12 +24,12 @@ private MethodScannerImpl() {

@Override
public boolean shouldRegister(@NonNull Listener listener, @NonNull Method method) {
return Modifier.isPublic(method.getModifiers()) && method.isAnnotationPresent(EventHandler.class);
return Modifier.isPublic(method.getModifiers()) && method.isAnnotationPresent(SubscribeEvent.class);
}

@Override
public int postOrder(@NonNull Listener listener, @NonNull Method method) {
return method.getAnnotation(EventHandler.class).internal() ? PostOrders.EARLY : PostOrders.NORMAL;
return method.getAnnotation(SubscribeEvent.class).internal() ? PostOrders.EARLY : PostOrders.NORMAL;
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,15 +41,16 @@ public void handle(String msg) {
if (msg == null) client.getLogger().warn("▌ §c消息体为空");
assert msg != null;
try {
val json = TransUtils.arrayToMsg(GsonUtils.parse(msg));
client.getLogger().debug(json.toString());
if (!META_HEART_BEAT.equals(GsonUtils.getAsString(json, META_EVENT))) {
client.getEventExecutor().execute(() -> {
synchronized (lck) {
event(json);
}
});
}
JsonObject json = GsonUtils.parse(msg);
if (json.has(META_EVENT)) return;
val json2 = TransUtils.arrayToMsg(GsonUtils.parse(msg));
client.getLogger().info(json2.toString());
client.getEventExecutor().execute(() -> {
synchronized (lck) {
event(json2);
}
});

} catch (
JsonSyntaxException e) {
client.getLogger().error("▌ §cJson语法错误:{}", msg);
Expand Down
25 changes: 25 additions & 0 deletions src/main/java/cn/evole/onebot/client/internal/TestHandler.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package cn.evole.onebot.client.internal;

import cn.evole.onebot.client.OneBotClient;
import cn.evole.onebot.client.annotations.SubscribeEvent;
import cn.evole.onebot.client.interfaces.Listener;
import cn.evole.onebot.sdk.event.message.GroupMessageEvent;

/**
* @Project: onebot-client
* @Author: cnlimiter
* @CreateTime: 2024/2/20 9:57
* @Description:
*/

public class TestHandler implements Listener {
OneBotClient client;
public TestHandler(OneBotClient client){
this.client = client;
}

@SubscribeEvent(internal = true)
public void msg1(GroupMessageEvent event){
client.getLogger().info(event);
}
}
3 changes: 2 additions & 1 deletion src/main/java/cn/evole/onebot/client/utils/TransUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,12 @@
public class TransUtils {

public static JsonObject arrayToMsg(JsonObject json){
if (json.has("raw_message")) return json;
if (json.has("message") && GsonUtils.isArrayNode(json, "message")){
List<ArrayMsg> msg = GsonUtils.fromJson(json.getAsJsonArray("message"), new TypeToken<List<ArrayMsg>>() {
}.getType());
String code = BotUtils.arrayMsgToCode(msg);
json.addProperty("array_msg", code);
json.addProperty("trans_msg", code);
}
return json;
}
Expand Down
13 changes: 9 additions & 4 deletions src/test/java/HandlerTest.java
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
import cn.evole.onebot.client.OneBotClient;
import cn.evole.onebot.client.annotations.EventHandler;
import cn.evole.onebot.client.annotations.SubscribeEvent;
import cn.evole.onebot.client.core.BotConfig;
import cn.evole.onebot.client.interfaces.Listener;
import cn.evole.onebot.sdk.event.message.GroupMessageEvent;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

/**
* @Project: onebot-client
Expand All @@ -13,16 +15,19 @@

public class HandlerTest implements Listener {
static OneBotClient client;
static Logger logger;

public static void main(String[] args) throws InterruptedException {
logger = LogManager.getLogger("OneBot Client1");
BotConfig config = new BotConfig("ws://127.0.0.1:9999");
client = new OneBotClient(config);
client.create();
client.getEventsBus().register(new HandlerTest());
//client.getEventsBus().register(new HandlerTest());
}

@EventHandler(internal = true)
@SubscribeEvent(internal = true)
public void msg1(GroupMessageEvent event){
System.out.println(event);
logger.info(event);
//System.out.println(event);
}
}

0 comments on commit a8206df

Please sign in to comment.