import net from "net"; 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"; 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 app = new OpenAPIHono(); export const startTCPServer = () => { if (isServerRunning) return {success: false, message: "Server is already running"}; 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"); }); socket.on("end", () => { console.log("Client disconnected"); tcpSockets.delete(socket); }); 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"}; }; app.route("/tcpserver/start", startTCP); app.route("/tcpserver/stop", stopTCP); app.route("/tcpserver/restart", restartTCP); // start the server after on system start up setTimeout(() => { startTCPServer(); }, 5000); export default app;