xcloudsdk
Version:
xcloud sdk
151 lines (150 loc) • 7.09 kB
JavaScript
"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();