Java 自定义事件处理程序和侦听器

Java custom event handler and listeners

我目前正在研究 Socket.io 的 Java 实现,可在此处获取:netty-socketio

我已经启动了服务器并 运行ning,它的 receiving/sending 消息在客户端和服务器之间很好地传递,但是我需要在接收到某些消息时触发事件,这就是那里我很困惑。

这是我的代码:

server.addEventListener("message", clientData.class, new DataListener<clientData>() {
    @Override
    public void onData(SocketIOClient client, clientData data, AckRequest ackRequest) throws Exception {
                System.out.println("Message from client: " + data.getMessage());

    }
});


public class ClientData{

    String message;

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

}

基本上我想要发生的是当从客户端接收到特定消息时,我需要另一个 class 到 运行 中的函数。我花了最后两个小时阅读有关 ObservableObserverInterfaces 和事件处理程序的内容,但我真的不确定如何设置它。

图书馆也提到了这个 DataListener,但我不知道那是什么,因为图书馆中的文档很少。

如有任何意见或建议,我们将不胜感激。

假设引发事件的 class 名为 A。而需要监听事件的class被称为B。事件名为 SomeEvent.

首先,创建一个名为SomeEventListener的接口:

public interface SomeEventListener {
    void onSomeEvent ();
}

如果有您想要在事件发生时传递的参数(通常是关于事件的一些信息),您可以将其添加到方法中。

然后在A中添加一个字段:

private SomeEventListener listener;

和一个方法:

public void setSomeEventListener (SomeEventListener listener) {
    this.listener = listener;
}

这样,B就可以调用setSomeEventListener来设置监听了。

当事件发生时,A应该调用

if (listener != null) listener.onSomeEvent ();

这就是 A 的全部内容!

B中,需要实现接口:

public class B implements SomeEventListener {
    public void onSomeEvent () {
        //do whatever you like when SomeEvent happens.
    }
}

您可以像这样收听 SomeEvent

someInstanceOfA.setSomeEventListener (this);

并且在这个调用之后,A提出的所有SomeEvent都可以被B监听!

使用 Observable 和 Observer 模式,我们可以看到 A 是一个 Observable 而 B 是一个观察者。

这很简单!