const WebSocket = require("ws");
const http = require("http");
const fs = require("fs");
const { v4: uuidv4 } = require("uuid");
const server = http.createServer((req, res) => {
res.writeHead(200, { "Content-Type": "text/plain" });
res.end("WebSocket server is running");
});
const wss = new WebSocket.Server({ server });
const loggingFilePath = "websocket_logs.txt";
const clients = new Set();
wss.on("connection", (ws, req) => {
const userId = uuidv4();
console.log('User#-userId connected');
const clientIp = req.socket.remoteAddress;
clients.add(ws);
ws.on("message", (message) => {
const messageObj = JSON.parse(message);
if (messageObj.type == "image") {
logMessage(userId, "sended image");
} else {
logMessage(userId, messageObj.message);
}
broadcast(
JSON.stringify({
user: userId,
message: messageObj,
client_ip: clientIp,
})
);
});
ws.on("close", () => {
console.log("Client disconnected");
clients.delete(ws);
});
});
function logMessage(userId, message) {
const logEntry = 'Date: UserID-Message';
fs.appendFile(loggingFilePath, logEntry, (err) => {
if (err) {
console.error("Error writing to log file:", err);
}
});
}
function broadcast(message) {
clients.forEach((client) => {
if (client.readyState === WebSocket.OPEN) {
client.send(message);
}
});
}
const PORT = 3000;
server.listen(PORT, () => {
console.log('Server listening on http://localhost:PORT');
});