feat: implement Socket.IO server with queue management and update environment variables

This commit is contained in:
2025-09-19 18:58:22 +02:00
parent 741afb6e81
commit cb326f7190
5 changed files with 265 additions and 89 deletions

View File

@@ -14,50 +14,59 @@ export default function Home() {
useEffect(() => {
let mounted = true;
// dynamic import to avoid bundling issues on server
import("socket.io-client").then(({ io }) => {
if (!mounted) return;
const socket = io({
path: "/api/socket",
autoConnect: true
});
socketRef.current = socket;
// Először inicializáljuk a Socket.IO szervert
fetch('/api/socketio')
.then(() => {
// dynamic import to avoid bundling issues on server
return import("socket.io-client");
})
.then(({ io }) => {
if (!mounted) return;
const socketPort = process.env.NEXT_PUBLIC_SOCKET_PORT || "4000";
const socket = io(`http://localhost:${socketPort}`, {
autoConnect: true
});
socketRef.current = socket;
socket.on("connect", () => {
setConnected(true);
// join a named event (example eventId: pamkutya)
socket.emit("join_event", { eventId: "pamkutya" });
});
socket.on("connect", () => {
setConnected(true);
// join a named event (example eventId: pamkutya)
socket.emit("join_event", { eventId: "pamkutya" });
});
socket.on("disconnect", () => {
setConnected(false);
setPosition(null);
setHasAccess(false);
setTokenExpiry(null);
});
socket.on("disconnect", () => {
setConnected(false);
setPosition(null);
setHasAccess(false);
setTokenExpiry(null);
});
socket.on("queue_update", (data: any) => {
setPosition(data.position ?? null);
setEstimatedWait(data.estimatedWait ?? null);
setActiveUsers(data.activeCount ?? 0);
});
socket.on("queue_update", (data: any) => {
setPosition(data.position ?? null);
setEstimatedWait(data.estimatedWait ?? null);
setActiveUsers(data.activeCount ?? 0);
});
socket.on("granted", (data: any) => {
// { token, expiresAt }
setHasAccess(true);
setTokenExpiry(data.expiresAt ? Date.parse(data.expiresAt) : Date.now() + 15 * 60 * 1000);
// store token locally for API calls
try {
localStorage.setItem("event_token", data.token);
} catch (e) {}
});
socket.on("granted", (data: any) => {
// { token, expiresAt }
setHasAccess(true);
setTokenExpiry(data.expiresAt ? Date.parse(data.expiresAt) : Date.now() + 15 * 60 * 1000);
// store token locally for API calls
try {
localStorage.setItem("event_token", data.token);
} catch (e) {}
});
socket.on("revoked", () => {
setHasAccess(false);
setTokenExpiry(null);
localStorage.removeItem("event_token");
socket.on("revoked", () => {
setHasAccess(false);
setTokenExpiry(null);
localStorage.removeItem("event_token");
});
})
.catch(error => {
console.error("Socket inicializálási hiba:", error);
});
});
return () => {
mounted = false;