fofstudio-aimcpztdata 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/MCPMain.js +2577 -0
- package/build/modules/BufferClass.js +6 -0
- package/build/modules/DataPackaging.js +57 -0
- package/build/modules/DecoderAPI.js +30 -0
- package/build/modules/DialogAPI.js +48 -0
- package/build/modules/EXEAPI.js +64 -0
- package/build/modules/FOFTcp.js +309 -0
- package/build/modules/FOFUDP.js +78 -0
- package/build/modules/File.js +525 -0
- package/build/modules/IP.js +54 -0
- package/build/modules/NoSqlFOFStudio.js +63 -0
- package/build/modules/PlatAPI.js +115 -0
- package/build/modules/ProcessAPI.js +36 -0
- package/build/modules/ReadAPI.js +67 -0
- package/build/modules/SendHttp.js +484 -0
- package/build/modules/dns.js +36 -0
- package/build/modules/mysql.js +0 -0
- package/build/modules/sqlServer.js +0 -0
- package/build/modules/trayApi.js +34 -0
- package/package.json +37 -0
|
@@ -0,0 +1,525 @@
|
|
|
1
|
+
const fs = require('fs');
|
|
2
|
+
const path = require('path');
|
|
3
|
+
const exec = require('child_process').exec
|
|
4
|
+
let ifFile = true;
|
|
5
|
+
exports.getAppPath = (Type = "") => {
|
|
6
|
+
if (ifFile == false) {
|
|
7
|
+
return;
|
|
8
|
+
}
|
|
9
|
+
let path = __dirname.replaceAll("\\", "/");
|
|
10
|
+
const lastIndex = path.lastIndexOf('/modules');
|
|
11
|
+
if (Type == "MCP") {
|
|
12
|
+
if (lastIndex !== -1) {
|
|
13
|
+
path = path.slice(0, lastIndex);
|
|
14
|
+
}
|
|
15
|
+
} else {
|
|
16
|
+
if (lastIndex !== -1) {
|
|
17
|
+
path = path.slice(0, lastIndex) + '/DataHtml';
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
return path;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
exports.getDesktop = () => {
|
|
24
|
+
if (ifFile == false) {
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
if (process.platform == 'darwin') {
|
|
28
|
+
return process.env.HOME + "/Desktop"
|
|
29
|
+
}
|
|
30
|
+
if (process.platform == 'linux') {
|
|
31
|
+
return process.env.HOME
|
|
32
|
+
}
|
|
33
|
+
let path_ = process.env.USERPROFILE + "/Desktop"
|
|
34
|
+
path_ = path_.replaceAll("\\", "/")
|
|
35
|
+
return path_;
|
|
36
|
+
}
|
|
37
|
+
exports.getPathAll = () => {
|
|
38
|
+
if (ifFile == false) {
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
return process.env
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* 遍历文件夹所有文件
|
|
45
|
+
* @dirPath 文件夹路径
|
|
46
|
+
* @mode 0(默认)=按级输出,1=所有文件输出到同一级
|
|
47
|
+
* @pathMode 0(默认)=绝对路径,1=仅文件名
|
|
48
|
+
*/
|
|
49
|
+
exports.listFile = async (dirPath, funEv = undefined) => {
|
|
50
|
+
if (ifFile == false) {
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
try {
|
|
54
|
+
listFile_(dirPath).then(res => {
|
|
55
|
+
if (funEv != undefined) {
|
|
56
|
+
let PathArr = output(res, 0)
|
|
57
|
+
for (let index = 0; index < PathArr.length; index++) {
|
|
58
|
+
PathArr[index] = PathArr[index].replace("-- ", "")
|
|
59
|
+
}
|
|
60
|
+
funEv(PathArr);
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
} catch (err) {
|
|
64
|
+
if (funEv != undefined) {
|
|
65
|
+
funEv([]);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
// 监视指定目录中的文件变化
|
|
70
|
+
exports.watch = (dirPath, funEv = undefined) => {
|
|
71
|
+
if (ifFile == false) {
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
try {
|
|
75
|
+
fs.watch(dirPath, (eventType, filename) => {
|
|
76
|
+
if (filename) {
|
|
77
|
+
if (funEv != undefined) {
|
|
78
|
+
funEv({
|
|
79
|
+
"事件类型": eventType,
|
|
80
|
+
"改变名称": filename
|
|
81
|
+
})
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
} catch (err) {
|
|
86
|
+
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
const listFile_ = async (dirPath, mode = 1, pathMode = 0) => {
|
|
90
|
+
return await listDir(dirPath, mode, pathMode);
|
|
91
|
+
}
|
|
92
|
+
const listDir = async (dirPath, mode, pathMode) => {
|
|
93
|
+
try {
|
|
94
|
+
var res = new Array();
|
|
95
|
+
const files = await fs.readdirSync(dirPath, { withFileTypes: true });
|
|
96
|
+
for (const file of files) {
|
|
97
|
+
const name = file.name;
|
|
98
|
+
if (!file.isDirectory()) {
|
|
99
|
+
let fileName = pathMode ? name : path.resolve(dirPath, name);
|
|
100
|
+
res.push(fileName);
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
let value;
|
|
104
|
+
await listDir(path.resolve(dirPath, name), mode, pathMode).then(res => { value = res });
|
|
105
|
+
if (mode == 1) {
|
|
106
|
+
for (let i = 0; i < value.length; i++)
|
|
107
|
+
res.push(value[i]);
|
|
108
|
+
} else {
|
|
109
|
+
let dir = {};
|
|
110
|
+
let dirName = pathMode ? name : path.resolve(dirPath, name);
|
|
111
|
+
dir[dirName] = value;
|
|
112
|
+
res.push(dir);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
return res;
|
|
117
|
+
} catch (err) {
|
|
118
|
+
return null;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
function output(array, level) {
|
|
122
|
+
let logFile = [];
|
|
123
|
+
for (let i = 0; i < array.length; i++) {
|
|
124
|
+
const item = array[i];
|
|
125
|
+
let levelChar = '';
|
|
126
|
+
for (let j = 0; j < level; j++) levelChar += ' ';
|
|
127
|
+
levelChar += '-- ';
|
|
128
|
+
if (!(item instanceof Object)) {
|
|
129
|
+
logFile[logFile.length] = levelChar + item
|
|
130
|
+
} else {
|
|
131
|
+
const dirName = Object.keys(item)[0];
|
|
132
|
+
const dirArray = Object.values(item)[0];
|
|
133
|
+
logFile[logFile.length] = levelChar + dirName
|
|
134
|
+
output(dirArray, level + 1);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
return logFile
|
|
138
|
+
}
|
|
139
|
+
exports.getExe = () => {
|
|
140
|
+
if (ifFile == false) {
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
let pathAll = process.execPath;
|
|
144
|
+
pathAll = pathAll.replaceAll("\\", "/");
|
|
145
|
+
if (process.platform !== 'darwin') {
|
|
146
|
+
pathAll = pathAll.split("/");
|
|
147
|
+
if (pathAll.length >= 1) {
|
|
148
|
+
pathAll = pathAll[pathAll.length - 1]
|
|
149
|
+
pathAll = "/" + pathAll
|
|
150
|
+
pathAll = process.execPath.substring(0, process.execPath.length - pathAll.length)
|
|
151
|
+
} else {
|
|
152
|
+
pathAll = process.execPath
|
|
153
|
+
}
|
|
154
|
+
} else {
|
|
155
|
+
pathAll = pathAll.split("/Contents/Frameworks/Electron Helper (Renderer).app");
|
|
156
|
+
if (pathAll.length >= 1) {
|
|
157
|
+
pathAll = pathAll[pathAll.length - 1]
|
|
158
|
+
pathAll = "/Contents/Frameworks/Electron Helper (Renderer).app" + pathAll
|
|
159
|
+
pathAll = process.execPath.substring(0, process.execPath.length - pathAll.length)
|
|
160
|
+
let pathAll2 = pathAll.split("/");
|
|
161
|
+
if (pathAll2.length >= 1) {
|
|
162
|
+
pathAll2 = pathAll2[pathAll2.length - 1]
|
|
163
|
+
pathAll = pathAll.substring(0, pathAll.length - pathAll2.length)
|
|
164
|
+
}
|
|
165
|
+
} else {
|
|
166
|
+
pathAll = process.execPath
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
return pathAll;
|
|
170
|
+
}
|
|
171
|
+
exports.existsSync = (path) => {
|
|
172
|
+
if (ifFile == false) {
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
try {
|
|
176
|
+
return fs.existsSync(path);
|
|
177
|
+
} catch (err) {
|
|
178
|
+
return false;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
exports.writeFileSync = (data) => {
|
|
182
|
+
if (ifFile == false) {
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
try {
|
|
186
|
+
fs.writeFileSync(data["路径"], data["数据"]);
|
|
187
|
+
return true;
|
|
188
|
+
} catch (err) {
|
|
189
|
+
return false;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
exports.writeFileBase64Sync = (data) => {
|
|
193
|
+
if (ifFile == false) {
|
|
194
|
+
return;
|
|
195
|
+
}
|
|
196
|
+
try {
|
|
197
|
+
var b = new Buffer.from(data["数据"], 'base64')
|
|
198
|
+
fs.writeFileSync(data["路径"], b);
|
|
199
|
+
return true;
|
|
200
|
+
} catch (err) {
|
|
201
|
+
return false;
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
exports.writeFileHexSync = (data) => {
|
|
206
|
+
if (ifFile == false) {
|
|
207
|
+
return;
|
|
208
|
+
}
|
|
209
|
+
try {
|
|
210
|
+
var b = new Buffer.from(data["数据"], 'hex')
|
|
211
|
+
fs.writeFileSync(data["路径"], b);
|
|
212
|
+
return true;
|
|
213
|
+
} catch (err) {
|
|
214
|
+
return false;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
exports.readFileSync = (data) => {
|
|
218
|
+
if (ifFile == false) {
|
|
219
|
+
return;
|
|
220
|
+
}
|
|
221
|
+
if (fs.existsSync(data["路径"]) == true) {
|
|
222
|
+
if (data["编码"] == undefined) {
|
|
223
|
+
data["编码"] = "utf8";
|
|
224
|
+
}
|
|
225
|
+
try {
|
|
226
|
+
if (data["编码"] == "") {
|
|
227
|
+
return fs.readFileSync(data["路径"]);
|
|
228
|
+
} else {
|
|
229
|
+
return fs.readFileSync(data["路径"], data["编码"]);
|
|
230
|
+
}
|
|
231
|
+
} catch (err) {
|
|
232
|
+
return "";
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
} else {
|
|
236
|
+
return "";
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
exports.readFileBase64Sync = (data) => {
|
|
240
|
+
if (ifFile == false) {
|
|
241
|
+
return;
|
|
242
|
+
}
|
|
243
|
+
if (fs.existsSync(data["路径"]) == true) {
|
|
244
|
+
try {
|
|
245
|
+
let File = fs.readFileSync(data["路径"]);
|
|
246
|
+
return Buffer.from(File).toString('base64');
|
|
247
|
+
} catch (err) {
|
|
248
|
+
return "";
|
|
249
|
+
}
|
|
250
|
+
} else {
|
|
251
|
+
return "";
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
exports.readFileHexSync = (data) => {
|
|
255
|
+
if (ifFile == false) {
|
|
256
|
+
return;
|
|
257
|
+
}
|
|
258
|
+
if (fs.existsSync(data["路径"]) == true) {
|
|
259
|
+
try {
|
|
260
|
+
let File = fs.readFileSync(data["路径"]);
|
|
261
|
+
return Buffer.from(File).toString('hex');
|
|
262
|
+
} catch (err) {
|
|
263
|
+
return "";
|
|
264
|
+
}
|
|
265
|
+
} else {
|
|
266
|
+
return "";
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
exports.mkdirSync = (path) => {
|
|
270
|
+
if (ifFile == false) {
|
|
271
|
+
return;
|
|
272
|
+
}
|
|
273
|
+
if (fs.existsSync(path) == true) {
|
|
274
|
+
return true;
|
|
275
|
+
} else {
|
|
276
|
+
try {
|
|
277
|
+
fs.mkdirSync(path);
|
|
278
|
+
return true;
|
|
279
|
+
} catch (err) {
|
|
280
|
+
return false
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
exports.cp = (path, path2, funEv = undefined) => {
|
|
286
|
+
if (ifFile == false) {
|
|
287
|
+
return;
|
|
288
|
+
}
|
|
289
|
+
fs.cp(path, path2, { recursive: true }, (err) => {
|
|
290
|
+
if (err) {
|
|
291
|
+
if (funEv != undefined) {
|
|
292
|
+
funEv({ "状态": "失败", "数据": err })
|
|
293
|
+
}
|
|
294
|
+
} else {
|
|
295
|
+
if (funEv != undefined) {
|
|
296
|
+
funEv({ "状态": "成功" })
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
});
|
|
300
|
+
}
|
|
301
|
+
exports.renameSync = (data) => {
|
|
302
|
+
if (ifFile == false) {
|
|
303
|
+
return;
|
|
304
|
+
}
|
|
305
|
+
if (fs.existsSync(data["路径"]) == true) {
|
|
306
|
+
try {
|
|
307
|
+
fs.renameSync(data["路径"], data["路径2"])
|
|
308
|
+
return true;
|
|
309
|
+
} catch (err) {
|
|
310
|
+
return false
|
|
311
|
+
}
|
|
312
|
+
} else {
|
|
313
|
+
return false;
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
exports.unlink = (path, funEv = undefined) => {
|
|
317
|
+
if (ifFile == false) {
|
|
318
|
+
return;
|
|
319
|
+
}
|
|
320
|
+
if (fs.existsSync(path)) {
|
|
321
|
+
if (path.indexOf(".") == -1) {
|
|
322
|
+
ExeFun_unlinkFile(path, (ret) => {
|
|
323
|
+
if (funEv != undefined) {
|
|
324
|
+
funEv(ret)
|
|
325
|
+
}
|
|
326
|
+
})
|
|
327
|
+
return;
|
|
328
|
+
}
|
|
329
|
+
fs.unlink(path, (err) => {
|
|
330
|
+
if (err) {
|
|
331
|
+
if (funEv != undefined) {
|
|
332
|
+
funEv({ "状态": "删除失败", "原因": err })
|
|
333
|
+
}
|
|
334
|
+
} else {
|
|
335
|
+
if (funEv != undefined) {
|
|
336
|
+
funEv({ "状态": "删除成功" })
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
});
|
|
340
|
+
} else {
|
|
341
|
+
funEv({ "状态": "删除失败", "原因": "路径不存在" })
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
exports.appendFile = (data) => {
|
|
346
|
+
if (ifFile == false) {
|
|
347
|
+
return;
|
|
348
|
+
}
|
|
349
|
+
fs.appendFile(data["路径"], data["数据"], (err) => {
|
|
350
|
+
if (err) throw err;
|
|
351
|
+
});
|
|
352
|
+
}
|
|
353
|
+
exports.basename = (path_) => {
|
|
354
|
+
if (ifFile == false) {
|
|
355
|
+
return;
|
|
356
|
+
}
|
|
357
|
+
return path.basename(path_);
|
|
358
|
+
}
|
|
359
|
+
exports.dirname = (path_) => {
|
|
360
|
+
return path.dirname(path_);
|
|
361
|
+
}
|
|
362
|
+
exports.extname = (path_) => {
|
|
363
|
+
if (ifFile == false) {
|
|
364
|
+
return;
|
|
365
|
+
}
|
|
366
|
+
return path.extname(path_);
|
|
367
|
+
}
|
|
368
|
+
exports.isAbsolute = (path_) => {
|
|
369
|
+
if (ifFile == false) {
|
|
370
|
+
return;
|
|
371
|
+
}
|
|
372
|
+
return path.isAbsolute(path_);
|
|
373
|
+
}
|
|
374
|
+
exports.normalize = (path_) => {
|
|
375
|
+
if (ifFile == false) {
|
|
376
|
+
return;
|
|
377
|
+
}
|
|
378
|
+
return path.normalize(path_);
|
|
379
|
+
}
|
|
380
|
+
exports.FileMsg = (path, EvFun) => {
|
|
381
|
+
if (ifFile == false) {
|
|
382
|
+
return;
|
|
383
|
+
}
|
|
384
|
+
fs.stat(path, function (error, stats) {
|
|
385
|
+
let FileMsg = {
|
|
386
|
+
"占用空间": 0,
|
|
387
|
+
"实际大小": 0,
|
|
388
|
+
"访问时间戳": 0,
|
|
389
|
+
"访问时间": "",
|
|
390
|
+
"修改时间戳": 0,
|
|
391
|
+
"修改时间": "",
|
|
392
|
+
"创建时间戳": 0,
|
|
393
|
+
"创建时间": "",
|
|
394
|
+
"是否成功": false
|
|
395
|
+
};
|
|
396
|
+
if (error) {
|
|
397
|
+
if (EvFun != undefined) {
|
|
398
|
+
EvFun(FileMsg)
|
|
399
|
+
}
|
|
400
|
+
} else {
|
|
401
|
+
FileMsg["占用空间"] = stats.blksize;
|
|
402
|
+
FileMsg["实际大小"] = stats.size;
|
|
403
|
+
FileMsg["访问时间戳"] = stats.atimeMs;
|
|
404
|
+
FileMsg["访问时间"] = stats.atime;
|
|
405
|
+
FileMsg["修改时间戳"] = stats.ctimeMs;
|
|
406
|
+
FileMsg["修改时间"] = stats.ctime;
|
|
407
|
+
FileMsg["创建时间戳"] = stats.birthtimeMs;
|
|
408
|
+
FileMsg["创建时间"] = stats.birthtime;
|
|
409
|
+
FileMsg["是否成功"] = true;
|
|
410
|
+
if (EvFun != undefined) {
|
|
411
|
+
EvFun(JSON.stringify(FileMsg))
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
})
|
|
415
|
+
}
|
|
416
|
+
function deleteDirRecursively(dirPath) {
|
|
417
|
+
return new Promise((resolve, reject) => {
|
|
418
|
+
fs.readdir(dirPath, (err, files) => {
|
|
419
|
+
if (err) {
|
|
420
|
+
return reject(err);
|
|
421
|
+
}
|
|
422
|
+
let pending = files.length;
|
|
423
|
+
if (pending === 0) {
|
|
424
|
+
// 如果没有文件或子目录,则直接删除目录
|
|
425
|
+
return fs.rmdir(dirPath, err => {
|
|
426
|
+
if (err) {
|
|
427
|
+
return reject(err);
|
|
428
|
+
}
|
|
429
|
+
resolve();
|
|
430
|
+
});
|
|
431
|
+
}
|
|
432
|
+
files.forEach(file => {
|
|
433
|
+
const filePath = path.join(dirPath, file);
|
|
434
|
+
fs.stat(filePath, (err, stat) => {
|
|
435
|
+
if (err) {
|
|
436
|
+
return reject(err);
|
|
437
|
+
}
|
|
438
|
+
if (stat.isDirectory()) {
|
|
439
|
+
// 如果是目录,则递归删除
|
|
440
|
+
deleteDirRecursively(filePath).then(() => {
|
|
441
|
+
if (--pending === 0) {
|
|
442
|
+
// 所有子目录和文件都删除后,删除当前目录
|
|
443
|
+
fs.rmdir(dirPath, err => {
|
|
444
|
+
if (err) {
|
|
445
|
+
return reject(err);
|
|
446
|
+
}
|
|
447
|
+
resolve();
|
|
448
|
+
});
|
|
449
|
+
}
|
|
450
|
+
}).catch(reject);
|
|
451
|
+
} else {
|
|
452
|
+
// 如果是文件,则删除
|
|
453
|
+
fs.unlink(filePath, err => {
|
|
454
|
+
if (err) {
|
|
455
|
+
return reject(err);
|
|
456
|
+
}
|
|
457
|
+
if (--pending === 0) {
|
|
458
|
+
// 所有文件都删除后,删除目录
|
|
459
|
+
fs.rmdir(dirPath, err => {
|
|
460
|
+
if (err) {
|
|
461
|
+
return reject(err);
|
|
462
|
+
}
|
|
463
|
+
resolve();
|
|
464
|
+
});
|
|
465
|
+
}
|
|
466
|
+
});
|
|
467
|
+
}
|
|
468
|
+
});
|
|
469
|
+
});
|
|
470
|
+
});
|
|
471
|
+
});
|
|
472
|
+
}
|
|
473
|
+
function ExeFun_unlinkFile(P_Name, fun) {
|
|
474
|
+
if (P_Name == undefined || P_Name == null) {
|
|
475
|
+
fun({ "状态": "失败", "原因": "删除失败,路径不能为未定义内容或空对象" })
|
|
476
|
+
return;
|
|
477
|
+
}
|
|
478
|
+
if (P_Name.indexOf("\\") != -1) {
|
|
479
|
+
P_Name = P_Name.replaceAll("\\", "/")
|
|
480
|
+
}
|
|
481
|
+
if (P_Name.indexOf("//") != -1) {
|
|
482
|
+
P_Name = P_Name.replaceAll("//", "/")
|
|
483
|
+
}
|
|
484
|
+
var stat = fs.lstatSync(P_Name);
|
|
485
|
+
if (stat.isFile() == true) {
|
|
486
|
+
//文件
|
|
487
|
+
fs.unlink(P_Name, (err) => {
|
|
488
|
+
if (err) {
|
|
489
|
+
fun({ "状态": "失败", "原因": err })
|
|
490
|
+
return;
|
|
491
|
+
}
|
|
492
|
+
fun({ "状态": "成功" })
|
|
493
|
+
});
|
|
494
|
+
} else {
|
|
495
|
+
deleteDirRecursively(P_Name)
|
|
496
|
+
.then(() => fun({ "状态": "成功" }))
|
|
497
|
+
.catch(err => fun({ "状态": "失败", "原因": err }));
|
|
498
|
+
}
|
|
499
|
+
}
|
|
500
|
+
function runExec_(Path, cmdCode, SetProcessYesMsg, SetProcessNoMsg, SetProcessEndMsg, encoding_ = "GBK") {
|
|
501
|
+
let workerProcess;//子进程名称
|
|
502
|
+
workerProcess = exec(cmdCode, { cwd: Path, encoding: encoding_ })
|
|
503
|
+
// 打印正常的后台可执行程序输出
|
|
504
|
+
workerProcess.stdout.on('data', function (data) {
|
|
505
|
+
const decoder = new TextDecoder();
|
|
506
|
+
let JSONData = { "输出数据": decoder.decode(data) }
|
|
507
|
+
if (SetProcessYesMsg != undefined) {
|
|
508
|
+
SetProcessYesMsg(JSONData)
|
|
509
|
+
}
|
|
510
|
+
})
|
|
511
|
+
// 打印错误的后台可执行程序输出
|
|
512
|
+
workerProcess.stderr.on('data', function (data) {
|
|
513
|
+
const decoder = new TextDecoder();
|
|
514
|
+
let JSONData = { "输出数据": decoder.decode(data) }
|
|
515
|
+
if (SetProcessNoMsg != undefined) {
|
|
516
|
+
SetProcessNoMsg(JSONData)
|
|
517
|
+
}
|
|
518
|
+
})
|
|
519
|
+
// 退出之后的输出
|
|
520
|
+
workerProcess.on('close', function (code) {
|
|
521
|
+
if (SetProcessEndMsg != undefined) {
|
|
522
|
+
SetProcessEndMsg(code)
|
|
523
|
+
}
|
|
524
|
+
})
|
|
525
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
exports.getLocalIP = function () {
|
|
2
|
+
const os = require('os');
|
|
3
|
+
const osType = os.type(); //系统类型
|
|
4
|
+
const netInfo = os.networkInterfaces(); //网络信息
|
|
5
|
+
let ip = '';
|
|
6
|
+
if (osType === 'Windows_NT') {
|
|
7
|
+
for (let dev in netInfo) {
|
|
8
|
+
//win7的网络信息中显示为本地连接,win10显示为以太网
|
|
9
|
+
if (dev.indexOf("本地连接") != -1 || dev.indexOf("以太网") != -1 || dev.indexOf("WLAN") != -1) {
|
|
10
|
+
for (let j = 0; j < netInfo[dev].length; j++) {
|
|
11
|
+
if (netInfo[dev][j].family === 'IPv4') {
|
|
12
|
+
ip = netInfo[dev][j].address;
|
|
13
|
+
if (ip) {
|
|
14
|
+
if (ip.indexOf("192.") != -1) {
|
|
15
|
+
break;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
} else if (osType === 'Linux') {
|
|
23
|
+
if (netInfo.eth0) {
|
|
24
|
+
for (let 索引 = 0; 索引 < netInfo.en0.length; 索引++) {
|
|
25
|
+
ip = netInfo.en0[索引].address;
|
|
26
|
+
if (netInfo.en0[索引].address.indexOf("192.") != -1) {
|
|
27
|
+
break
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
} else {
|
|
31
|
+
for (let 索引 = 0; 索引 < netInfo.eth0.length; 索引++) {
|
|
32
|
+
ip = netInfo.eth0[索引].address;
|
|
33
|
+
if (netInfo.eth0[索引].address.indexOf("192.") != -1) {
|
|
34
|
+
break
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
} else if (osType === 'Darwin') {
|
|
39
|
+
for (let 索引 = 0; 索引 < netInfo.en0.length; 索引++) {
|
|
40
|
+
ip = netInfo.en0[索引].address;
|
|
41
|
+
if (netInfo.en0[索引].address.indexOf("192.") != -1) {
|
|
42
|
+
break
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
} else if (osType === 'ohos') {
|
|
46
|
+
for (let 索引 = 0; 索引 < netInfo.wlan0.length; 索引++) {
|
|
47
|
+
ip = netInfo.wlan0[索引].address;
|
|
48
|
+
if (netInfo.wlan0[索引].address.indexOf("192.") != -1) {
|
|
49
|
+
break
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return ip;
|
|
54
|
+
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
let Data = {};
|
|
2
|
+
setTimeout(DeleteData_, 30000);
|
|
3
|
+
function DeleteData_() {
|
|
4
|
+
let DateNow = Date.now();
|
|
5
|
+
for (key in Data) {
|
|
6
|
+
if (Data[key] != undefined) {
|
|
7
|
+
if (Data[key]["过期时间"] < DateNow) {
|
|
8
|
+
delete Data[key];
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
exports.InsertData = function (name, values, NoTime) {
|
|
14
|
+
let DateNow = Date.now();
|
|
15
|
+
NoTime=NoTime*1000;
|
|
16
|
+
if (Data[name] == undefined) {
|
|
17
|
+
Data[name] = {
|
|
18
|
+
"name": values,
|
|
19
|
+
"过期时间": DateNow+NoTime
|
|
20
|
+
};
|
|
21
|
+
} else {
|
|
22
|
+
if(Data[name]["过期时间"]!=undefined){
|
|
23
|
+
if (Data[name]["过期时间"] < DateNow) {
|
|
24
|
+
Data[name] = {
|
|
25
|
+
"name": values,
|
|
26
|
+
"过期时间": DateNow+NoTime
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
}else{
|
|
30
|
+
Data[name] = {
|
|
31
|
+
"name": values,
|
|
32
|
+
"过期时间": DateNow+NoTime
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
exports.UpdateData = function (name, values, NoTime) {
|
|
38
|
+
Data[name] = {
|
|
39
|
+
"name": values,
|
|
40
|
+
"过期时间": NoTime
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
exports.DeleteData = function (name) {
|
|
44
|
+
if (Data[name] != undefined) {
|
|
45
|
+
delete Data[name];
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
exports.SelectData = function (name) {
|
|
49
|
+
if (Data[name] == undefined) {
|
|
50
|
+
return undefined;
|
|
51
|
+
} else {
|
|
52
|
+
let DateNow = Date.now();
|
|
53
|
+
if(Data[name]["过期时间"]!=undefined){
|
|
54
|
+
if (Data[name]["过期时间"] < DateNow) {
|
|
55
|
+
return undefined;
|
|
56
|
+
}else{
|
|
57
|
+
return Data[name]["name"]
|
|
58
|
+
}
|
|
59
|
+
}else{
|
|
60
|
+
return undefined;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|