Browse Source

解决事件监听器报错

johnclot69 3 months ago
parent
commit
911f2de24d

+ 5 - 0
incubator-core/src/main/java/events/EventListener.java

@@ -0,0 +1,5 @@
+package events;
+
+public interface EventListener {
+    void handle(WebSocketMessageEvent event);
+}

+ 2 - 1
incubator-core/src/main/java/message/MessageHandlerSystem.java

@@ -2,6 +2,7 @@ package message;
 
 import com.artemis.BaseSystem;
 import com.artemis.annotations.Wire;
+import events.EventListener;
 import events.WebSocketMessageEvent;
 import protocol.Message;
 
@@ -16,7 +17,7 @@ import java.util.Map;
  * 3. 路由消息到对应的处理器
  */
 @Wire
-public class MessageHandlerSystem extends BaseSystem {
+public class MessageHandlerSystem extends BaseSystem implements EventListener {
     // key:cmd value:handler处理器
     private final Map<Integer, MessageHandler> handlers = new HashMap<>();
 

+ 6 - 2
incubator-core/src/main/java/message/WebSocketEventDispatcherSystem.java

@@ -4,8 +4,13 @@ import com.artemis.BaseSystem;
 
 import com.artemis.utils.reflect.ClassReflection;
 import com.artemis.utils.reflect.ReflectionException;
+import events.EventListener;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
-import java.util.*;
 
 /**
  * 自定义事件分发系统(需注册到Artemis世界)
@@ -48,5 +53,4 @@ public class WebSocketEventDispatcherSystem extends BaseSystem {
         // 事件系统通过dispatch方法触发,无需每帧处理
     }
 
-    public interface EventListener {}
 }

+ 2 - 1
incubator-core/src/main/java/network/WebSocketHandler.java

@@ -3,6 +3,7 @@ package network;
 import com.artemis.World;
 import events.WebSocketConnectedEvent;
 import events.WebSocketDisconnectedEvent;
+import events.WebSocketMessageEvent;
 import io.netty.channel.Channel;
 import message.WebSocketEventDispatcherSystem;
 import protocol.Message;
@@ -28,7 +29,7 @@ public class WebSocketHandler extends SimpleChannelInboundHandler<Message> {
     protected void channelRead0(ChannelHandlerContext ctx, Message msg) {
         System.out.println("Received message: " + msg);
         // 通过Artemis事件系统分发携带完整消息对象的事件
-        this.eventDispatcher.dispatch(new WebSocketConnectedEvent(ctx.channel()));
+        this.eventDispatcher.dispatch(new WebSocketMessageEvent(ctx.channel(), msg));
     }
 
     @Override