diff --git a/server/services/ocme/controller/triggerCamera.ts b/server/services/ocme/controller/triggerCamera.ts new file mode 100644 index 0000000..3c7eb18 --- /dev/null +++ b/server/services/ocme/controller/triggerCamera.ts @@ -0,0 +1,49 @@ +import net from "net"; +import { db } from "../../../../database/dbclient.js"; +import { settings } from "../../../../database/schema/settings.js"; +import { eq } from "drizzle-orm"; +import { createLog } from "../../logger/logger.js"; + +export const triggerScanner = async () => { + const camera = new net.Socket(); + let setting = await db + .select() + .from(settings) + .where(eq(settings.name, "zebraScanners")); + if (setting.length === 0) { + return { + success: false, + message: "Looks like the setting is missing.", + }; + } + const scannerData = JSON.parse(setting[0]?.value); + let data = scannerData.filter((n: any) => n.name === "wrapper1"); + let port = data[0].port; + console.log(data); + createLog( + "info", + "wrapperScanner", + "ocme", + `End of line Camera was triggered` + ); + return new Promise((resolve, reject) => { + camera.connect(port, data[0].ip, async () => { + createLog("info", "wrapperScanner", "ocme", `Triggered`); + camera.write("TRIGGER", "utf8"); + camera.end(); + resolve({ success: true, message: "Camera was triggered." }); + }); + + camera.on("error", (error) => { + createLog("error", "wrapperScanner", "ocme", `${error}`); + resolve({ + success: false, + message: `There was an error triggering the camera: ${JSON.stringify( + error + )}`, + }); + }); + + resolve({ success: true, message: "Camera was triggered." }); + }); +}; diff --git a/server/services/ocme/route/triggerCamera.ts b/server/services/ocme/route/triggerCamera.ts new file mode 100644 index 0000000..c1a5797 --- /dev/null +++ b/server/services/ocme/route/triggerCamera.ts @@ -0,0 +1,25 @@ +import { createRoute, OpenAPIHono, z } from "@hono/zod-openapi"; +import { getInfo } from "../controller/getInfo.js"; +import { apiHit } from "../../../globalUtils/apiHits.js"; +import { responses } from "../../../globalUtils/routeDefs/responses.js"; +import { triggerScanner } from "../controller/triggerCamera.js"; + +const app = new OpenAPIHono({ strict: false }); + +app.openapi( + createRoute({ + tags: ["ocme"], + summary: "Triggers the camera at the end of the dyco.", + method: "get", + path: "/manualCameraTrigger", + responses: responses(), + }), + async (c) => { + // make sure we have a vaid user being accessed thats really logged in + apiHit(c, { endpoint: "api/auth/register" }); + const manualTrigger = await triggerScanner(); + console.log(manualTrigger); + return c.json({ success: true, message: "Manual triggered" }); + } +); +export default app; diff --git a/server/services/tcpServer/tcpServer.ts b/server/services/tcpServer/tcpServer.ts index 25a1c2b..459fec6 100644 --- a/server/services/tcpServer/tcpServer.ts +++ b/server/services/tcpServer/tcpServer.ts @@ -1,64 +1,87 @@ import net from "net"; -import {OpenAPIHono} from "@hono/zod-openapi"; -import {createLog} from "../logger/logger.js"; +import { OpenAPIHono } from "@hono/zod-openapi"; +import { createLog } from "../logger/logger.js"; import startTCP from "./route/startServer.js"; import stopTCP from "./route/stopServer.js"; import restartTCP from "./route/restartServer.js"; -import {db} from "../../../database/dbclient.js"; -import {settings} from "../../../database/schema/settings.js"; -import {eq} from "drizzle-orm"; +import { db } from "../../../database/dbclient.js"; +import { settings } from "../../../database/schema/settings.js"; +import { eq } from "drizzle-orm"; +import { postLabelData } from "../ocme/controller/postRunningNr.js"; let tcpServer: net.Server; let tcpSockets: Set = new Set(); let isServerRunning = false; -const tcpPort = await db.select().from(settings).where(eq(settings.name, "tcpPort")); +const tcpPort = await db + .select() + .from(settings) + .where(eq(settings.name, "tcpPort")); const app = new OpenAPIHono(); export const startTCPServer = () => { - if (isServerRunning) return {success: false, message: "Server is already running"}; + if (isServerRunning) + return { success: false, message: "Server is already running" }; - tcpServer = net.createServer((socket) => { - console.log("Client connected"); + tcpServer = net.createServer((socket) => { + console.log("Client connected"); - tcpSockets.add(socket); - socket.on("data", (data: Buffer) => { - console.log("Received:", data.toString()); - socket.write("Message received"); - }); + tcpSockets.add(socket); + socket.on("data", (data: Buffer) => { + console.log("Received:", data.toString()); + const parseData = data.toString("utf-8").trimEnd().split(" "); + // hb from the scanners + if (parseData[0] === "HB") { + return; + } - socket.on("end", () => { - console.log("Client disconnected"); - tcpSockets.delete(socket); - }); + // alert from the printers + if (parseData[0] === "ALERT:" || parseData[0] === "ALERT") { + return; + } - socket.on("error", (err: Error) => { - console.error("Socket error:", err); - tcpSockets.delete(socket); - }); + // from the wrapper send the data + postLabelData(parseData); }); - tcpServer.listen(tcpPort[0]?.value ?? 2222, () => { - createLog("info", "lst", "tcp", `TCP Server listening on port ${tcpPort[0]?.value ?? 2222}`); + socket.on("end", () => { + console.log("Client disconnected"); + tcpSockets.delete(socket); }); - isServerRunning = true; - return {success: true, message: "TCP Server started"}; + socket.on("error", (err: Error) => { + console.error("Socket error:", err); + tcpSockets.delete(socket); + }); + }); + + tcpServer.listen(tcpPort[0]?.value ?? 2222, () => { + createLog( + "info", + "lst", + "tcp", + `TCP Server listening on port ${tcpPort[0]?.value ?? 2222}` + ); + }); + + isServerRunning = true; + return { success: true, message: "TCP Server started" }; }; // Function to stop the TCP server export const stopTCPServer = () => { - if (!isServerRunning) return {success: false, message: "Server is not running"}; - for (const socket of tcpSockets) { - socket.destroy(); - } - tcpSockets.clear(); - tcpServer.close(() => { - console.log("TCP Server stopped"); - }); - isServerRunning = false; - return {success: true, message: "TCP Server stopped"}; + if (!isServerRunning) + return { success: false, message: "Server is not running" }; + for (const socket of tcpSockets) { + socket.destroy(); + } + tcpSockets.clear(); + tcpServer.close(() => { + console.log("TCP Server stopped"); + }); + isServerRunning = false; + return { success: true, message: "TCP Server stopped" }; }; app.route("/tcpserver/start", startTCP); @@ -67,7 +90,7 @@ app.route("/tcpserver/restart", restartTCP); // start the server after on system start up setTimeout(() => { - startTCPServer(); + startTCPServer(); }, 5000); export default app;