From dc46b9f7fbc0a1a3af8967ab47186cb27bad0212 Mon Sep 17 00:00:00 2001
From: Kamal Bramwell <kamal@elixxir.io>
Date: Thu, 27 Oct 2022 14:02:30 -0400
Subject: [PATCH] Implemented GroupChatMessage and GroupMessageListener

---
 .../xxclient/callbacks/GroupMessageListener.kt  | 17 +++++++++++++----
 .../java/io/elixxir/xxclient/group/Group.kt     | 10 ++++++----
 .../elixxir/xxclient/models/GroupChatMessage.kt | 12 ++++++++++++
 .../io/elixxir/xxclient/models/GroupMember.kt   | 12 ++++++++++++
 4 files changed, 43 insertions(+), 8 deletions(-)
 create mode 100644 xxclient/src/main/java/io/elixxir/xxclient/models/GroupChatMessage.kt
 create mode 100644 xxclient/src/main/java/io/elixxir/xxclient/models/GroupMember.kt

diff --git a/xxclient/src/main/java/io/elixxir/xxclient/callbacks/GroupMessageListener.kt b/xxclient/src/main/java/io/elixxir/xxclient/callbacks/GroupMessageListener.kt
index 4947c26..c08dcd1 100644
--- a/xxclient/src/main/java/io/elixxir/xxclient/callbacks/GroupMessageListener.kt
+++ b/xxclient/src/main/java/io/elixxir/xxclient/callbacks/GroupMessageListener.kt
@@ -1,16 +1,20 @@
 package io.elixxir.xxclient.callbacks
 
 import bindings.GroupChatProcessor
+import io.elixxir.xxclient.models.BindingsModel.Companion.decode
+import io.elixxir.xxclient.models.GroupChatMessage
+import io.elixxir.xxclient.utils.ReceptionId
+import io.elixxir.xxclient.utils.RoundId
 
 interface GroupMessageListener {
     val name: String
 
     fun onMessageReceived(
-        decryptedMessage: ByteArray?,
+        decryptedMessage: GroupChatMessage?,
         message: ByteArray?,
-        receptionId: ByteArray?,
+        receptionId: ReceptionId?,
         ephemeralId: Long,
-        roundId: Long,
+        roundId: RoundId,
         error: Exception?
     )
 }
@@ -27,7 +31,12 @@ open class GroupChatProcessorAdapter(
         error: Exception?
     ) {
         listener.onMessageReceived(
-            decryptedMessage, message, receptionId, ephemeralId, roundId, error
+            decode<GroupChatMessage>(decryptedMessage),
+            message,
+            receptionId,
+            ephemeralId,
+            roundId,
+            error
         )
     }
 
diff --git a/xxclient/src/main/java/io/elixxir/xxclient/group/Group.kt b/xxclient/src/main/java/io/elixxir/xxclient/group/Group.kt
index ee3d291..a174b49 100644
--- a/xxclient/src/main/java/io/elixxir/xxclient/group/Group.kt
+++ b/xxclient/src/main/java/io/elixxir/xxclient/group/Group.kt
@@ -1,13 +1,15 @@
 package io.elixxir.xxclient.group
 
+import io.elixxir.xxclient.models.BindingsModel.Companion.decodeArray
+import io.elixxir.xxclient.models.GroupMember
 import bindings.Group as GroupBindings
 
 interface Group {
     val createdMs: Long
-    val createdNano:Long
+    val createdNano: Long
     val id: ByteArray
     val initMessage: ByteArray
-    val membership:ByteArray
+    val membership: List<GroupMember>
     val name: ByteArray
     val serialize: ByteArray
 }
@@ -23,8 +25,8 @@ open class GroupAdapter(
         get() = group.id
     override val initMessage: ByteArray
         get() = group.initMessage
-    override val membership: ByteArray
-        get() = group.membership
+    override val membership: List<GroupMember>
+        get() = decodeArray(group.membership)
     override val name: ByteArray
         get() = group.name
     override val serialize: ByteArray
diff --git a/xxclient/src/main/java/io/elixxir/xxclient/models/GroupChatMessage.kt b/xxclient/src/main/java/io/elixxir/xxclient/models/GroupChatMessage.kt
new file mode 100644
index 0000000..d28624e
--- /dev/null
+++ b/xxclient/src/main/java/io/elixxir/xxclient/models/GroupChatMessage.kt
@@ -0,0 +1,12 @@
+package io.elixxir.xxclient.models
+
+import io.elixxir.xxclient.utils.Payload
+import io.elixxir.xxclient.utils.UserId
+
+data class GroupChatMessage(
+    val groupId: ByteArray,
+    val senderId: UserId,
+    val messageId: ByteArray,
+    val payload: Payload,
+    val timestamp: Long
+) : BindingsModel
\ No newline at end of file
diff --git a/xxclient/src/main/java/io/elixxir/xxclient/models/GroupMember.kt b/xxclient/src/main/java/io/elixxir/xxclient/models/GroupMember.kt
new file mode 100644
index 0000000..153fea7
--- /dev/null
+++ b/xxclient/src/main/java/io/elixxir/xxclient/models/GroupMember.kt
@@ -0,0 +1,12 @@
+package io.elixxir.xxclient.models
+
+
+data class GroupMember(
+    val id: ByteArray,
+    val dhKey: DHKey
+) : BindingsModel
+
+data class DHKey(
+    val value: String,
+    val fingerprint: Int
+) : BindingsModel
\ No newline at end of file
-- 
GitLab