[英]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.