Auspicious14's picture
Upload 94 files
77610ec verified
Raw
History Blame Contribute Delete
1.81 kB
import { Server } from "socket.io";
import { Server as HttpServer } from "http";
export const initSocket = (server: HttpServer) => {
const io = new Server(server, {
cors: {
origin: process.env.CLIENT_URL
? process.env.CLIENT_URL.split(",")
: ["http://localhost:3002"],
methods: ["GET", "POST"],
credentials: true,
},
});
io.on("connection", (socket) => {
console.log("A user connected:", socket.id);
// Join a collaboration room for a specific project
socket.on("join-project", (projectId: string) => {
socket.join(`project:${projectId}`);
console.log(`User ${socket.id} joined project ${projectId}`);
});
// Leave project room
socket.on("leave-project", (projectId: string) => {
socket.leave(`project:${projectId}`);
console.log(`User ${socket.id} left project ${projectId}`);
});
// Handle code changes (if not using Yjs directly via y-websocket server)
socket.on("code-change", (data: { projectId: string; change: any }) => {
socket.to(`project:${data.projectId}`).emit("code-update", data.change);
});
// Real-time cursor/presence
socket.on(
"cursor-move",
(data: { projectId: string; position: any; user: any }) => {
socket.to(`data.projectId`).emit("cursor-update", {
userId: socket.id,
...data,
});
}
);
// Video Chat Signaling
socket.on("video-signal", (data: { target: string; signal: any }) => {
io.to(data.target).emit("video-signal", {
sender: socket.id,
signal: data.signal,
});
});
socket.on("disconnect", () => {
console.log("User disconnected:", socket.id);
});
});
return io;
};