feat: Implement read receipt handling and mark all outgoing messages as read
This commit is contained in:
@@ -335,17 +335,18 @@ class PacketMessage : Packet() {
|
||||
/**
|
||||
* Read packet (ID: 0x07)
|
||||
* Уведомление о прочтении сообщения
|
||||
* Порядок полей как в Desktop: privateKey, fromPublicKey, toPublicKey
|
||||
*/
|
||||
class PacketRead : Packet() {
|
||||
var messageId: String = ""
|
||||
var privateKey: String = ""
|
||||
var fromPublicKey: String = ""
|
||||
var toPublicKey: String = ""
|
||||
var privateKey: String = ""
|
||||
|
||||
override fun getPacketId(): Int = 0x07
|
||||
|
||||
override fun receive(stream: Stream) {
|
||||
messageId = stream.readString()
|
||||
// Desktop: privateKey, fromPublicKey, toPublicKey
|
||||
privateKey = stream.readString()
|
||||
fromPublicKey = stream.readString()
|
||||
toPublicKey = stream.readString()
|
||||
}
|
||||
@@ -353,10 +354,10 @@ class PacketRead : Packet() {
|
||||
override fun send(): Stream {
|
||||
val stream = Stream()
|
||||
stream.writeInt16(getPacketId())
|
||||
stream.writeString(messageId)
|
||||
// Desktop: privateKey, fromPublicKey, toPublicKey
|
||||
stream.writeString(privateKey)
|
||||
stream.writeString(fromPublicKey)
|
||||
stream.writeString(toPublicKey)
|
||||
stream.writeString(privateKey)
|
||||
return stream
|
||||
}
|
||||
}
|
||||
@@ -422,6 +423,7 @@ class PacketTyping : Packet() {
|
||||
/**
|
||||
* Chunk packet (ID: 0x09)
|
||||
* Для разбиения больших пакетов на части (как в Desktop)
|
||||
* ВАЖНО: chunkIndex и totalChunks - Int16, не Int32!
|
||||
*/
|
||||
class PacketChunk : Packet() {
|
||||
var chunkId: String = ""
|
||||
@@ -432,18 +434,20 @@ class PacketChunk : Packet() {
|
||||
override fun getPacketId(): Int = 0x09
|
||||
|
||||
override fun receive(stream: Stream) {
|
||||
// В Desktop: readInt16 для index и total
|
||||
chunkIndex = stream.readInt16()
|
||||
totalChunks = stream.readInt16()
|
||||
chunkId = stream.readString()
|
||||
chunkIndex = stream.readInt32()
|
||||
totalChunks = stream.readInt32()
|
||||
data = stream.readBytes()
|
||||
}
|
||||
|
||||
override fun send(): Stream {
|
||||
val stream = Stream()
|
||||
stream.writeInt16(getPacketId())
|
||||
// В Desktop: writeInt16 для index и total
|
||||
stream.writeInt16(chunkIndex)
|
||||
stream.writeInt16(totalChunks)
|
||||
stream.writeString(chunkId)
|
||||
stream.writeInt32(chunkIndex)
|
||||
stream.writeInt32(totalChunks)
|
||||
stream.writeBytes(data)
|
||||
return stream
|
||||
}
|
||||
|
||||
@@ -87,9 +87,10 @@ object ProtocolManager {
|
||||
}
|
||||
|
||||
// Обработчик прочтения (0x07)
|
||||
// В Desktop PacketRead не содержит messageId - сообщает что собеседник прочитал сообщения
|
||||
waitPacket(0x07) { packet ->
|
||||
val readPacket = packet as PacketRead
|
||||
addLog("✓✓ Read: ${readPacket.messageId.take(16)}...")
|
||||
addLog("✓✓ Read from: ${readPacket.fromPublicKey.take(16)}...")
|
||||
|
||||
scope.launch {
|
||||
messageRepository?.handleRead(readPacket)
|
||||
|
||||
Reference in New Issue
Block a user