diff --git a/src/config/base.json b/src/config/base.json index d4171fb..610625d 100644 --- a/src/config/base.json +++ b/src/config/base.json @@ -1,4 +1,5 @@ { - "defultServer": "http://localhost:3000", - "defaultPrinter": "192.168.1.254" + "defaultServer": "http://localhost:3000", + "defaultPrinterIp": "192.168.1.254", + "defaultPrinterPort": 9100 } diff --git a/src/main/LogService.ts b/src/main/LogService.ts index 6e899eb..56048e3 100644 --- a/src/main/LogService.ts +++ b/src/main/LogService.ts @@ -25,6 +25,7 @@ export class LogService { this.info(`--- Log initialized at ${now.toISOString()} ---`); console.log(`Log file: ${this.logPath}`); } + /** * Garantizar que sea singleton * @returns diff --git a/src/main/handlers.ts b/src/main/handlers.ts index 2e5aae2..672d04f 100644 --- a/src/main/handlers.ts +++ b/src/main/handlers.ts @@ -67,7 +67,7 @@ export async function printReqHandler( logger.logOperation("printReq", data); return new Promise((res, rej) => { console.log("nfc:printReq", data); - const port = 9100; + const port = data.printerPort; let finished = false; const socket = createConnection(port, data.printerURL); diff --git a/src/main/index.ts b/src/main/index.ts index 22456c2..8f92116 100644 --- a/src/main/index.ts +++ b/src/main/index.ts @@ -5,6 +5,7 @@ import icon from "../../resources/icon.png?asset"; import { NfcService } from "../services/NfcService"; import { labelReqHandler, printReqHandler } from "./handlers"; import { logger } from "./LogService"; +import { createConnection } from "net"; function createWindow(): void { // Create the browser window. @@ -87,6 +88,41 @@ app.whenReady().then(() => { } }); + ipcMain.handle( + "ping:socket", + async (_event, data: { ip: string; port: number }) => { + return new Promise((req, rej) => { + const { ip, port } = data; + let finished = false; + console.log("Pinging,", ip, port); + const socket = createConnection(port, ip); + socket.setTimeout(3 * 1000); + + socket.on("connect", (e) => { + console.log("Conectado!", e); + logger.info("Printer connected, sending label..."); + socket.end(); + finished = true; + req(true); + }); + + socket.on("timeout", (err) => { + if (finished) return; + finished = true; + socket.destroy(); + rej(false); + }); + + socket.on("error", (err) => { + if (finished) return; + finished = true; + socket.destroy(); + rej(false); + }); + }); + }, + ); + createWindow(); app.on("activate", function () { diff --git a/src/preload/index.d.ts b/src/preload/index.d.ts index cb111f9..9cde07c 100644 --- a/src/preload/index.d.ts +++ b/src/preload/index.d.ts @@ -19,6 +19,7 @@ export type CodeRequest = { export type PrinterRequest = { printerURL: string; + printerPort: number; label: string; }; @@ -31,10 +32,12 @@ export interface NfcAPI { onRemoved: (callback: (event: { uid: string }) => void) => void; onError: (callback: (event: { message: string }) => void) => void; ping: (url: string) => Promise; + pingSocket: (args: { ip: string; port: number }) => Promise; removeAllListeners: () => void; labelReq: (args: CodeRequest) => Promise>; printReq: (args: { printerURL: string; + printerPort: number; label: string; }) => Promise; } diff --git a/src/preload/index.ts b/src/preload/index.ts index a772f79..df38c55 100644 --- a/src/preload/index.ts +++ b/src/preload/index.ts @@ -29,6 +29,9 @@ const api = { ping: (url: string): Promise => { return ipcRenderer.invoke("ping:url", url); }, + pingSocket: (args: { ip: string; port: number }): Promise => { + return ipcRenderer.invoke("ping:socket", args); + }, removeAllListeners: (): void => { ipcRenderer.removeAllListeners("nfc:reader"); ipcRenderer.removeAllListeners("nfc:tag"); diff --git a/src/renderer/src/App.vue b/src/renderer/src/App.vue index 105aaa1..01cd156 100644 --- a/src/renderer/src/App.vue +++ b/src/renderer/src/App.vue @@ -18,13 +18,13 @@ const navigateTo = (view: "main" | "config"): void => {
NFC.INTERFACE.v1
READY // LOCAL_ACCESS
- + diff --git a/src/renderer/src/components/ConfigView.vue b/src/renderer/src/components/ConfigView.vue index 98dc0ee..e993c58 100644 --- a/src/renderer/src/components/ConfigView.vue +++ b/src/renderer/src/components/ConfigView.vue @@ -1,10 +1,11 @@