#!/usr/bin/env -S deno run -A --watch // get deno here: https://github.com/denoland/deno/releases and extract to /usr/local/bin ;) async function handle(conn: Deno.Conn) { const httpConn = Deno.serveHttp(conn); for await (const requestEvent of httpConn) { await requestEvent.respondWith(handleReq(requestEvent.request)); } } function handleReq(req: Request): Response { const upgrade = req.headers.get("upgrade") || ""; if (upgrade.toLowerCase() != "websocket") { return new Response("request isn't trying to upgrade to websocket."); } const { socket, response } = Deno.upgradeWebSocket(req); socket.onopen = () => { console.log("socket opened"); let interval = setInterval(() => { console.log("sending bite data.."); try { socket.send('{"type": "biteData", "data": {"equipNo": 123}}'); } catch(e) { clearInterval(interval); console.log("cleared"); } } , 1000); } socket.onmessage = (e) => { console.log("socket message:", e.data); socket.send(new Date().toString()); }; socket.onerror = (e) => console.log("socket errored:");//, e); socket.onclose = () => console.log("socket closed"); return response; } const server = Deno.listen({ port: 8080 }); for await (const conn of server) { handle(conn); }