我想为所有smack的基本方法创建一个单独的类,如连接,登录,发送消息,接收消息。
所以,有一个接收消息的监听器方法。
static ChatManagerListener chatManagerListener = new ChatManagerListener() {
@Override
public void chatCreated(Chat chat, boolean createdLocally) {
chat.addMessageListener(
new ChatMessageListener() {
@Override
public void processMessage(Chat chat, Message message) {
System.out.println("MESSAGE RECEIVED: "+message.toString());
messageReceived(message);
}
});
}
};
收到消息并传递给messageReceived()方法。
状况:
现在,当我将这个类导入到其他类中时,我想扩展此 messageReceived()方法的功能,因此整个过程仍然是抽象的,开发人员只处理传入的消息。或者,不知何故, messageReceived()方法将消息推送到其他类。
答案 0 :(得分:0)
基本上,您需要定义另一个列表管理器来管理消息。
这是一个工作片段示例(一个原型,所以它很丑,没有任何模式)来更新reciver用户的GUI。
如果你需要别的东西,请记住你需要服务器端的插件(PacketInterceptor)。
/*MessageGuiUpdate.java*/
public interface MessageGuiUpdate {
public void displayMessage(String body);
}
/*XmppManager.java*/
public void init() throws XMPPException, SmackException, IOException {
private MessageGuiUpdate guiUpdate;
//FOO
//BAR
/* init() */
this.chatManager = ChatManager.getInstanceFor(connection);
this.chatManager.addChatListener(
new ChatManagerListener() {
@Override
public void chatCreated(Chat chat, boolean createdLocally)
{
if (!createdLocally)
{
chat.addMessageListener(new IncomingMessageListener());;
}
}
});
}
/*nested class*/
class IncomingMessageListener implements ChatMessageListener {
@Override
public void processMessage(Chat arg0, Message message) {
String from = message.getFrom();
String body = message.getBody();
if (body != null)
{
System.out.println(String.format("============ Received message '%1$s' from %2$s\n============", body, from));
guiUpdate.displayMessage(body);
}
}
}
/*CustomGui.java*/
public class CustomGui implements MessageGuiUpdate {
//foo
@Override
public void displayMessage(String message) {
System.out.println("I've just recived: "+message);
}
}