Java:从另一个类扩展侦听器方法的功能

时间:2016-05-07 05:58:40

标签: java inheritance xmpp smack

我想为所有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()方法将消息推送到其他类。

1 个答案:

答案 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);

}
}