ConnectionManager.ts•2.16 kB
import { RevitClientConnection } from './SocketClient.js';
/**
* 连接到Revit客户端并执行操作
* @param operation 连接成功后要执行的操作函数
* @returns 操作的结果
*/
export async function withRevitConnection<T>(operation: (client: RevitClientConnection) => Promise<T>): Promise<T> {
console.error('[DEBUG] Creating new RevitClientConnection to localhost:8080');
const revitClient = new RevitClientConnection('localhost', 8080);
try {
// 连接到Revit客户端
if (!revitClient.isConnected) {
console.error('[DEBUG] Connecting to Revit client...');
await new Promise<void>((resolve, reject) => {
const onConnect = () => {
console.error('[DEBUG] Connection successful to Revit client');
revitClient.socket.removeListener('connect', onConnect);
revitClient.socket.removeListener('error', onError);
resolve();
};
const onError = (error: any) => {
console.error('[DEBUG] Connection error to Revit client:', error);
revitClient.socket.removeListener('connect', onConnect);
revitClient.socket.removeListener('error', onError);
reject(new Error('connect to revit client failed'));
};
revitClient.socket.on('connect', onConnect);
revitClient.socket.on('error', onError);
revitClient.connect();
setTimeout(() => {
console.error('[DEBUG] Connection timeout to Revit client');
revitClient.socket.removeListener('connect', onConnect);
revitClient.socket.removeListener('error', onError);
reject(new Error('连接到Revit客户端失败'));
}, 5000);
});
}
// 执行操作
console.error('[DEBUG] Executing operation on Revit client');
const result = await operation(revitClient);
console.error('[DEBUG] Operation completed successfully');
return result;
} catch (error) {
console.error('[DEBUG] Error during Revit operation:', error);
throw error;
} finally {
// 断开连接
console.error('[DEBUG] Disconnecting from Revit client');
revitClient.disconnect();
}
}