From dcbfadbfb2b4087a08485b05348e4213a6e3d1a7 Mon Sep 17 00:00:00 2001 From: Kamal Bramwell <kamal@elixxir.io> Date: Tue, 23 Aug 2022 12:50:54 -0400 Subject: [PATCH] Completed Cmix & GroupChat implementations CmixAdapter and GroupChatAdapter --- .../io/elixxir/dapp/bindings/data/Cmix.kt | 26 ++++++++--- .../elixxir/dapp/bindings/data/CmixAdapter.kt | 45 ++++++++++++------- .../elixxir/dapp/bindings/data/GroupChat.kt | 13 +++--- .../dapp/bindings/data/GroupChatAdapter.kt | 31 ++++++++----- .../io/elixxir/dapp/bindings/model/Group.kt | 11 ----- .../dapp/bindings/model/GroupAdapter.kt | 20 +++++++++ .../elixxir/dapp/bindings/model/GroupInfo.kt | 7 +++ .../dapp/bindings/model/GroupMembership.kt | 4 ++ .../dapp/bindings/model/GroupReport.kt | 4 ++ .../dapp/bindings/model/HealthCallback.kt | 24 ++++++++++ .../dapp/bindings/model/HealthListenerId.kt | 4 ++ .../bindings/model/NodeRegistrationStatus.kt | 4 +- .../java/io/elixxir/dapp/user/model/User.kt | 14 +++++- 13 files changed, 155 insertions(+), 52 deletions(-) delete mode 100644 app/src/main/java/io/elixxir/dapp/bindings/model/Group.kt create mode 100644 app/src/main/java/io/elixxir/dapp/bindings/model/GroupAdapter.kt create mode 100644 app/src/main/java/io/elixxir/dapp/bindings/model/GroupInfo.kt create mode 100644 app/src/main/java/io/elixxir/dapp/bindings/model/GroupMembership.kt create mode 100644 app/src/main/java/io/elixxir/dapp/bindings/model/GroupReport.kt create mode 100644 app/src/main/java/io/elixxir/dapp/bindings/model/HealthCallback.kt create mode 100644 app/src/main/java/io/elixxir/dapp/bindings/model/HealthListenerId.kt diff --git a/app/src/main/java/io/elixxir/dapp/bindings/data/Cmix.kt b/app/src/main/java/io/elixxir/dapp/bindings/data/Cmix.kt index be20d16..ef91c1f 100644 --- a/app/src/main/java/io/elixxir/dapp/bindings/data/Cmix.kt +++ b/app/src/main/java/io/elixxir/dapp/bindings/data/Cmix.kt @@ -1,19 +1,31 @@ package io.elixxir.dapp.bindings.data -import bindings.ReceptionIdentity -import io.elixxir.dapp.bindings.model.Connection +import io.elixxir.dapp.bindings.model.* +import io.elixxir.dapp.bindings.model.Contact +import io.elixxir.dapp.bindings.model.E2eId import io.elixxir.dapp.bindings.model.NetworkFollowerStatus -import io.elixxir.dapp.bindings.model.NodeRegistrationStatus internal interface Cmix { - fun connect(): Connection - fun startNetworkFollower() + fun connect( + e2eId: E2eId, + recipientContact: Contact, + e2eParams: E2eParams + ): Connection + + fun startNetworkFollower(timeoutMs: Long) + fun stopNetworkFollower() + fun isNetworkHealthy(): Boolean - fun registerHealthCallback() - fun unregisterHealthCallback() + + fun registerHealthListener(listener: NetworkHealthListener): HealthListenerId + + fun unregisterHealthListener(id: HealthListenerId) + fun getNodeRegistrationStatus(): NodeRegistrationStatus + fun makeReceptionIdentity(): ReceptionIdentity + fun getNetworkFollowerStatus(): NetworkFollowerStatus } diff --git a/app/src/main/java/io/elixxir/dapp/bindings/data/CmixAdapter.kt b/app/src/main/java/io/elixxir/dapp/bindings/data/CmixAdapter.kt index 61bfbcc..7c7203b 100644 --- a/app/src/main/java/io/elixxir/dapp/bindings/data/CmixAdapter.kt +++ b/app/src/main/java/io/elixxir/dapp/bindings/data/CmixAdapter.kt @@ -1,47 +1,62 @@ package io.elixxir.dapp.bindings.data -import bindings.ReceptionIdentity +import io.elixxir.dapp.bindings.model.* import io.elixxir.dapp.bindings.model.Connection +import io.elixxir.dapp.bindings.model.Contact +import io.elixxir.dapp.bindings.model.E2eId +import io.elixxir.dapp.bindings.model.E2eParams import io.elixxir.dapp.bindings.model.NetworkFollowerStatus -import io.elixxir.dapp.bindings.model.NodeRegistrationStatus import bindings.Cmix as CoreCmix @JvmInline internal value class CmixAdapter(private val cmix: CoreCmix) : Cmix { - override fun connect(): Connection { - TODO("Not yet implemented") + override fun connect( + e2eId: E2eId, + recipientContact: Contact, + e2eParams: E2eParams + ): Connection { + // TODO: Use factory method to get Connection implementation + return ConnectionAdapter( + cmix.connect( + e2eId.value, + recipientContact.value, + e2eParams.value + ) + ) } - override fun startNetworkFollower() { - TODO("Not yet implemented") + override fun startNetworkFollower(timeoutMs: Long) { + cmix.startNetworkFollower(timeoutMs) } override fun stopNetworkFollower() { - TODO("Not yet implemented") + cmix.stopNetworkFollower() } override fun isNetworkHealthy(): Boolean { - TODO("Not yet implemented") + return cmix.isHealthy } - override fun registerHealthCallback() { - TODO("Not yet implemented") + override fun registerHealthListener(listener: NetworkHealthListener): HealthListenerId { + return HealthListenerId( + cmix.addHealthCallback(HealthCallbackAdapter.placeholder) + ) } - override fun unregisterHealthCallback() { - TODO("Not yet implemented") + override fun unregisterHealthListener(id: HealthListenerId) { + cmix.removeHealthCallback(id.value) } override fun getNodeRegistrationStatus(): NodeRegistrationStatus { - TODO("Not yet implemented") + return NodeRegistrationStatus(cmix.nodeRegistrationStatus) } override fun makeReceptionIdentity(): ReceptionIdentity { - TODO("Not yet implemented") + return ReceptionIdentity(cmix.makeReceptionIdentity()) } override fun getNetworkFollowerStatus(): NetworkFollowerStatus { - TODO("Not yet implemented") + return NetworkFollowerStatus.from(cmix.networkFollowerStatus()) } } \ No newline at end of file diff --git a/app/src/main/java/io/elixxir/dapp/bindings/data/GroupChat.kt b/app/src/main/java/io/elixxir/dapp/bindings/data/GroupChat.kt index 162e8d7..ff2d4d8 100644 --- a/app/src/main/java/io/elixxir/dapp/bindings/data/GroupChat.kt +++ b/app/src/main/java/io/elixxir/dapp/bindings/data/GroupChat.kt @@ -1,11 +1,14 @@ package io.elixxir.dapp.bindings.data +import io.elixxir.dapp.bindings.model.GroupInfo +import io.elixxir.dapp.bindings.model.GroupReport +import io.elixxir.dapp.group.model.Group import io.elixxir.dapp.group.model.GroupId internal interface GroupChat { - fun getGroup(groupId: GroupId) - fun joinGroup() - fun leaveGroup() - fun makeGroup() - fun resendInvitation() + fun getGroup(groupId: GroupId): Group + fun joinGroup(trackedGroupId: Long) + fun leaveGroup(groupId: GroupId) + fun makeGroup(info: GroupInfo): GroupReport + fun resendInvitations(group: Group): GroupReport } \ No newline at end of file diff --git a/app/src/main/java/io/elixxir/dapp/bindings/data/GroupChatAdapter.kt b/app/src/main/java/io/elixxir/dapp/bindings/data/GroupChatAdapter.kt index a2252a9..277bc79 100644 --- a/app/src/main/java/io/elixxir/dapp/bindings/data/GroupChatAdapter.kt +++ b/app/src/main/java/io/elixxir/dapp/bindings/data/GroupChatAdapter.kt @@ -1,26 +1,37 @@ package io.elixxir.dapp.bindings.data +import io.elixxir.dapp.bindings.model.GroupAdapter +import io.elixxir.dapp.bindings.model.GroupInfo +import io.elixxir.dapp.bindings.model.GroupReport +import io.elixxir.dapp.group.model.Group import io.elixxir.dapp.group.model.GroupId import bindings.GroupChat as CoreGroupChat internal class GroupChatAdapter(private val groupChat: CoreGroupChat) : GroupChat { - override fun getGroup(groupId: GroupId) { - TODO("Not yet implemented") + override fun getGroup(groupId: GroupId): Group { + return GroupAdapter(groupChat.getGroup(groupId.value)) } - override fun joinGroup() { - TODO("Not yet implemented") + override fun joinGroup(trackedGroupId: Long) { + groupChat.joinGroup(trackedGroupId) } - override fun leaveGroup() { - TODO("Not yet implemented") + override fun leaveGroup(groupId: GroupId) { + groupChat.leaveGroup(groupId.value) } - override fun makeGroup() { - TODO("Not yet implemented") + override fun makeGroup(info: GroupInfo): GroupReport { + return GroupReport( + groupChat.makeGroup( + info.membershipData.value, + info.description.toByteArray(), + info.name.toByteArray()) + ) } - override fun resendInvitation() { - TODO("Not yet implemented") + override fun resendInvitations(group: Group): GroupReport { + return GroupReport( + groupChat.resendRequest(group.groupId.value) + ) } } \ No newline at end of file diff --git a/app/src/main/java/io/elixxir/dapp/bindings/model/Group.kt b/app/src/main/java/io/elixxir/dapp/bindings/model/Group.kt deleted file mode 100644 index 1bf99c9..0000000 --- a/app/src/main/java/io/elixxir/dapp/bindings/model/Group.kt +++ /dev/null @@ -1,11 +0,0 @@ -package io.elixxir.dapp.bindings.model - -import io.elixxir.dapp.group.model.GroupId - -internal interface Group { - val id: GroupId - val name: String - val initMessage: String - val members: List<String> - val creationTimeMs: Long -} \ No newline at end of file diff --git a/app/src/main/java/io/elixxir/dapp/bindings/model/GroupAdapter.kt b/app/src/main/java/io/elixxir/dapp/bindings/model/GroupAdapter.kt new file mode 100644 index 0000000..07a97a7 --- /dev/null +++ b/app/src/main/java/io/elixxir/dapp/bindings/model/GroupAdapter.kt @@ -0,0 +1,20 @@ +package io.elixxir.dapp.bindings.model + +import io.elixxir.dapp.group.model.Group +import io.elixxir.dapp.group.model.GroupId +import io.elixxir.dapp.user.model.User +import bindings.Group as CoreGroup + +@JvmInline +internal value class GroupAdapter(val value: CoreGroup): Group { + override val groupId: GroupId + get() = GroupId(value.id) + override val name: String + get() = String(value.name) + override val description: String + get() = String(value.initMessage) + override val members: List<User> + get() = listOf() + override val creator: User + get() = User.placeholder +} \ No newline at end of file diff --git a/app/src/main/java/io/elixxir/dapp/bindings/model/GroupInfo.kt b/app/src/main/java/io/elixxir/dapp/bindings/model/GroupInfo.kt new file mode 100644 index 0000000..84b84dd --- /dev/null +++ b/app/src/main/java/io/elixxir/dapp/bindings/model/GroupInfo.kt @@ -0,0 +1,7 @@ +package io.elixxir.dapp.bindings.model + +internal data class GroupInfo( + val membershipData: GroupMembership, + val description: String, + val name: String +) \ No newline at end of file diff --git a/app/src/main/java/io/elixxir/dapp/bindings/model/GroupMembership.kt b/app/src/main/java/io/elixxir/dapp/bindings/model/GroupMembership.kt new file mode 100644 index 0000000..04c32bf --- /dev/null +++ b/app/src/main/java/io/elixxir/dapp/bindings/model/GroupMembership.kt @@ -0,0 +1,4 @@ +package io.elixxir.dapp.bindings.model + +@JvmInline +internal value class GroupMembership(val value: ByteArray) \ No newline at end of file diff --git a/app/src/main/java/io/elixxir/dapp/bindings/model/GroupReport.kt b/app/src/main/java/io/elixxir/dapp/bindings/model/GroupReport.kt new file mode 100644 index 0000000..c70edbb --- /dev/null +++ b/app/src/main/java/io/elixxir/dapp/bindings/model/GroupReport.kt @@ -0,0 +1,4 @@ +package io.elixxir.dapp.bindings.model + +@JvmInline +internal value class GroupReport(val value: ByteArray) \ No newline at end of file diff --git a/app/src/main/java/io/elixxir/dapp/bindings/model/HealthCallback.kt b/app/src/main/java/io/elixxir/dapp/bindings/model/HealthCallback.kt new file mode 100644 index 0000000..bc5aec4 --- /dev/null +++ b/app/src/main/java/io/elixxir/dapp/bindings/model/HealthCallback.kt @@ -0,0 +1,24 @@ +package io.elixxir.dapp.bindings.model + +internal interface NetworkHealthListener { + fun onHealthChanged(isHealthy: Boolean) +} + +internal class HealthCallbackAdapter( + private val listener: NetworkHealthListener +) : NetworkHealthListener by listener, + bindings.NetworkHealthCallback +{ + override fun callback(isHealthy: Boolean) { + onHealthChanged(isHealthy) + } + + companion object { + val placeholder: HealthCallbackAdapter = + HealthCallbackAdapter( + object : NetworkHealthListener { + override fun onHealthChanged(isHealthy: Boolean) { } + } + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/io/elixxir/dapp/bindings/model/HealthListenerId.kt b/app/src/main/java/io/elixxir/dapp/bindings/model/HealthListenerId.kt new file mode 100644 index 0000000..5034d68 --- /dev/null +++ b/app/src/main/java/io/elixxir/dapp/bindings/model/HealthListenerId.kt @@ -0,0 +1,4 @@ +package io.elixxir.dapp.bindings.model + +@JvmInline +internal value class HealthListenerId(val value: Long) \ No newline at end of file diff --git a/app/src/main/java/io/elixxir/dapp/bindings/model/NodeRegistrationStatus.kt b/app/src/main/java/io/elixxir/dapp/bindings/model/NodeRegistrationStatus.kt index 90fb610..620eee5 100644 --- a/app/src/main/java/io/elixxir/dapp/bindings/model/NodeRegistrationStatus.kt +++ b/app/src/main/java/io/elixxir/dapp/bindings/model/NodeRegistrationStatus.kt @@ -1,4 +1,4 @@ package io.elixxir.dapp.bindings.model -class NodeRegistrationStatus { -} \ No newline at end of file +@JvmInline +internal value class NodeRegistrationStatus(val value: ByteArray) \ No newline at end of file diff --git a/app/src/main/java/io/elixxir/dapp/user/model/User.kt b/app/src/main/java/io/elixxir/dapp/user/model/User.kt index 056dbd6..c24e223 100644 --- a/app/src/main/java/io/elixxir/dapp/user/model/User.kt +++ b/app/src/main/java/io/elixxir/dapp/user/model/User.kt @@ -3,6 +3,16 @@ package io.elixxir.dapp.user.model interface User { val userId: Long val username: String - val phone: String - val email: String + val phone: String? + val email: String? + + companion object { + val placeholder = object : User { + override val userId: Long = 0 + override val username: String = "" + override val phone: String? = null + override val email: String? = null + + } + } } \ No newline at end of file -- GitLab