From fa073242b836aa7012e01b23d72e64ae08195290 Mon Sep 17 00:00:00 2001 From: AdisakKanthawilang Date: Thu, 6 Mar 2025 18:25:27 +0700 Subject: [PATCH] test ws --- src/app.ts | 34 ++++++++++++++++++++++--- src/controllers/PermissionController.ts | 5 +++- src/controllers/ReportController.ts | 6 ++++- src/services/webSocket.ts | 16 ++++++++++++ 4 files changed, 56 insertions(+), 5 deletions(-) create mode 100644 src/services/webSocket.ts diff --git a/src/app.ts b/src/app.ts index 2151acec..8e105830 100644 --- a/src/app.ts +++ b/src/app.ts @@ -13,7 +13,12 @@ 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/vi/org/socket", + }); async function main() { await AppDataSource.initialize(); @@ -102,9 +107,32 @@ async function main() { runMessageQueue(); - app.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`); + const server = http.createServer(app); + + // การจัดการคำขออัปเกรดจาก 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); + }); + }); + + wss.on("connection", (ws:any) => { + console.log("✅ Client connected to WebSocket"); + + ws.on("close", () => { + console.log("❌ Client disconnected"); + }); + + ws.on("error", (error:any) => { + console.error("WebSocket error:", error); + }); + }); + + server.listen(APP_PORT, APP_HOST, () => { + console.log(`[APP] Application is running on: http://localhost:${APP_PORT}`); + console.log(`[APP] Swagger on: http://localhost:${APP_PORT}/api-docs`); console.log("[APP] HTTP Server is listening on current port"); }); } diff --git a/src/controllers/PermissionController.ts b/src/controllers/PermissionController.ts index 77cc61d0..852b3beb 100644 --- a/src/controllers/PermissionController.ts +++ b/src/controllers/PermissionController.ts @@ -55,6 +55,7 @@ export class PermissionController extends Controller { } let reply = await getAsync("role_" + profile.id); + console.log(">>>reply",reply); if (reply != null) { reply = JSON.parse(reply); } else { @@ -84,11 +85,13 @@ export class PermissionController extends Controller { throw new HttpError(HttpStatus.NOT_FOUND, "ไม่พบข้อมูลสิทธิ์"); } } - + console.log(">>>posMaster",posMaster); const getDetail = await this.authRoleRepo.findOne({ select: ["id", "roleName", "roleDescription"], where: { id: posMaster.authRoleId }, }); + console.log(">>>detail",getDetail); + if (!getDetail) { throw new HttpError(HttpStatus.NOT_FOUND, "ไม่พบข้อมูล"); } diff --git a/src/controllers/ReportController.ts b/src/controllers/ReportController.ts index 59748800..ea0130cc 100644 --- a/src/controllers/ReportController.ts +++ b/src/controllers/ReportController.ts @@ -31,6 +31,7 @@ import { Profile } from "../entities/Profile"; import { viewRegistryOfficer } from "../entities/view/viewRegistryOfficer"; import { viewRegistryEmployee } from "../entities/view/viewRegistryEmployee"; import { EmployeeTempPosMaster } from "../entities/EmployeeTempPosMaster"; +import { sendWebSocket } from "../services/webSocket"; @Route("api/v1/org/report") @Tags("Report") @@ -1369,6 +1370,7 @@ export class ReportController extends Controller { } } } + return new HttpSuccess({ template: "report1", reportName: "report1", data: { data } }); } @@ -3537,8 +3539,10 @@ export class ReportController extends Controller { } } } + const metaData = { template: "report2", reportName: "report2", data: { data } }; + sendWebSocket(metaData) - return new HttpSuccess({ template: "report2", reportName: "report2", data: { data } }); + // return new HttpSuccess({ template: "report2", reportName: "report2", data: { data } }); } /** diff --git a/src/services/webSocket.ts b/src/services/webSocket.ts new file mode 100644 index 00000000..5dd006f0 --- /dev/null +++ b/src/services/webSocket.ts @@ -0,0 +1,16 @@ +import { WebSocket } from "ws"; +import { wss } from "../app"; + +export async function sendWebSocket(data:any){ + wss.clients.forEach((client: any) => { + if (client.readyState === WebSocket.OPEN) { + const message = JSON.stringify(data); + console.log("📤 Sending data to client:", message); + client.send(message, (err:any) => { + if (err) { + console.error("❌ Error sending message:", err); + } + }); + } + }); +} \ No newline at end of file