refactor(tui-04): remove ConnectSession and DisconnectSession from Effect hierarchy

This commit is contained in:
2026-05-25 12:39:50 +04:00
parent 8b8f9c9379
commit cba0314197
4 changed files with 6 additions and 15 deletions
@@ -56,7 +56,7 @@ fun main(args: Array<String>) {
state = next state = next
effects.forEach { effect -> effects.forEach { effect ->
effectScope.launch { effectScope.launch {
EffectDispatcher(ws, effectScope) { runner.quit() }.dispatch(effect) EffectDispatcher(ws) { runner.quit() }.dispatch(effect)
} }
} }
} }
@@ -1,11 +1,8 @@
package com.correx.apps.tui.reducer package com.correx.apps.tui.reducer
import com.correx.apps.server.protocol.ClientMessage import com.correx.apps.server.protocol.ClientMessage
import com.correx.core.events.types.SessionId
sealed interface Effect { sealed interface Effect {
data class SendWs(val message: ClientMessage) : Effect data class SendWs(val message: ClientMessage) : Effect
data class ConnectSession(val sessionId: SessionId) : Effect
data object DisconnectSession: Effect
data object Quit : Effect data object Quit : Effect
} }
@@ -1,18 +1,14 @@
package com.correx.apps.tui.reducer package com.correx.apps.tui.reducer
import com.correx.apps.tui.ws.TuiWsClient import com.correx.apps.tui.ws.TuiWsClient
import kotlinx.coroutines.CoroutineScope
class EffectDispatcher( class EffectDispatcher(
private val wsClient: TuiWsClient, private val wsClient: TuiWsClient,
private val effectScope: CoroutineScope,
private val onQuit: () -> Unit, private val onQuit: () -> Unit,
) { ) {
suspend fun dispatch(effect: Effect) { suspend fun dispatch(effect: Effect) {
when (effect) { when (effect) {
is Effect.SendWs -> wsClient.send(effect.message) is Effect.SendWs -> wsClient.send(effect.message)
is Effect.ConnectSession -> wsClient.connectSession(effect.sessionId, effectScope)
Effect.DisconnectSession -> wsClient.disconnectSession()
Effect.Quit -> onQuit() Effect.Quit -> onQuit()
} }
} }
@@ -131,7 +131,7 @@ object SessionsReducer {
return sessionState.copy( return sessionState.copy(
sessions = sessionState.sessions + summary, sessions = sessionState.sessions + summary,
selectedId = selected, selectedId = selected,
) to listOf(Effect.ConnectSession(msg.sessionId)) ) to emptyList()
} }
private fun processToolRejectedMessage( private fun processToolRejectedMessage(
@@ -300,21 +300,19 @@ object SessionsReducer {
sessions: SessionsState, sessions: SessionsState,
msg: ServerMessage.SessionFailed, msg: ServerMessage.SessionFailed,
clock: () -> Long, clock: () -> Long,
): Pair<SessionsState, List<Effect.DisconnectSession>> = touchSession( ): Pair<SessionsState, List<Effect>> = touchSession(
sessions, sessions,
msg.sessionId.value, msg.sessionId.value,
"FAILED", "FAILED",
clock, clock,
) to listOf(Effect.DisconnectSession) ) to emptyList()
private fun processSessionCompletedMessage( private fun processSessionCompletedMessage(
sessions: SessionsState, sessions: SessionsState,
msg: ServerMessage.SessionCompleted, msg: ServerMessage.SessionCompleted,
clock: () -> Long, clock: () -> Long,
): Pair<SessionsState, List<Effect.DisconnectSession>> = ): Pair<SessionsState, List<Effect>> =
touchSession(sessions, msg.sessionId.value, "COMPLETED", clock) to listOf( touchSession(sessions, msg.sessionId.value, "COMPLETED", clock) to emptyList()
Effect.DisconnectSession,
)
private fun processSessionPausedMessage( private fun processSessionPausedMessage(
msg: ServerMessage.SessionPaused, msg: ServerMessage.SessionPaused,