feat: implement Socket.IO server with queue management and update environment variables
This commit is contained in:
85
app/page.tsx
85
app/page.tsx
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user