package org.mercury_im.xmpp.connection.message; import org.jivesoftware.smack.chat2.Chat; import org.jivesoftware.smack.chat2.ChatManager; import org.jivesoftware.smack.packet.Message; import org.jivesoftware.smackx.sid.element.OriginIdElement; import org.mercury_im.core.message.MessageCenter; import org.mercury_im.messenger.xmpp.entity.XmppAccount; import org.mercury_im.messenger.xmpp.entity.XmppAddress; import org.mercury_im.messenger.xmpp.entity.chat.XmppDirectChat; import org.mercury_im.messenger.xmpp.entity.message.XmppMessage; import org.mercury_im.messenger.xmpp.entity.message.XmppMessageMetadata; import io.reactivex.Completable; public class XmppDirectMessageCenter implements MessageCenter< XmppMessage.DirectMessage, XmppDirectChat, XmppAddress.XmppUserAddress, XmppMessageMetadata, XmppAccount> { @Override public Completable sendMessage(XmppMessage.DirectMessage message, XmppDirectChat chat) { ChatManager chatManager = getChatManager(chat); Message smackMessage = new Message(); smackMessage.setFrom(chat.getAccount().getAddress().getJid()); smackMessage.setTo(chat.getInterlocutor().getAddress().getJid()); smackMessage.setType(Message.Type.chat); OriginIdElement.addOriginId(smackMessage); Chat smackChat = chatManager.chatWith(chat.getInterlocutor().getAddress().getJid()); return Completable.fromAction( () -> smackChat.send(smackMessage)); } @Override public void addIncomingMessageListener() { } protected ChatManager getChatManager(XmppDirectChat chat) { return null; } }