43 lines
1.4 KiB
Kotlin
43 lines
1.4 KiB
Kotlin
package org.mercury_im.messenger.core.connection
|
|
|
|
|
|
import org.mercury_im.messenger.entity.message.Message as MercuryMessage;
|
|
import org.jivesoftware.smack.packet.Message as SmackMessage;
|
|
|
|
import java.util.UUID
|
|
|
|
import io.reactivex.Completable
|
|
import io.reactivex.Single
|
|
import org.mercury_im.messenger.core.util.AppendCompletableToSingle
|
|
import org.mercury_im.messenger.entity.chat.Chat
|
|
|
|
class MessageCenter(private val composer: Composer,
|
|
private val persister: Persister,
|
|
private val encryptor: Encryptor,
|
|
private val sender: Sender) {
|
|
|
|
fun sendSingleTextMessage(chat: Chat, body: String): Single<UUID> {
|
|
val messageEntity = composer.createChatMessage(chat, body)
|
|
val messageId = persister.persistPendingMessage(messageEntity)
|
|
val smackMessage = encryptor.encrypt(messageEntity)
|
|
val sendCompletable = sender.send(smackMessage);
|
|
return messageId.compose(AppendCompletableToSingle(sendCompletable));
|
|
}
|
|
|
|
interface Composer {
|
|
fun createChatMessage(chat: Chat, body: String): MercuryMessage
|
|
}
|
|
|
|
interface Persister {
|
|
fun persistPendingMessage(message: MercuryMessage): Single<UUID>
|
|
}
|
|
|
|
interface Encryptor {
|
|
fun encrypt(message: MercuryMessage): SmackMessage
|
|
}
|
|
|
|
interface Sender {
|
|
fun send(message: SmackMessage): Completable
|
|
}
|
|
}
|