Request Android member snapshots on the core thread
This commit is contained in:
1 parent
6c5c1ef0a0
commit
658c248867
3 files changed
+34
-3
No files matched your search
@@ -72,6 +72,7 @@ data class Message(val id: Long, val author: String, val text: String, val ts: L
|
||||
data class ChatMember(val nodeId: Long, val name: String, val online: Boolean = false,
|
||||
val isAdmin: Boolean = false, val isSuper: Boolean = false,
|
||||
val isModer: Boolean = false, val isStorage: Boolean = false,
|
||||
val radioActive: Boolean = false,
|
||||
val isVerified: Boolean = false, val isDeleted: Boolean = false,
|
||||
val nodeType: Int = 0,
|
||||
val rtt: Int = 0, val isSelf: Boolean = false,
|
||||
@@ -167,7 +168,7 @@ data class MemberWire(
|
||||
)
|
||||
|
||||
fun parseMemberWire(data: ByteArray, offset: Int = 0): MemberWire? {
|
||||
if (offset + 79 > data.size) return null
|
||||
if (offset < 0 || offset > data.size - 79) return null
|
||||
val buf = ByteBuffer.wrap(data, offset, 79).order(ByteOrder.LITTLE_ENDIAN)
|
||||
val nodeId = buf.getLong()
|
||||
val online = buf.get().toInt() and 0xFF
|
||||
@@ -181,10 +182,12 @@ fun parseMemberWire(data: ByteArray, offset: Int = 0): MemberWire? {
|
||||
return MemberWire(nodeId, online, isSelf, flags, rtt, natType, storage, name)
|
||||
}
|
||||
|
||||
fun MemberWire.toChatMember(): ChatMember = ChatMember(
|
||||
nodeId = nodeId, name = name, online = online != 0,
|
||||
/* Wire не содержит verified/nodeType и состояния транспортов: сохраняем их из текущей строки. */
|
||||
fun MemberWire.toChatMember(previous: ChatMember = ChatMember(nodeId, name)): ChatMember = previous.copy(
|
||||
name = name, online = online != 0,
|
||||
isAdmin = (flags and 2) != 0, isSuper = (flags and 1) != 0,
|
||||
isModer = (flags and 4) != 0, isStorage = storage,
|
||||
isDeleted = (flags and 8) != 0, radioActive = (flags and 0x10) != 0,
|
||||
rtt = if (rtt == 0xFFFF) 0 else rtt, isSelf = isSelf
|
||||
)
|
||||
|
||||
|
||||
@@ -115,6 +115,8 @@ object NativeLib {
|
||||
|
||||
/* ── Channel members ── */
|
||||
fun getChannelMembers(channelId: String): String = nativeGetChannelMembers(channelId) ?: "[]"
|
||||
/** Асинхронный live-снимок; ответ — событие MEMBER_LIST. */
|
||||
fun requestMemberList(channelId: String): Boolean = nativeRequestMemberList(channelId)
|
||||
fun getMemberDetail(channelId: String, nodeId: Long): String = nativeGetMemberDetail(channelId, nodeId) ?: "{}"
|
||||
fun setMemberNick(channelId: String, nodeId: Long, nick: String) { nativeSetMemberNick(channelId, nodeId, nick) }
|
||||
fun isChannelOwner(channelId: String): Boolean = nativeIsChannelOwner(channelId)
|
||||
@@ -240,6 +242,7 @@ object NativeLib {
|
||||
|
||||
/* ── Channel members JNI ── */
|
||||
private external fun nativeGetChannelMembers(channelId: String): String?
|
||||
private external fun nativeRequestMemberList(channelId: String): Boolean
|
||||
private external fun nativeGetMemberDetail(channelId: String, nodeId: Long): String?
|
||||
private external fun nativeSetMemberNick(channelId: String, nodeId: Long, nick: String)
|
||||
private external fun nativeIsChannelOwner(channelId: String): Boolean
|
||||
|
||||
Reference in new issue
Block a user