// server.js const express = require("express"); const http = require("http"); const next = require("next"); const { Server } = require("socket.io"); const fs = require("fs"); const path = require("path"); const port = parseInt(process.env.PORT, 10) || 3000; const dev = process.env.NODE_ENV !== "production"; const app = next({ dev }); const handle = app.getRequestHandler(); app.prepare().then(() => { const expressApp = express(); const server = http.createServer(expressApp); const io = new Server(server); // Verbindung mit Clients io.on("connection", socket => { console.log("✅ Client verbunden via socket.io"); socket.on("message", data => { console.log("💬 Nachricht vom Client:", data); }); socket.emit("message", { message: "Hallo vom socket.io Server" }); //--------- const { m, u } = socket.handshake.query; console.log(`🧩 WebSocket-Client verbunden mit Parametern: m=${m}, u=${u}`); // Du kannst diese Info verwenden, um gezielt nur bestimmte Daten zu senden: socket.join(`map-${m}-user-${u}`); }); // 🌍 Next.js Routing expressApp.all("*", (req, res) => { return handle(req, res); }); // 📁 Datei überwachen: GisLinesStatus.json (Pfad anpassen falls nötig) const statusFilePath = path.join(__dirname, "mockData", "GisLinesStatus.json"); fs.watchFile(statusFilePath, { interval: 5000 }, async () => { console.log("📁 Änderung erkannt: GisLinesStatus.json"); try { const content = fs.readFileSync(statusFilePath, "utf8"); const data = JSON.parse(content); if (Array.isArray(data.Statis)) { io.emit("gisLinesStatusUpdated", data.Statis); console.log("📤 Update gesendet an Clients via Socket.IO"); } else { console.warn("⚠️ 'Statis' fehlt oder hat falsches Format"); } } catch (e) { console.error("❌ Fehler beim Parsen von GisLinesStatus.json:", e.message); } }); // 🚀 Server starten server.listen(port, () => { console.log(`🚀 Server mit socket.io läuft auf http://localhost:${port}`); }); });