修改保存逻辑:先检查C++服务连接性再决定上传流程
- 添加checkCppServiceConnection函数用于检查C++服务是否可连接 - 修改保存逻辑:如果C++服务可连接,先发送文件内容到C++服务,只有在收到200状态码后才继续保存到服务器 - 如果C++服务不可连接,则直接使用API函数保存到服务器 - 完善输出信息,帮助用户了解当前处理流程 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
54
dist/extension.js
vendored
54
dist/extension.js
vendored
@@ -134,30 +134,48 @@ function activate(context) {
|
|||||||
if (doc.uri.scheme === 'squirrel') {
|
if (doc.uri.scheme === 'squirrel') {
|
||||||
const filePath = doc.uri.path.substring(1); // 去掉开头的 '/'
|
const filePath = doc.uri.path.substring(1); // 去掉开头的 '/'
|
||||||
const fileContent = doc.getText();
|
const fileContent = doc.getText();
|
||||||
// 先发送文件内容到本地C++服务
|
// 检查C++服务是否可连接
|
||||||
try {
|
const isCppServiceConnected = await (0, localClient_1.checkCppServiceConnection)();
|
||||||
const sendSuccess = await (0, localClient_1.sendFileToCppService)(filePath, fileContent);
|
if (isCppServiceConnected) {
|
||||||
if (sendSuccess) {
|
output.appendLine('[Squirrel] C++服务可连接,尝试发送文件内容');
|
||||||
output.appendLine(`[Squirrel] 文件 ${filePath} 已发送到C++服务`);
|
try {
|
||||||
// C++服务返回200后,继续执行保存到服务器
|
const sendSuccess = await (0, localClient_1.sendFileToCppService)(filePath, fileContent);
|
||||||
const success = await model.saveFileContent(filePath, fileContent);
|
if (sendSuccess) {
|
||||||
if (success) {
|
output.appendLine(`[Squirrel] 文件 ${filePath} 已发送到C++服务`);
|
||||||
output.appendLine(`[Squirrel] 文件 ${filePath} 保存成功`);
|
// C++服务返回200后,继续执行保存到服务器
|
||||||
provider.refresh();
|
const success = await model.saveFileContent(filePath, fileContent);
|
||||||
// 更新函数缓存
|
if (success) {
|
||||||
await functionExtractor.updateFileCache(model, filePath);
|
output.appendLine(`[Squirrel] 文件 ${filePath} 保存成功`);
|
||||||
|
provider.refresh();
|
||||||
|
// 更新函数缓存
|
||||||
|
await functionExtractor.updateFileCache(model, filePath);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
output.appendLine(`[Squirrel] 文件 ${filePath} 保存到服务器失败`);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
output.appendLine(`[Squirrel] 文件 ${filePath} 保存到服务器失败`);
|
output.appendLine(`[Squirrel] 文件 ${filePath} 发送到C++服务失败,跳过保存到服务器`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
catch (error) {
|
||||||
output.appendLine(`[Squirrel] 文件 ${filePath} 发送到C++服务失败,跳过保存到服务器`);
|
output.appendLine(`[Squirrel] 发送文件到C++服务时发生错误: ${error}`);
|
||||||
|
output.appendLine(`[Squirrel] 跳过保存文件 ${filePath} 到服务器`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (error) {
|
else {
|
||||||
output.appendLine(`[Squirrel] 发送文件到C++服务时发生错误: ${error}`);
|
output.appendLine('[Squirrel] C++服务不可连接,直接保存到服务器');
|
||||||
output.appendLine(`[Squirrel] 跳过保存文件 ${filePath} 到服务器`);
|
// C++服务不可连接,直接保存到服务器
|
||||||
|
const success = await model.saveFileContent(filePath, fileContent);
|
||||||
|
if (success) {
|
||||||
|
output.appendLine(`[Squirrel] 文件 ${filePath} 保存成功`);
|
||||||
|
provider.refresh();
|
||||||
|
// 更新函数缓存
|
||||||
|
await functionExtractor.updateFileCache(model, filePath);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
output.appendLine(`[Squirrel] 文件 ${filePath} 保存到服务器失败`);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
2
dist/extension.js.map
vendored
2
dist/extension.js.map
vendored
File diff suppressed because one or more lines are too long
42
dist/localClient.js
vendored
42
dist/localClient.js
vendored
@@ -33,9 +33,51 @@ var __importStar = (this && this.__importStar) || (function () {
|
|||||||
};
|
};
|
||||||
})();
|
})();
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.checkCppServiceConnection = checkCppServiceConnection;
|
||||||
exports.sendFileToCppService = sendFileToCppService;
|
exports.sendFileToCppService = sendFileToCppService;
|
||||||
const http = __importStar(require("http"));
|
const http = __importStar(require("http"));
|
||||||
|
const net = __importStar(require("net"));
|
||||||
const vscode = __importStar(require("vscode"));
|
const vscode = __importStar(require("vscode"));
|
||||||
|
/**
|
||||||
|
* 检查本地C++服务是否可连接
|
||||||
|
* @returns Promise<boolean> 是否可连接
|
||||||
|
*/
|
||||||
|
async function checkCppServiceConnection() {
|
||||||
|
// 从配置中获取端口号,默认为26000
|
||||||
|
const config = vscode.workspace.getConfiguration('squirrel');
|
||||||
|
const localServicePort = config.get('localServicePort', 26000);
|
||||||
|
return new Promise((resolve) => {
|
||||||
|
const socket = new net.Socket();
|
||||||
|
let isResolved = false;
|
||||||
|
socket.setTimeout(3000); // 3秒超时
|
||||||
|
socket.connect(localServicePort, '127.0.0.1', () => {
|
||||||
|
// 连接成功,端口可达
|
||||||
|
socket.destroy();
|
||||||
|
resolve(true);
|
||||||
|
});
|
||||||
|
socket.on('error', (error) => {
|
||||||
|
// 连接失败
|
||||||
|
if (!isResolved) {
|
||||||
|
isResolved = true;
|
||||||
|
resolve(false);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
socket.on('timeout', () => {
|
||||||
|
// 连接超时
|
||||||
|
socket.destroy();
|
||||||
|
if (!isResolved) {
|
||||||
|
isResolved = true;
|
||||||
|
resolve(false);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
socket.on('close', () => {
|
||||||
|
if (!isResolved) {
|
||||||
|
isResolved = true;
|
||||||
|
resolve(false);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* 构建JSON数据
|
* 构建JSON数据
|
||||||
* @param filePath 文件路径
|
* @param filePath 文件路径
|
||||||
|
|||||||
2
dist/localClient.js.map
vendored
2
dist/localClient.js.map
vendored
@@ -1 +1 @@
|
|||||||
{"version":3,"file":"localClient.js","sourceRoot":"","sources":["../src/localClient.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsBA,oDA8CC;AApED,2CAA6B;AAC7B,+CAAiC;AAEjC;;;;;GAKG;AACH,SAAS,aAAa,CAAC,QAAgB,EAAE,OAAe;IACpD,MAAM,IAAI,GAA8B,EAAE,CAAC;IAC3C,IAAI,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC;IAEzB,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AAChC,CAAC;AAED;;;;;GAKG;AACI,KAAK,UAAU,oBAAoB,CAAC,QAAgB,EAAE,OAAe;IACxE,qBAAqB;IACrB,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;IAC7D,MAAM,gBAAgB,GAAG,MAAM,CAAC,GAAG,CAAS,kBAAkB,EAAE,KAAK,CAAC,CAAC;IAEvE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC3B,MAAM,QAAQ,GAAG,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAClD,MAAM,QAAQ,GAAG,QAAQ,CAAC;QAE1B,MAAM,OAAO,GAAwB;YACjC,QAAQ,EAAE,WAAW;YACrB,IAAI,EAAE,gBAAgB;YACtB,IAAI,EAAE,YAAY;YAClB,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACL,cAAc,EAAE,kBAAkB;gBAClC,gBAAgB,EAAE,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC;aAChD;SACJ,CAAC;QAEF,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACtC,IAAI,IAAI,GAAG,EAAE,CAAC;YAEd,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;gBACrB,IAAI,IAAI,KAAK,CAAC;YAClB,CAAC,CAAC,CAAC;YAEH,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;gBACf,OAAO,CAAC,GAAG,CAAC,2BAA2B,QAAQ,UAAU,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;gBAC3E,IAAI,GAAG,CAAC,UAAU,KAAK,GAAG,EAAE,CAAC;oBACzB,OAAO,CAAC,IAAI,CAAC,CAAC;gBAClB,CAAC;qBAAM,CAAC;oBACJ,OAAO,CAAC,KAAK,CAAC,wBAAwB,GAAG,CAAC,UAAU,SAAS,IAAI,EAAE,CAAC,CAAC;oBACrE,OAAO,CAAC,KAAK,CAAC,CAAC;gBACnB,CAAC;YACL,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QAEH,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YACtB,OAAO,CAAC,KAAK,CAAC,4BAA4B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YAC3D,OAAO,CAAC,KAAK,CAAC,CAAC;QACnB,CAAC,CAAC,CAAC;QAEH,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACpB,GAAG,CAAC,GAAG,EAAE,CAAC;IACd,CAAC,CAAC,CAAC;AACP,CAAC"}
|
{"version":3,"file":"localClient.js","sourceRoot":"","sources":["../src/localClient.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQA,8DAyCC;AAqBD,oDA8CC;AApHD,2CAA6B;AAC7B,yCAA2B;AAC3B,+CAAiC;AAEjC;;;GAGG;AACI,KAAK,UAAU,yBAAyB;IAC3C,qBAAqB;IACrB,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;IAC7D,MAAM,gBAAgB,GAAG,MAAM,CAAC,GAAG,CAAS,kBAAkB,EAAE,KAAK,CAAC,CAAC;IAEvE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC3B,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;QAChC,IAAI,UAAU,GAAG,KAAK,CAAC;QAEvB,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO;QAEhC,MAAM,CAAC,OAAO,CAAC,gBAAgB,EAAE,WAAW,EAAE,GAAG,EAAE;YAC/C,YAAY;YACZ,MAAM,CAAC,OAAO,EAAE,CAAC;YACjB,OAAO,CAAC,IAAI,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YACzB,OAAO;YACP,IAAI,CAAC,UAAU,EAAE,CAAC;gBACd,UAAU,GAAG,IAAI,CAAC;gBAClB,OAAO,CAAC,KAAK,CAAC,CAAC;YACnB,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;YACtB,OAAO;YACP,MAAM,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC,UAAU,EAAE,CAAC;gBACd,UAAU,GAAG,IAAI,CAAC;gBAClB,OAAO,CAAC,KAAK,CAAC,CAAC;YACnB,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YACpB,IAAI,CAAC,UAAU,EAAE,CAAC;gBACd,UAAU,GAAG,IAAI,CAAC;gBAClB,OAAO,CAAC,KAAK,CAAC,CAAC;YACnB,CAAC;QACL,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC;AAED;;;;;GAKG;AACH,SAAS,aAAa,CAAC,QAAgB,EAAE,OAAe;IACpD,MAAM,IAAI,GAA8B,EAAE,CAAC;IAC3C,IAAI,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC;IAEzB,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AAChC,CAAC;AAED;;;;;GAKG;AACI,KAAK,UAAU,oBAAoB,CAAC,QAAgB,EAAE,OAAe;IACxE,qBAAqB;IACrB,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;IAC7D,MAAM,gBAAgB,GAAG,MAAM,CAAC,GAAG,CAAS,kBAAkB,EAAE,KAAK,CAAC,CAAC;IAEvE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC3B,MAAM,QAAQ,GAAG,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAClD,MAAM,QAAQ,GAAG,QAAQ,CAAC;QAE1B,MAAM,OAAO,GAAwB;YACjC,QAAQ,EAAE,WAAW;YACrB,IAAI,EAAE,gBAAgB;YACtB,IAAI,EAAE,YAAY;YAClB,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACL,cAAc,EAAE,kBAAkB;gBAClC,gBAAgB,EAAE,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC;aAChD;SACJ,CAAC;QAEF,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACtC,IAAI,IAAI,GAAG,EAAE,CAAC;YAEd,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;gBACrB,IAAI,IAAI,KAAK,CAAC;YAClB,CAAC,CAAC,CAAC;YAEH,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;gBACf,OAAO,CAAC,GAAG,CAAC,2BAA2B,QAAQ,UAAU,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;gBAC3E,IAAI,GAAG,CAAC,UAAU,KAAK,GAAG,EAAE,CAAC;oBACzB,OAAO,CAAC,IAAI,CAAC,CAAC;gBAClB,CAAC;qBAAM,CAAC;oBACJ,OAAO,CAAC,KAAK,CAAC,wBAAwB,GAAG,CAAC,UAAU,SAAS,IAAI,EAAE,CAAC,CAAC;oBACrE,OAAO,CAAC,KAAK,CAAC,CAAC;gBACnB,CAAC;YACL,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QAEH,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YACtB,OAAO,CAAC,KAAK,CAAC,4BAA4B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YAC3D,OAAO,CAAC,KAAK,CAAC,CAAC;QACnB,CAAC,CAAC,CAAC;QAEH,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACpB,GAAG,CAAC,GAAG,EAAE,CAAC;IACd,CAAC,CAAC,CAAC;AACP,CAAC"}
|
||||||
@@ -12,7 +12,7 @@ import { OnTypeFormattingProvider } from './providers/onTypeFormattingProvider';
|
|||||||
import { DocumentFormattingProvider } from './providers/documentFormattingProvider';
|
import { DocumentFormattingProvider } from './providers/documentFormattingProvider';
|
||||||
import { CodeErrorProvider } from './providers/codeErrorProvider';
|
import { CodeErrorProvider } from './providers/codeErrorProvider';
|
||||||
import { ApiParser } from './providers/apiParser';
|
import { ApiParser } from './providers/apiParser';
|
||||||
import { sendFileToCppService } from './localClient';
|
import { sendFileToCppService, checkCppServiceConnection } from './localClient';
|
||||||
|
|
||||||
export function activate(context: vscode.ExtensionContext) {
|
export function activate(context: vscode.ExtensionContext) {
|
||||||
console.log('Squirrel NUT Explorer 正在激活...');
|
console.log('Squirrel NUT Explorer 正在激活...');
|
||||||
@@ -143,30 +143,51 @@ export function activate(context: vscode.ExtensionContext) {
|
|||||||
const filePath = doc.uri.path.substring(1); // 去掉开头的 '/'
|
const filePath = doc.uri.path.substring(1); // 去掉开头的 '/'
|
||||||
const fileContent = doc.getText();
|
const fileContent = doc.getText();
|
||||||
|
|
||||||
// 先发送文件内容到本地C++服务
|
// 检查C++服务是否可连接
|
||||||
try {
|
const isCppServiceConnected = await checkCppServiceConnection();
|
||||||
const sendSuccess = await sendFileToCppService(filePath, fileContent);
|
|
||||||
if (sendSuccess) {
|
|
||||||
output.appendLine(`[Squirrel] 文件 ${filePath} 已发送到C++服务`);
|
|
||||||
|
|
||||||
// C++服务返回200后,继续执行保存到服务器
|
if (isCppServiceConnected) {
|
||||||
const success = await model.saveFileContent(filePath, fileContent);
|
output.appendLine('[Squirrel] C++服务可连接,尝试发送文件内容');
|
||||||
|
|
||||||
if (success) {
|
try {
|
||||||
output.appendLine(`[Squirrel] 文件 ${filePath} 保存成功`);
|
const sendSuccess = await sendFileToCppService(filePath, fileContent);
|
||||||
provider.refresh();
|
if (sendSuccess) {
|
||||||
|
output.appendLine(`[Squirrel] 文件 ${filePath} 已发送到C++服务`);
|
||||||
|
|
||||||
// 更新函数缓存
|
// C++服务返回200后,继续执行保存到服务器
|
||||||
await functionExtractor.updateFileCache(model, filePath);
|
const success = await model.saveFileContent(filePath, fileContent);
|
||||||
|
|
||||||
|
if (success) {
|
||||||
|
output.appendLine(`[Squirrel] 文件 ${filePath} 保存成功`);
|
||||||
|
provider.refresh();
|
||||||
|
|
||||||
|
// 更新函数缓存
|
||||||
|
await functionExtractor.updateFileCache(model, filePath);
|
||||||
|
} else {
|
||||||
|
output.appendLine(`[Squirrel] 文件 ${filePath} 保存到服务器失败`);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
output.appendLine(`[Squirrel] 文件 ${filePath} 保存到服务器失败`);
|
output.appendLine(`[Squirrel] 文件 ${filePath} 发送到C++服务失败,跳过保存到服务器`);
|
||||||
}
|
}
|
||||||
} else {
|
} catch (error) {
|
||||||
output.appendLine(`[Squirrel] 文件 ${filePath} 发送到C++服务失败,跳过保存到服务器`);
|
output.appendLine(`[Squirrel] 发送文件到C++服务时发生错误: ${error}`);
|
||||||
|
output.appendLine(`[Squirrel] 跳过保存文件 ${filePath} 到服务器`);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
output.appendLine('[Squirrel] C++服务不可连接,直接保存到服务器');
|
||||||
|
|
||||||
|
// C++服务不可连接,直接保存到服务器
|
||||||
|
const success = await model.saveFileContent(filePath, fileContent);
|
||||||
|
|
||||||
|
if (success) {
|
||||||
|
output.appendLine(`[Squirrel] 文件 ${filePath} 保存成功`);
|
||||||
|
provider.refresh();
|
||||||
|
|
||||||
|
// 更新函数缓存
|
||||||
|
await functionExtractor.updateFileCache(model, filePath);
|
||||||
|
} else {
|
||||||
|
output.appendLine(`[Squirrel] 文件 ${filePath} 保存到服务器失败`);
|
||||||
}
|
}
|
||||||
} catch (error) {
|
|
||||||
output.appendLine(`[Squirrel] 发送文件到C++服务时发生错误: ${error}`);
|
|
||||||
output.appendLine(`[Squirrel] 跳过保存文件 ${filePath} 到服务器`);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,6 +1,54 @@
|
|||||||
import * as http from 'http';
|
import * as http from 'http';
|
||||||
|
import * as net from 'net';
|
||||||
import * as vscode from 'vscode';
|
import * as vscode from 'vscode';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 检查本地C++服务是否可连接
|
||||||
|
* @returns Promise<boolean> 是否可连接
|
||||||
|
*/
|
||||||
|
export async function checkCppServiceConnection(): Promise<boolean> {
|
||||||
|
// 从配置中获取端口号,默认为26000
|
||||||
|
const config = vscode.workspace.getConfiguration('squirrel');
|
||||||
|
const localServicePort = config.get<number>('localServicePort', 26000);
|
||||||
|
|
||||||
|
return new Promise((resolve) => {
|
||||||
|
const socket = new net.Socket();
|
||||||
|
let isResolved = false;
|
||||||
|
|
||||||
|
socket.setTimeout(3000); // 3秒超时
|
||||||
|
|
||||||
|
socket.connect(localServicePort, '127.0.0.1', () => {
|
||||||
|
// 连接成功,端口可达
|
||||||
|
socket.destroy();
|
||||||
|
resolve(true);
|
||||||
|
});
|
||||||
|
|
||||||
|
socket.on('error', (error) => {
|
||||||
|
// 连接失败
|
||||||
|
if (!isResolved) {
|
||||||
|
isResolved = true;
|
||||||
|
resolve(false);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
socket.on('timeout', () => {
|
||||||
|
// 连接超时
|
||||||
|
socket.destroy();
|
||||||
|
if (!isResolved) {
|
||||||
|
isResolved = true;
|
||||||
|
resolve(false);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
socket.on('close', () => {
|
||||||
|
if (!isResolved) {
|
||||||
|
isResolved = true;
|
||||||
|
resolve(false);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 构建JSON数据
|
* 构建JSON数据
|
||||||
* @param filePath 文件路径
|
* @param filePath 文件路径
|
||||||
|
|||||||
Reference in New Issue
Block a user