71 lines
1.7 KiB
TypeScript
71 lines
1.7 KiB
TypeScript
import type { Server as HttpServer } from "node:http";
|
|
//import { dirname, join } from "node:path";
|
|
//import { fileURLToPath } from "node:url";
|
|
import { instrument } from "@socket.io/admin-ui";
|
|
import { Server } from "socket.io";
|
|
import { createLogger } from "../logger/logger.controller.js";
|
|
import { registerEmitter } from "./roomEmitter.socket.js";
|
|
import { createRoomEmitter, preseedRoom } from "./roomService.socket.js";
|
|
|
|
//const __filename = fileURLToPath(import.meta.url);
|
|
//const __dirname = dirname(__filename);
|
|
const log = createLogger({ module: "socket.io", subModule: "setup" });
|
|
|
|
export const setupSocketIORoutes = (baseUrl: string, server: HttpServer) => {
|
|
const io = new Server(server, {
|
|
path: `${baseUrl}/api/socket.io`,
|
|
cors: {
|
|
origin: ["http://localhost:3000", "https://admin.socket.io"],
|
|
credentials: true,
|
|
},
|
|
});
|
|
|
|
// ✅ Create emitter instance
|
|
const { addDataToRoom } = createRoomEmitter(io);
|
|
registerEmitter(addDataToRoom);
|
|
|
|
io.on("connection", (s) => {
|
|
log.info({}, `User connected: ${s.id}`);
|
|
|
|
s.emit("welcome", {
|
|
serverTime: Date.now(),
|
|
availableRooms: ["logs", "labels"],
|
|
version: "1.0.0",
|
|
});
|
|
|
|
s.on("join-room", async (rn) => {
|
|
s.join(rn);
|
|
|
|
// get room seeded
|
|
const history = await preseedRoom(rn);
|
|
|
|
// send the intial data
|
|
s.emit("room-update", {
|
|
roomId: rn,
|
|
payloads: history,
|
|
initial: true,
|
|
});
|
|
});
|
|
});
|
|
|
|
io.on("disconnect", (s) => {
|
|
log.info({}, "User disconnected:", s.id);
|
|
});
|
|
|
|
// admin stuff
|
|
|
|
const admin = io.of("/admin");
|
|
admin.on("connection", (s) => {
|
|
log.info({}, `User connected: ${s.id}`);
|
|
});
|
|
|
|
admin.on("disconnect", (s) => {
|
|
log.info({}, "User disconnected:", s.id);
|
|
});
|
|
|
|
instrument(io, {
|
|
auth: false,
|
|
//namespaceName: "/admin",
|
|
});
|
|
};
|