Skip to content

Commit 457331b

Browse files
committed
attempt at a few different stream techiniques
1 parent fc86eed commit 457331b

File tree

5 files changed

+39
-39
lines changed

5 files changed

+39
-39
lines changed

dev/local/docker-compose.yml

+5
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,11 @@ services:
2323
image: xmtp/mls-validation-service:latest
2424
platform: linux/amd64
2525

26+
db:
27+
image: postgres:13
28+
environment:
29+
POSTGRES_PASSWORD: xmtp
30+
2631
mlsdb:
2732
image: postgres:13
2833
environment:

library/src/androidTest/java/org/xmtp/android/library/GroupTest.kt

+4
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ import androidx.test.ext.junit.runners.AndroidJUnit4
44
import androidx.test.platform.app.InstrumentationRegistry
55
import app.cash.turbine.test
66
import kotlinx.coroutines.ExperimentalCoroutinesApi
7+
import kotlinx.coroutines.flow.collect
8+
import kotlinx.coroutines.launch
79
import kotlinx.coroutines.runBlocking
810
import org.junit.Assert.assertEquals
911
import org.junit.Assert.assertThrows
@@ -18,6 +20,7 @@ import org.xmtp.android.library.codecs.ReactionSchema
1820
import org.xmtp.android.library.messages.PrivateKey
1921
import org.xmtp.android.library.messages.PrivateKeyBuilder
2022
import org.xmtp.android.library.messages.walletAddress
23+
import kotlin.time.Duration
2124

2225
@RunWith(AndroidJUnit4::class)
2326
class GroupTest {
@@ -212,6 +215,7 @@ class GroupTest {
212215
}
213216
}
214217

218+
@OptIn(ExperimentalCoroutinesApi::class)
215219
@Test
216220
fun testCanStreamGroups() = kotlinx.coroutines.test.runTest {
217221
boClient.conversations.streamGroups().test {

library/src/main/java/org/xmtp/android/library/Conversations.kt

+5
Original file line numberDiff line numberDiff line change
@@ -24,17 +24,22 @@ import org.xmtp.android.library.messages.Topic
2424
import org.xmtp.android.library.messages.createDeterministic
2525
import org.xmtp.android.library.messages.decrypt
2626
import org.xmtp.android.library.messages.getInvitation
27+
import org.xmtp.android.library.messages.getPublicKeyBundle
2728
import org.xmtp.android.library.messages.header
2829
import org.xmtp.android.library.messages.involves
2930
import org.xmtp.android.library.messages.recipientAddress
3031
import org.xmtp.android.library.messages.senderAddress
3132
import org.xmtp.android.library.messages.sentAt
33+
import org.xmtp.android.library.messages.toPublicKeyBundle
3234
import org.xmtp.android.library.messages.toSignedPublicKeyBundle
35+
import org.xmtp.android.library.messages.toV2
3336
import org.xmtp.android.library.messages.walletAddress
3437
import org.xmtp.proto.keystore.api.v1.Keystore.TopicMap.TopicData
3538
import org.xmtp.proto.message.contents.Contact
3639
import org.xmtp.proto.message.contents.Invitation
40+
import uniffi.xmtpv3.FfiConversationCallback
3741
import uniffi.xmtpv3.FfiConversations
42+
import uniffi.xmtpv3.FfiGroup
3843
import uniffi.xmtpv3.FfiListConversationsOptions
3944
import uniffi.xmtpv3.org.xmtp.android.library.libxmtp.GroupEmitter
4045
import java.util.Date

library/src/main/java/org/xmtp/android/library/Group.kt

+25-22
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,21 @@
11
package org.xmtp.android.library
22

3-
import kotlinx.coroutines.coroutineScope
3+
import android.util.Log
4+
import kotlinx.coroutines.channels.awaitClose
45
import kotlinx.coroutines.flow.Flow
5-
import kotlinx.coroutines.flow.flow
6-
import kotlinx.coroutines.launch
6+
import kotlinx.coroutines.flow.callbackFlow
77
import kotlinx.coroutines.runBlocking
88
import org.xmtp.android.library.codecs.ContentCodec
99
import org.xmtp.android.library.codecs.EncodedContent
1010
import org.xmtp.android.library.codecs.compress
1111
import org.xmtp.android.library.libxmtp.Message
12-
import org.xmtp.android.library.libxmtp.MessageEmitter
1312
import org.xmtp.android.library.messages.DecryptedMessage
1413
import org.xmtp.android.library.messages.PagingInfoSortDirection
1514
import org.xmtp.proto.message.api.v1.MessageApiOuterClass
1615
import uniffi.xmtpv3.FfiGroup
1716
import uniffi.xmtpv3.FfiListMessagesOptions
17+
import uniffi.xmtpv3.FfiMessage
18+
import uniffi.xmtpv3.FfiMessageCallback
1819
import java.util.Date
1920
import kotlin.time.Duration.Companion.nanoseconds
2021
import kotlin.time.DurationUnit
@@ -142,31 +143,33 @@ class Group(val client: Client, private val libXMTPGroup: FfiGroup) {
142143
}
143144
}
144145

145-
fun streamMessages(): Flow<DecodedMessage> = flow {
146-
val messageEmitter = MessageEmitter()
147-
148-
coroutineScope {
149-
launch {
150-
messageEmitter.messages.collect { message ->
151-
emit(Message(client, message).decode())
152-
}
146+
fun streamMessages(): Flow<DecodedMessage> = callbackFlow {
147+
val messageCallback = object : FfiMessageCallback {
148+
override fun onMessage(message: FfiMessage) {
149+
Log.e(
150+
"LOPI",
151+
"INFO Callback - Message callback with ID: " + message.id.toHex() + ", members: " + message.addrFrom
152+
)
153+
trySend(Message(client, message).decode())
153154
}
154155
}
155156

156-
libXMTPGroup.stream(messageEmitter.callback)
157+
val stream = libXMTPGroup.stream(messageCallback)
158+
awaitClose { stream.end() }
157159
}
158160

159-
fun streamDecryptedMessages(): Flow<DecryptedMessage> = flow {
160-
val messageEmitter = MessageEmitter()
161-
162-
coroutineScope {
163-
launch {
164-
messageEmitter.messages.collect { message ->
165-
emit(decrypt(Message(client, message)))
166-
}
161+
fun streamDecryptedMessages(): Flow<DecryptedMessage> = callbackFlow {
162+
val messageCallback = object : FfiMessageCallback {
163+
override fun onMessage(message: FfiMessage) {
164+
Log.e(
165+
"LOPI",
166+
"INFO Callback - Message callback with ID: " + message.id.toHex() + ", members: " + message.addrFrom
167+
)
168+
trySend(decrypt(Message(client, message)))
167169
}
168170
}
169171

170-
libXMTPGroup.stream(messageEmitter.callback)
172+
val stream = libXMTPGroup.stream(messageCallback)
173+
awaitClose { stream.end() }
171174
}
172175
}

library/src/main/java/org/xmtp/android/library/libxmtp/MessageEmitter.kt

-17
This file was deleted.

0 commit comments

Comments
 (0)