diff --git a/src/server/api/routers/player-state.ts b/src/server/api/routers/player-state.ts index 74d67e0..25e7dbc 100644 --- a/src/server/api/routers/player-state.ts +++ b/src/server/api/routers/player-state.ts @@ -30,26 +30,21 @@ export const playerStateRouter = createTRPCRouter({ }) ) .subscription(async function* ({ input, ctx, signal }) { - console.log('subscription started for user:', input.userId) + const iterator = createEventIterator( + globalEmitter, + `state-change:${input.userId}`, + { signal: signal } + ) - try { - const iterator = createEventIterator( - globalEmitter, - `state-change:${input.userId}`, - { signal: signal } - ) + // get initial state + const initialState = await redis.get(PLAYER_STATE_KEY(input.userId)) + if (initialState) { + yield tracked('initial', JSON.parse(initialState) as PlayerState) + } - console.log('iterator created') - - for await (const [state] of iterator) { - console.log('emitting state:', state) - yield tracked(Date.now().toString(), state) - } - } catch (error) { - console.error('subscription error:', error) - throw error - } finally { - console.log('subscription ended for user:', input.userId) + // listen for updates + for await (const [state] of iterator) { + yield tracked(Date.now().toString(), state) } }), })