unsubscribe functions

This commit is contained in:
Thilo Behnke
2022-06-26 21:25:41 +02:00
parent f4b64c4159
commit 30c539bb3c

View File

@@ -49,7 +49,7 @@ const networkEvents = readable<GameEventWrapper[]>([], function(set) {
const websocket = writable<WebSocket>(null);
const sessionId = writable<string>(null)
sessionStore.subscribe(session => {
const unsubscribe = sessionStore.subscribe(session => {
if (!session || isLocalSession(session)) {
return;
}
@@ -89,6 +89,7 @@ const networkEvents = readable<GameEventWrapper[]>([], function(set) {
return () => {
get(websocket).close();
unsubscribe();
}
})
@@ -111,55 +112,63 @@ export const sessionInputs = readable([], function(setInputs) {
let player2Inputs = writable([]);
setInputs([]);
sessionStore.subscribe(session => {
const unsubscribe = sessionStore.subscribe(session => {
if (isLocalSession(session)) {
player1KeyboardInputs.subscribe(inputs => {
const unsub1 = player1KeyboardInputs.subscribe(inputs => {
player1Inputs.set(inputs)
setInputs([...get(player1Inputs), ...get(player2Inputs)])
})
player2KeyboardInputs.subscribe(inputs => {
const unsub2 = player2KeyboardInputs.subscribe(inputs => {
player2Inputs.set(inputs)
setInputs([...get(player1Inputs), ...get(player2Inputs)])
})
return () => {
unsub1();
unsub2();
}
}
if (session.type === SessionType.HOST) {
player1KeyboardInputs.subscribe(inputs => {
const unsub1 = player1KeyboardInputs.subscribe(inputs => {
player1Inputs.set(inputs)
setInputs([...get(player1Inputs), ...get(player2Inputs)])
})
networkInputEvents.subscribe(inputs => {
const unsub2 = networkInputEvents.subscribe(inputs => {
player2Inputs.set(inputs)
setInputs([...get(player1Inputs), ...get(player2Inputs)])
})
return () => {
unsub1();
unsub2();
}
}
if (session.type === SessionType.PEER) {
networkInputEvents.subscribe(inputs => {
const unsub1 = networkInputEvents.subscribe(inputs => {
player1Inputs.set(inputs)
setInputs([...get(player1Inputs), ...get(player2Inputs)])
})
player2KeyboardInputs.subscribe(inputs => {
const unsub2 = player2KeyboardInputs.subscribe(inputs => {
player2Inputs.set(inputs)
setInputs([...get(player1Inputs), ...get(player2Inputs)])
})
return () => {
unsub1();
unsub2();
}
}
if (session.type === SessionType.OBSERVER) {
const events = networkInputEvents;
events.subscribe(inputs => {
const unsub1 = events.subscribe(inputs => {
player1Inputs.set(inputs)
setInputs([...get(player1Inputs), ...get(player2Inputs)])
})
events.subscribe(inputs => {
const unsub2 = events.subscribe(inputs => {
player2Inputs.set(inputs)
setInputs([...get(player1Inputs), ...get(player2Inputs)])
})
return () => {
unsub1();
unsub2();
}
}
throw new Error(`unknown session type ${session.type}`)
@@ -193,7 +202,7 @@ export const networkSession = (type: SessionType.HOST | SessionType.PEER | Sessi
})
}
sessionStore.subscribe(session => {
const unsubscribe = sessionStore.subscribe(session => {
set({loading: false, session})
})
@@ -210,4 +219,8 @@ export const networkSession = (type: SessionType.HOST | SessionType.PEER | Sessi
default:
throw new Error("Unable to handle session type: " + type)
}
return () => {
unsubscribe();
}
})