Not able to receive group message using smack

可紊 提交于 2019-11-29 15:36:12

What I did:

First Join in to the GroupChat, then create a custom listener to get the missed messages and on the onSuccess add the messageListener. That is provide me the history messages in a List<> and after that the app start listen the new Message coming from this GroupChat.

public void joinToGroupChat(final MultiUserChat multiUserChat, final OpenFireListener<List<Message>> listener) {

    if (!multiUserChat.isJoined()) {
       multiUserChat.join(connection.getUser().getResourcepart());
    }

    getPendingMessages(multiUserChat, new OpenFireListener<List<Message>>() {
        @Override
        public void onSuccess(List<Message> result) {
            multiUserChat.addMessageListener(messageListener);
            listener.onSuccess(result);
        }

        @Override
        public void onError(String message) {
            listener.onError(message);
        }
    });
}

private MessageListener messageListener = new MessageListener() {
    @Override
    public void processMessage(Message message) {
        //I only use the subject and body in my project
        listener.notifyMessage(message.getSubject(), message.getBody());
    }
};

Make sure that you are joined into the GroupChat in the same context and implemented your custom listener. This is my generic implementation.

public interface OpenFireListener<T>{
    void onSuccess(T result);
    void onError(String message);
}

public interface OpenFireServerListener {
    enum STATE {ERROR, CONNECTION_CLOSED, RECONNECTION_SUCCESS, RECONNECTION_FAILED, AUTHENTICATED, NOT_AUTHORIZED, CONNECTED}

    void notifyStatusOpenFireServer(STATE state, String message);
    void notifyMessage(String streamName, String streamId);

}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!