feat: Enhance packet sending logic to handle connection issues and implement swipe-to-reply functionality in chat UI

This commit is contained in:
k1ngsterr1
2026-01-13 06:32:16 +05:00
parent 686adc1af2
commit 5bb9560353
5 changed files with 174 additions and 42 deletions

View File

@@ -267,14 +267,24 @@ class Protocol(
/**
* Send packet to server
* Packets are queued if handshake is not complete
* Packets are queued if handshake is not complete or if connection is down
* (как в Архиве - сохраняем пакеты при любых проблемах с соединением)
*/
fun sendPacket(packet: Packet) {
if (!handshakeComplete && packet !is PacketHandshake) {
log("📦 Queueing packet: ${packet.getPacketId()}")
// Проверяем состояние соединения
val socket = webSocket
val isConnected = _state.value == ProtocolState.AUTHENTICATED
// Добавляем в очередь если:
// 1. Handshake не завершён (кроме самого пакета handshake)
// 2. WebSocket не подключен или null
// 3. Не authenticated
if ((!handshakeComplete && packet !is PacketHandshake) || socket == null || !isConnected) {
log("📦 Queueing packet: ${packet.getPacketId()} (handshake=$handshakeComplete, socket=${socket != null}, state=${_state.value})")
packetQueue.add(packet)
return
}
sendPacketDirect(packet)
}
@@ -290,7 +300,9 @@ class Protocol(
val socket = webSocket
if (socket == null) {
log("❌ WebSocket is null, cannot send packet ${packet.getPacketId()}")
log("❌ WebSocket is null, re-queueing packet ${packet.getPacketId()}")
// Как в Архиве - возвращаем пакет в очередь при ошибке
packetQueue.add(packet)
return
}
@@ -303,6 +315,9 @@ class Protocol(
} catch (e: Exception) {
log("❌ Exception sending packet ${packet.getPacketId()}: ${e.message}")
e.printStackTrace()
// Как в Архиве - возвращаем пакет в очередь при ошибке отправки
log("📦 Re-queueing packet ${packet.getPacketId()} due to send error")
packetQueue.add(packet)
}
}