don't send heartbeat in menu + don't send snapshot for peer if objects change

This commit is contained in:
Thilo Behnke
2022-06-29 00:11:58 +02:00
parent d3df67e4ce
commit 5fb7725dae
2 changed files with 17 additions and 15 deletions

View File

@@ -16,6 +16,8 @@
let cachedSessionId;
let relevantKeyboardEvents: Readable<Input[]>;
// TODO: objects must come from events for peer and observer
$: if(!cachedSessionId && session) {
cachedSessionId = session.session_id;
console.log("NetworkSessionWrapper ready, now setting up sessionEvents")
@@ -24,21 +26,17 @@
relevantKeyboardEvents = getPlayerKeyboardInputs(session.you.nr);
}
$: if(session && session.state === SessionState.RUNNING) {
// TODO: Include objects
switch(session.type) {
case SessionType.HOST:
console.debug("sending host snapshot")
networkEvents.produce({inputs: $relevantKeyboardEvents, session_id: session.session_id, objects: $gameField, player_id: session.you.id, ts: Date.now()})
break;
case SessionType.PEER:
console.debug("sending peer snapshot")
networkEvents.produce({inputs: $relevantKeyboardEvents, session_id: session.session_id, player_id: session.you.id, ts: Date.now()})
break;
default:
// noop
}
$: if(session && session.type === SessionType.HOST && session.state === SessionState.RUNNING) {
console.debug("sending host snapshot")
networkEvents.produce({inputs: $relevantKeyboardEvents, session_id: session.session_id, objects: $gameField, player_id: session.you.id, ts: Date.now()})
}
// TODO: keyboard events must be sent every tick, not only if a key is pressed
$: if(session && session.type === SessionType.PEER && session.state === SessionState.RUNNING) {
console.debug("sending host snapshot")
networkEvents.produce({inputs: $relevantKeyboardEvents, session_id: session.session_id, player_id: session.you.id, ts: Date.now()})
}
</script>
{#if !session}

View File

@@ -58,13 +58,17 @@ function createNetworkEvents() {
})
const interval = setInterval(() => {
const cachedSessionId = get(sessionId);
if (!cachedSessionId) {
return;
}
const last = get(lastSnapshot);
const now = Date.now();
if (last && now - last.ts < 1_000) {
return
}
console.debug("sending heartbeat")
const heartbeat: Message = {msg_type: MessageType.Heartbeat, payload: {session_id: get(sessionId), player_id: get(playerId), ts: now}};
const heartbeat: Message = {msg_type: MessageType.Heartbeat, payload: {session_id: cachedSessionId, player_id: get(playerId), ts: now}};
sendMessage(heartbeat);
}, 1_000)