UNPKG

xcloudsdk

Version:

xcloud sdk

151 lines (150 loc) 7.09 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); const socket_io_client_1 = require("socket.io-client"); const entity_1 = require("../entity"); const utils_1 = require("../utils"); const webSdkBase_1 = require("./webSdkBase"); class CloudPrint extends webSdkBase_1.webSdkBase { constructor() { super("Print"); this.isOpen = false; this.socket = null; this.printerList = []; this.printResultCallbacks = []; } Init(printServer) { if (this.socket) { this.socket.disconnect(); this.socket = null; } return new Promise((resolve, reject) => { this.socket = (0, socket_io_client_1.io)(printServer.wssUrl.replace("/socket.io", ""), { transports: ["websocket"], autoConnect: false, // 手动连接, auth: { token: printServer.token, }, }); this.socket.on("connect", () => { var _a; this.isOpen = true; (_a = this.socket) === null || _a === void 0 ? void 0 : _a.emit(printServer.token); console.log("Socket.IO 连接已打开"); // 服务端应该在连接成功后发送 'clients' 或 'printerList' 事件 }); this.socket.on("disconnect", (reason) => { this.isOpen = false; this.socket = null; console.log("Socket.IO 已断开连接:", reason); }); this.socket.on("connect_error", (error) => { this.isOpen = false; this.socket = null; console.error("Socket.IO 连接错误:", error); reject(entity_1.SdkResult.Fail(`Socket.IO 连接失败: ${error}`)); }); this.socket.on("clients", (clients) => __awaiter(this, void 0, void 0, function* () { this.printerList = []; yield (0, utils_1.SyncEachObj)(clients, (client, clientId) => __awaiter(this, void 0, void 0, function* () { if (client && client.printerList) { const printList = client.printerList; if (printList && printList.length > 0) { this.printerList.push(...printList.map((m) => ({ displayName: m.displayName, name: m.name, description: m.description, status: m.status, hostName: client.hostname, isDefault: m.isDefault, ip: client.ip, client: clientId, }))); } } return true; })); resolve(entity_1.SdkResult.Success(this.printerList)); // 注意:'clients' 事件不直接返回 printerList,可能需要等待 'printerList' 事件 })); // this.socket.on('printerList', (printerList: Array<any>) => { // if (printerList && printerList.length > 0) { // this.printerList = printerList.map(m => ({ // displayName: m.displayName, // name: m.name, // hostName: m.server?.hostname, // isDefault: m.isDefault, // ip: m.server?.ip, // client: m.server?.clientId, // description: m.description, // status: m.status // })); // } // resolve(SdkResult.Success(this.printerList)); // }); this.socket.on("render-print-success", (resultObj) => { this.printResultCallbacks.forEach((callback) => callback("render-print-success", resultObj)); this.printResultCallbacks = []; }); this.socket.on("error", (resultObj) => { this.printResultCallbacks.forEach((callback) => callback("error", resultObj)); this.printResultCallbacks = []; }); this.socket.on("render-print-error", (resultObj) => { this.printResultCallbacks.forEach((callback) => callback("render-print-error", resultObj)); this.printResultCallbacks = []; }); this.socket.connect(); }); } Print(template, data, client, printerName) { return new Promise((resolve, reject) => { let printer = this.printerList.find((m) => m.client == client && m.isDefault); if (printerName) { printer = this.printerList.find((m) => m.client == client && m.name === printerName); } if (printer && this.socket && this.isOpen) { this.printResultCallbacks.push((eventName, resultObj) => { const msg = resultObj === null || resultObj === void 0 ? void 0 : resultObj.msg; if (eventName.includes("print-success")) { resolve(entity_1.SdkResult.Success(msg || "打印成功!")); } else { resolve(entity_1.SdkResult.Fail(msg || "打印失败,请联系管理员!")); } }); const printObj = { data, template: template, client: printer.client, printer: printerName ? printer.name : "", pageSize: { height: template.panels[0].height * 1000, width: template.panels[0].width * 1000, }, }; this.socket.emit("render-print", printObj); } else { reject(entity_1.SdkResult.Fail("没有找到打印机或连接未打开!")); } }); } Close() { if (this.socket) { this.socket.disconnect(); this.socket = null; this.isOpen = false; } return entity_1.SdkResult.Success(null); } } exports.default = new CloudPrint();