|
|
|
|
@ -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 |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
|