Java自定义事件处理程序和侦听器
我目前正在使用Socket.io的Java实现,可在此处获取: netty-socketio
我已经启动并运行了服务器,它在客户端和服务器之间很好地接收/发送消息,但是我需要在接收到某些消息时触发事件,这就是我感到困惑的地方。
这是我的代码:
server.addEventListener("message", clientData.class, new DataListener() { @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
,但我不知道那是什么,因为库中的文档很少。
任何意见或建议将不胜感激。
谢谢
让我们说你举起这个事件的class级叫做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
是Observer。
这很简单!