From e69fd7b33bae4d5705a2c22059a7099b8098c6c5 Mon Sep 17 00:00:00 2001 From: "DESKTOP-1R2VSQH\\Lenovo ThinkPad E490" Date: Thu, 6 Mar 2025 16:33:47 +0700 Subject: [PATCH] test --- src/app.ts | 56 ++++++++++++++--------------- src/controllers/ReportController.ts | 18 ++++++++-- 2 files changed, 43 insertions(+), 31 deletions(-) diff --git a/src/app.ts b/src/app.ts index cd0edf5e..80bfa448 100644 --- a/src/app.ts +++ b/src/app.ts @@ -13,18 +13,16 @@ import { OrganizationController } from "./controllers/OrganizationController"; import logMiddleware from "./middlewares/logs"; import { CommandController } from "./controllers/CommandController"; import { ProfileSalaryController } from "./controllers/ProfileSalaryController"; -import { WebSocketServer } from "ws"; + import http from "http"; -export const wss = new WebSocketServer({ noServer: true, - path: "/api/v1/org/socket", - }); +import { WebSocketServer } from "ws"; + +export const wss = new WebSocketServer({ noServer: true, path: "/api/v1/org/socket" }); async function main() { await AppDataSource.initialize(); - + const app = express(); - // สร้างเซิร์ฟเวอร์ HTTP - const server = http.createServer(app); app.use( cors({ @@ -64,7 +62,7 @@ async function main() { console.error("Error executing function from controller:", error); } }); - + const cronTime_Oct = "0 0 1 10 *"; cron.schedule(cronTime_Oct, async () => { try { @@ -74,7 +72,7 @@ async function main() { console.error("Error executing function from controller:", error); } }); - + const cronTime_Tenure = "0 0 * * *"; cron.schedule(cronTime_Tenure, async () => { try { @@ -108,38 +106,38 @@ async function main() { runMessageQueue(); - // การจัดการคำขออัปเกรดจาก HTTP เป็น WebSocket - server.on("upgrade", (request:any, socket:any, head:any) => { - console.log("🔹 Handling upgrade request..."); - wss.handleUpgrade(request, socket, head, (ws:any) => { - console.log("🔹 WebSocket connection established"); - wss.emit("connection", ws, request); - }); - }); + // สร้างเซิร์ฟเวอร์ HTTP + const server = http.createServer(app); - wss.on("connection", (ws:any) => { - console.log("✅ Client connected to WebSocket"); + // ✅ WebSocket Handling + wss.on("connection", (ws) => { + console.log("✅ WebSocket Client Connected"); + // clients.add(ws); // เก็บ client ไว้ + + // ✅ ตั้ง Heartbeat (ping/pong) + + ws.on("message", (message) => { + console.log("📩 Received:", message.toString()); + ws.send("📡 Server Received: " + message.toString()); + }); ws.on("close", () => { - console.log("❌ Client disconnected"); - }); - - ws.on("error", (error:any) => { - console.error("WebSocket error:", error); + console.log("❌ WebSocket Client Disconnected"); }); }); - // ตั้งค่า Express routes - app.get('/', (req, res) => { - res.send('Hello from Express!'); + // ✅ อัปเกรด HTTP เป็น WebSocket + server.on("upgrade", (req, socket, head) => { + wss.handleUpgrade(req, socket, head, (ws) => { + wss.emit("connection", ws, req); + }); }); - + server.listen(APP_PORT, APP_HOST, () => { console.log(`[APP] Application is running on: http://${APP_HOST}:${APP_PORT}`); console.log(`[APP] Swagger on: http://${APP_HOST}:${APP_PORT}/api-docs`); console.log("[APP] HTTP Server is listening on current port"); }); - } main(); diff --git a/src/controllers/ReportController.ts b/src/controllers/ReportController.ts index 59748800..a8adbc38 100644 --- a/src/controllers/ReportController.ts +++ b/src/controllers/ReportController.ts @@ -32,6 +32,9 @@ import { viewRegistryOfficer } from "../entities/view/viewRegistryOfficer"; import { viewRegistryEmployee } from "../entities/view/viewRegistryEmployee"; import { EmployeeTempPosMaster } from "../entities/EmployeeTempPosMaster"; +import { WebSocket } from "ws"; +import { wss } from "../app"; // ✅ Import clients + @Route("api/v1/org/report") @Tags("Report") @Security("bearerAuth") @@ -3537,8 +3540,19 @@ export class ReportController extends Controller { } } } - - return new HttpSuccess({ template: "report2", reportName: "report2", data: { data } }); + + // ✅ ส่งข้อมูลไปยังทุกไคลเอนต์ที่เชื่อมต่อ WebSocket + wss.clients.forEach((client) => { + if (client.readyState === WebSocket.OPEN) { + if (client.readyState === 1) { + client.send( + JSON.stringify({ template: "report2", reportName: "report2", data: { data } }), + ); + } + } + }); + + // return new HttpSuccess({ template: "report2", reportName: "report2", data: { data } }); } /**