import net from "net"; import {OpenAPIHono} from "@hono/zod-openapi"; import {log} 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"))) || 2222; 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, () => { log.info(`TCP Server listening on port ${tcpPort[0].value}`); }); 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 startTCPServer(); export default app;