Spaces:
Runtime error
Runtime error
File size: 1,374 Bytes
e5ae926 65567a2 e5ae926 6c2bcb4 e5ae926 6c2bcb4 e5ae926 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
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;
}
});
|