Spaces:
Runtime error
Runtime error
const canvas = document.querySelector("#canvas"); | |
function handleResize() { | |
requestAnimationFrame(() => { | |
canvas.width = window.innerWidth; | |
canvas.height = window.innerHeight; | |
}); | |
} | |
handleResize(); | |
window.addEventListener("resize", handleResize, { passive: true }); | |
const clients = { | |
host: "__ESDEKA::host__", | |
guest: "__ESDEKA::guest__", | |
}; | |
// Shared communicators | |
function subscribe(channel, callback) { | |
function handleMessage(event) { | |
if ( | |
event.data.client && | |
Object.values(clients).includes(event.data.client) && | |
event.data.channel === channel | |
) { | |
callback(event); | |
} | |
} | |
window.addEventListener("message", handleMessage); | |
return () => { | |
window.removeEventListener("message", handleMessage); | |
}; | |
} | |
const host = {}; | |
// Guest communicators | |
function answer(window_, channel, targetOrigin = "*") { | |
window_.postMessage( | |
{ | |
client: clients.guest, | |
channel, | |
action: { | |
type: "answer", | |
}, | |
}, | |
targetOrigin | |
); | |
} | |
function handleTemplate(template) { | |
Function("Template", `${template};`)(); | |
} | |
subscribe("2DGameGPT", event => { | |
const { action } = event.data; | |
switch (action.type) { | |
case "call": | |
host.current = event.source; | |
answer(event.source, "2DGameGPT"); | |
handleTemplate(action.payload.template); | |
break; | |
case "broadcast": | |
handleTemplate(action.payload.template); | |
break; | |
default: | |
break; | |
} | |
}); | |