mizchi
05/23/2023, 2:27 PMts
import { Env } from "./types";
// websocket handler durable objects
export { TestObject } from "./test_object";
export default {
async fetch(
request: Request,
env: Env,
_ctx: ExecutionContext
): Promise<Response> {
return await handleErrorsWithUgrade(request, async () => {
if (request.url.endsWith("/connect")) {
const id = env.test.idFromName("test");
const testObject = env.test.get(id);
return testObject.fetch(request);
}
return Response.json({ ok: true });
});
},
async queue(batch: MessageBatch<Error>, env: Env): Promise<void> {
let messages = JSON.stringify(batch.messages);
const id = env.test.idFromName("test");
// Here: I want to connect existed socket and emit(log)
// const testObject = env.test.get(id);
// testObject.connect() ????
console.log(`consumed from our queue: ${messages}`);
},
};
async function handleErrorsWithUgrade(request: Request, func: any) {
try {
return await func();
} catch (err) {
if (request.headers.get("Upgrade") === "websocket") {
const pair = new WebSocketPair();
pair[1].accept();
// @ts-ignore
pair[1].send(JSON.stringify({ error: err.stack }));
pair[1].close(1011, "Uncaught exception during session setup");
return new Response(null, { status: 101, webSocket: pair[0] });
}
// @ts-ignore
return new Response(err.stack, { status: 500 });
}
}
Swifty
01/07/2024, 7:57 PM