feat: modular domain driven boilerplate
This commit is contained in:
50
platform/server/socket.ts
Normal file
50
platform/server/socket.ts
Normal file
@@ -0,0 +1,50 @@
|
||||
import { logger } from "@platform/logger";
|
||||
import { context } from "@platform/relay";
|
||||
import { storage } from "@platform/storage";
|
||||
import { toJsonRpc } from "@valkyr/json-rpc";
|
||||
|
||||
import type { Api } from "./api.ts";
|
||||
|
||||
/**
|
||||
* TODO ...
|
||||
*/
|
||||
export function upgradeWebSocket(request: Request, api: Api) {
|
||||
const { socket, response } = Deno.upgradeWebSocket(request);
|
||||
|
||||
socket.addEventListener("open", () => {
|
||||
logger.prefix("Socket").info("socket connected", {});
|
||||
context.sockets.add(socket);
|
||||
});
|
||||
|
||||
socket.addEventListener("close", () => {
|
||||
logger.prefix("Socket").info("socket disconnected", {});
|
||||
context.sockets.del(socket);
|
||||
});
|
||||
|
||||
socket.addEventListener("message", (event) => {
|
||||
if (event.data === "ping") {
|
||||
return;
|
||||
}
|
||||
|
||||
const message = toJsonRpc(event.data);
|
||||
|
||||
logger.prefix("Socket").info(message);
|
||||
|
||||
storage.run({}, async () => {
|
||||
// api
|
||||
// .send(body)
|
||||
// .then((response) => {
|
||||
// if (response !== undefined) {
|
||||
// logger.info({ response });
|
||||
// socket.send(JSON.stringify(response));
|
||||
// }
|
||||
// })
|
||||
// .catch((error) => {
|
||||
// logger.info({ error });
|
||||
// socket.send(JSON.stringify(error));
|
||||
// });
|
||||
});
|
||||
});
|
||||
|
||||
return response;
|
||||
}
|
||||
Reference in New Issue
Block a user