made socket logic better

This commit is contained in:
Karma Riuk
2025-05-07 18:10:21 +02:00
parent 4c2d912298
commit 522bcc7ebc
4 changed files with 24 additions and 24 deletions

View File

@ -19,12 +19,14 @@ document.getElementById("uploadBtn").onclick = async () => {
form.append("file", file); form.append("file", file);
const res = await fetch(`/answers/submit/${type}`, { const res = await fetch(`/answers/submit/${type}`, {
headers: {
"X-Socket-Id": socket.id,
},
method: "POST", method: "POST",
body: form, body: form,
}); });
const json = await res.json(); const json = await res.json();
console.log(json);
const statusEl = document.getElementById("status"); const statusEl = document.getElementById("status");
if (res.ok) { if (res.ok) {
statusEl.style.color = "green"; statusEl.style.color = "green";

View File

@ -1,7 +1,6 @@
import { Router } from "express"; import { Router } from "express";
import multer from "multer"; import multer from "multer";
import { InvalidJsonFormatError } from "../utils/errors.js"; import { InvalidJsonFormatError } from "../utils/errors.js";
import { io as socket } from "../socket.js";
import { evaluate_comments } from "../utils/process_data.js"; import { evaluate_comments } from "../utils/process_data.js";
const router = Router(); const router = Router();
@ -74,8 +73,18 @@ router.post("/submit/comments", upload.single("file"), async (req, res) => {
throw error; throw error;
} }
socket.emit("started-processing"); const io = req.app.get("io");
evaluate_comments(validatedData); const header = req.get("X-Socket-Id");
const socketId = header && header.trim();
if (socketId && io.sockets.sockets.has(socketId)) {
io.to(socketId).emit("started-processing");
}
evaluate_comments(validatedData, (percent) => {
if (!(socketId && io.sockets.sockets.has(socketId))) return;
io.to(socketId).emit("progress", { percent });
});
res.status(200).json({ res.status(200).json({
message: "Answer submitted successfully", message: "Answer submitted successfully",

View File

@ -5,13 +5,10 @@ function onConnect(socket) {
console.log("Websocket client connected:", socket.id); console.log("Websocket client connected:", socket.id);
} }
let io; export function createSocketServer(app) {
function createSocketServer(app) {
const httpServer = http.createServer(app); const httpServer = http.createServer(app);
io = new Server(httpServer); const io = new Server(httpServer);
io.on("connection", onConnect); io.on("connection", onConnect);
app.set("io", io);
return httpServer; return httpServer;
} }
export { createSocketServer, io };

View File

@ -1,29 +1,21 @@
import { io as socket } from "../socket.js"; export const evaluate_comments = async (answers, percent_cb) => {
export const evaluate_comments = async (answers) => {
const total = Object.keys(answers).length; const total = Object.keys(answers).length;
let i = 0; let i = 0;
for (const [key, value] of Object.entries(answers)) { for (const [key, value] of Object.entries(answers)) {
console.log(`Processing ${key}: ${value}...`); console.log(`Processing ${key}: ${value}...`);
await new Promise((res) => setTimeout(res, 500)); await new Promise((res) => setTimeout(res, 1000));
console.log("Done"); console.log("Done");
const data = { percent_cb(Math.floor((++i / total) * 100));
percent: Math.floor((++i / total) * 100),
};
socket.emit("progress", data);
} }
}; };
export const evaluate_refinement = async (answers) => { export const evaluate_refinement = async (answers, percent_cb) => {
const total = Object.keys(answers).length; const total = Object.keys(answers).length;
let i = 0; let i = 0;
for (const [key, value] of Object.entries(answers)) { for (const [key, value] of Object.entries(answers)) {
console.log(`Processing ${key}: ${value}...`); console.log(`Processing ${key}: ${value}...`);
await new Promise((res) => setTimeout(res, 500)); await new Promise((res) => setTimeout(res, 1000));
console.log("Done"); console.log("Done");
const data = { percent_cb(Math.floor((++i / total) * 100));
percent: Math.floor((++i / total) * 100),
};
socket.emit("progress", data);
} }
}; };