[英]Java custom event handler and listeners
我目前正在使用 Socket.io 的 Java 实现,可在此处获得: netty-socketio
我已经启动并运行服务器,并且它在客户端和服务器之间很好地接收/发送消息,但是我需要在接收到某些消息时触发事件,这就是我感到困惑的地方。
这是我的代码:
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;
}
}
基本上我想要发生的是当从客户端接收到特定消息时,我需要另一个类中的函数来运行。 在过去的两个小时里,我一直在阅读Observable
、 Observer
、 Interfaces
和事件处理程序,但我真的不知道如何设置它。
该库还提到了这个DataListener
,但我不知道那是什么,因为库中的文档很少。
对此的任何意见或建议将不胜感激。
假设您引发事件的类称为A
。 需要监听事件的类称为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
是一个观察者。
这很容易!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.