feat: Implement floating input bar in ChatDetailScreen and ensure transparent backgrounds in AppleEmojiEditText
This commit is contained in:
@@ -30,8 +30,8 @@ class Protocol(
|
||||
) {
|
||||
companion object {
|
||||
private const val TAG = "RosettaProtocol"
|
||||
private const val RECONNECT_INTERVAL = 10000L // 10 seconds
|
||||
private const val MAX_RECONNECT_ATTEMPTS = 5
|
||||
private const val RECONNECT_INTERVAL = 5000L // 5 seconds (как в Архиве)
|
||||
private const val MAX_RECONNECT_ATTEMPTS = 10 // Увеличил лимит
|
||||
private const val HANDSHAKE_TIMEOUT = 10000L // 10 seconds
|
||||
}
|
||||
|
||||
@@ -296,22 +296,42 @@ class Protocol(
|
||||
}
|
||||
|
||||
private fun handleDisconnect() {
|
||||
val previousState = _state.value
|
||||
_state.value = ProtocolState.DISCONNECTED
|
||||
handshakeComplete = false
|
||||
handshakeJob?.cancel()
|
||||
heartbeatJob?.cancel()
|
||||
|
||||
if (!isManuallyClosed && reconnectAttempts < MAX_RECONNECT_ATTEMPTS) {
|
||||
reconnectAttempts++
|
||||
log("🔄 Reconnecting in ${RECONNECT_INTERVAL}ms (attempt $reconnectAttempts/$MAX_RECONNECT_ATTEMPTS)")
|
||||
|
||||
scope.launch {
|
||||
delay(RECONNECT_INTERVAL)
|
||||
connect()
|
||||
// Автоматический reconnect (как в Архиве)
|
||||
if (!isManuallyClosed) {
|
||||
// Сбрасываем счетчик если до этого были подключены
|
||||
if (previousState == ProtocolState.AUTHENTICATED || previousState == ProtocolState.CONNECTED) {
|
||||
log("🔄 Connection lost, will reconnect...")
|
||||
}
|
||||
|
||||
if (reconnectAttempts < MAX_RECONNECT_ATTEMPTS) {
|
||||
reconnectAttempts++
|
||||
val delay = RECONNECT_INTERVAL * minOf(reconnectAttempts, 3) // Exponential backoff до 15 секунд
|
||||
log("🔄 Reconnecting in ${delay}ms (attempt $reconnectAttempts/$MAX_RECONNECT_ATTEMPTS)")
|
||||
|
||||
scope.launch {
|
||||
delay(delay)
|
||||
if (!isManuallyClosed) {
|
||||
connect()
|
||||
}
|
||||
}
|
||||
} else {
|
||||
log("❌ Max reconnect attempts reached, resetting counter...")
|
||||
// Сбрасываем счетчик и пробуем снова через большой интервал
|
||||
reconnectAttempts = 0
|
||||
scope.launch {
|
||||
delay(30000) // 30 секунд перед следующей серией попыток
|
||||
if (!isManuallyClosed) {
|
||||
log("🔄 Restarting reconnection attempts...")
|
||||
connect()
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if (reconnectAttempts >= MAX_RECONNECT_ATTEMPTS) {
|
||||
log("❌ Max reconnect attempts reached")
|
||||
_lastError.value = "Unable to connect to server"
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user