57 lines
1.4 KiB
TypeScript
Executable File
57 lines
1.4 KiB
TypeScript
Executable File
#!/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);
|
|
}
|