fix(android): improve session_started polling with multiple attempts
Changed from single 2-second delay to 5 attempts at 500ms intervals. This provides faster detection while covering a longer window (2.5 seconds total). The polling loop: - Checks every 500ms for up to 5 times - Stops immediately if keygen is already triggered - Stops if session context changes (user cancelled/navigated away) This handles the case where the last joiner triggers session_started but cannot receive the event themselves. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
parent
c3d5da46f7
commit
50cb10d6a8
|
|
@ -504,20 +504,28 @@ class MainViewModel @Inject constructor(
|
||||||
startKeygenAsJoiner()
|
startKeygenAsJoiner()
|
||||||
} else {
|
} else {
|
||||||
// Otherwise, wait for session_started event
|
// Otherwise, wait for session_started event
|
||||||
// But also poll session status after a delay in case we missed the event
|
// But also poll session status immediately and after delays in case we missed the event
|
||||||
// This handles the race condition where session_started is sent before we're ready
|
// This handles the race condition where session_started is sent before we're ready
|
||||||
|
// The last joiner triggers session_started but can't receive it themselves
|
||||||
viewModelScope.launch {
|
viewModelScope.launch {
|
||||||
delay(2000) // Wait 2 seconds
|
// Poll multiple times with short delays
|
||||||
val joinInfo = pendingJoinKeygenInfo
|
for (attempt in 1..5) {
|
||||||
if (joinInfo != null && joinInfo.sessionId == sessionInfo.sessionId) {
|
delay(500) // Check every 500ms
|
||||||
android.util.Log.d("MainViewModel", "Checking session status after delay...")
|
val joinInfo = pendingJoinKeygenInfo
|
||||||
|
if (joinInfo == null || joinInfo.sessionId != sessionInfo.sessionId) {
|
||||||
|
android.util.Log.d("MainViewModel", "Polling cancelled - keygen already started or session changed")
|
||||||
|
break
|
||||||
|
}
|
||||||
|
android.util.Log.d("MainViewModel", "Polling session status (attempt $attempt)...")
|
||||||
val statusResult = repository.getSessionStatus(sessionInfo.sessionId)
|
val statusResult = repository.getSessionStatus(sessionInfo.sessionId)
|
||||||
statusResult.onSuccess { status ->
|
statusResult.onSuccess { status ->
|
||||||
if (status.status == "in_progress" && pendingJoinKeygenInfo != null) {
|
if (status.status == "in_progress" && pendingJoinKeygenInfo != null) {
|
||||||
android.util.Log.d("MainViewModel", "Session is now in_progress (detected via polling), triggering keygen")
|
android.util.Log.d("MainViewModel", "Session is now in_progress (detected via polling attempt $attempt), triggering keygen")
|
||||||
startKeygenAsJoiner()
|
startKeygenAsJoiner()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// If keygen was triggered, break out of loop
|
||||||
|
if (pendingJoinKeygenInfo == null) break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue