UNPKG

@hysc/boom-cpp-plugin

Version:

```markdown 使用示例,展示如何在 Electron 主进程中集成和使用该插件,使用 CommonJS 的引用方式:

208 lines (199 loc) 7.29 kB
const logger = require('electron-log'); const path = require('path'); const os = require('os'); const arch = os.arch(); const platform = os.platform(); const fs = require('fs'); const isWindows = () => platform === 'win32' const isMac = () => platform === 'darwin' class QCFPlugin { constructor(isDev = false) { let dllPath = path.resolve(__dirname, './'); let lib try { let fileMidPath = `${platform}-${arch}`; if (isWindows()) { if (os.arch() == 'x64') { if (isDev) { dllPath = path.resolve(__dirname, './win32-x64/'); } else { dllPath = path.resolve(process.resourcesPath, './app.asar.unpacked/node_modules/@hysc/boom-cpp-plugin/qcfPlugin', fileMidPath); } process.env.PATH = dllPath + ';' + process.env.PATH; lib = require(`./win32-x64/BoomGdPlugin.node`); } else { dllPath = path.resolve(process.resourcesPath, './app.asar.unpacked/node_modules/@hysc/boom-cpp-plugin/qcfPlugin', fileMidPath); process.env.PATH = dllPath + ';' + process.env.PATH; lib = require(`./win32-ia32/BoomGdPlugin.node`); } } else if (isMac()) { if (isDev) { dllPath = path.resolve(__dirname, './'); } else { dllPath = path.resolve(process.resourcesPath, './app.asar.unpacked/node_modules/@hysc/boom-cpp-plugin/qcfPlugin', fileMidPath); } const exists = fs.existsSync(dllPath); console.log('cpp plugin dllPath:', dllPath, 'exists:', exists) if (os.arch() == 'arm64' && exists) { process.env.PATH = dllPath + ';' + process.env.PATH; lib = require(`./darwin-arm64/BoomGdPlugin.node`); } else { fileMidPath = 'darwin-x64'; if (isDev) { dllPath = path.resolve(__dirname, './'); } else { dllPath = path.resolve(process.resourcesPath, './app.asar.unpacked/node_modules/@hysc/boom-cpp-plugin/qcfPlugin', fileMidPath); } process.env.PATH = dllPath + ';' + process.env.PATH; lib = require(`./darwin-x64/BoomGdPlugin.node`); } } } catch (error) { logger.log('gd: dllPath:', dllPath) logger.log('gd: load node error', error); } logger.log('gd:dllpath:', dllPath); try { const instanse = new lib.BoomGdPlugin(); this.instance = instanse; logger.log('gd: instance init success', this.instance, os.arch()); } catch (error) { logger.log('gd: init error:', error); } } /** * 预激活 * @param path * @param logPath * @param ukeyType 不传默认是6, U盾传8 * @returns */ preActivate(path, logPath, ukeyType) { this.checkSafe() return this.instance.preActivate(path, logPath, ukeyType) } async reportSPMWithSignPubkey(algName, CspAddr, port) { this.checkSafe(); const res = await this.instance.reportSPMWithSignPubkey(algName, CspAddr, port); res.hexCode = res.code.toString(16) return res; } setKeyFilePath(path) { this.checkSafe(); return this.instance.setKeyFilePath(path); } setCustomConfig(customItemName, path) { this.checkSafe(); return this.instance.setCustomConfig(customItemName, path); } /** * 国盾初始化 * @param useCspInfo * @param appType * @param appAccount * @param cspID * @returns */ async init(appType, appAccount, cspID, cspIP='qkeys.cn', cspPort=18000) { this.checkSafe(); const res = await this.instance.init(appType, appAccount, cspID, cspIP, cspPort); res.hexCode = res.code.toString(16) return res } /** 入网认证(基于公钥) */ async auth_pubkey(appType, appAccount, cspID, cspIP='qkeys.cn', cspPort=18000) { this.checkSafe(); const res = await this.instance.auth_pubkey(appType, appAccount, cspID, cspIP, cspPort); return { code: res.code, hexCode: res.code.toString(16), message: res.message, token: res.token, tokenValidSeconds: res.tokenValidSeconds }; } /** 充注 */ async fillKey(serverInfo) { this.checkSafe(); return await this.instance.fillKey(serverInfo); } finish() { console.log('gd:finish') this.checkSafe(); const res = this.instance.finish(); //this.instance = null; return res; } /** 获取密钥量信息 */ async getSPMKeyInfo(phoneNumber, pin) { this.checkSafe(); return await this.instance.getSPMKeyInfo(phoneNumber, pin); } /** * 入网认证函数 */ async auth() { this.checkSafe(); const res = await this.instance.auth(); return { code: res.code, hexCode: res.code.toString(16), message: res.message, token: res.token, tokenValidSeconds: res.tokenValidSeconds }; } /** * 密钥续充 先去判断密钥量<50去续充 续充 * @param token 用户入网认证获得的令牌 * @param kenLen 要续充的密钥长度 * @param reFillFlag 续充模式(0:追加模式,1:覆盖模式) * @returns 返回:成功返回RET_OK,失败返回错误码 */ async reFillKey(token, kenLen, reFillFlag) { this.checkSafe(); return await this.instance.reFillKey(token, kenLen, reFillFlag); } reFillKeySync(token, kenLen, reFillFlag) { this.checkSafe(); return this.instance.reFillKeySync(token, kenLen, reFillFlag); } /** * 生成组-跨平台 * @param token 认证令牌句柄 * @param groupKeyLen 申请组密钥的长度(16整数倍),最大支持256字节 * @param groupName 组名称 * @returns groupID 组ID */ async createGroup(token, groupKeyLen, groupName) { this.checkSafe(); return await this.instance.createGroup(token, groupKeyLen, groupName); } /** * 根据组ID申请组密钥 * @param token 认证令牌句柄 * @param groupID 组标识 * @returns groupKey */ async applyKeyWithGroupID(token, groupID) { this.checkSafe(); return await this.instance.applyKeyWithGroupID(token, groupID); } hello(name) { return this.instance.hello(name); } setLogCallback(callback) { this.checkSafe(); return this.instance.setLogCallback(callback); } setEventCallback(key, callback) { return this.instance.setEventCallback(key, callback); } checkSafe() { if (!this.instance) { throw new Error('guodun 实例未初始化'); } } } module.exports = QCFPlugin;