diff --git a/backend/mpc-system/services/service-party-app/electron/modules/grpc-client.ts b/backend/mpc-system/services/service-party-app/electron/modules/grpc-client.ts index 9b6a7023..3c52c9ba 100644 --- a/backend/mpc-system/services/service-party-app/electron/modules/grpc-client.ts +++ b/backend/mpc-system/services/service-party-app/electron/modules/grpc-client.ts @@ -4,18 +4,6 @@ import * as path from 'path'; import { EventEmitter } from 'events'; import { app } from 'electron'; -// Proto 文件路径 - 在打包后需要从 app.asar.unpacked 或 resources 目录加载 -function getProtoPath(): string { - // 开发环境 - if (!app.isPackaged) { - return path.join(__dirname, '../../proto/message_router.proto'); - } - // 生产环境 - proto 文件需要解包 - return path.join(process.resourcesPath, 'proto/message_router.proto'); -} - -const PROTO_PATH = getProtoPath(); - // 定义 proto 包结构类型 interface ProtoPackage { mpc?: { @@ -27,14 +15,34 @@ interface ProtoPackage { }; } -// 加载 Proto 定义 -const packageDefinition = protoLoader.loadSync(PROTO_PATH, { - keepCase: true, - longs: String, - enums: String, - defaults: true, - oneofs: true, -}); +// 延迟加载的 Proto 定义 +let packageDefinition: protoLoader.PackageDefinition | null = null; + +// Proto 文件路径 - 在打包后需要从 app.asar.unpacked 或 resources 目录加载 +function getProtoPath(): string { + // 开发环境 + if (!app.isPackaged) { + return path.join(__dirname, '../../proto/message_router.proto'); + } + // 生产环境 - proto 文件需要解包 + return path.join(process.resourcesPath, 'proto/message_router.proto'); +} + +// 延迟加载 Proto 定义 +function loadProtoDefinition(): protoLoader.PackageDefinition { + if (!packageDefinition) { + const protoPath = getProtoPath(); + console.log('Loading proto from:', protoPath); + packageDefinition = protoLoader.loadSync(protoPath, { + keepCase: true, + longs: String, + enums: String, + defaults: true, + oneofs: true, + }); + } + return packageDefinition; +} interface SessionInfo { sessionId: string; @@ -116,7 +124,8 @@ export class GrpcClient extends EventEmitter { */ async connect(address: string, useTLS?: boolean): Promise { return new Promise((resolve, reject) => { - const proto = grpc.loadPackageDefinition(packageDefinition) as ProtoPackage; + const definition = loadProtoDefinition(); + const proto = grpc.loadPackageDefinition(definition) as ProtoPackage; const MessageRouter = proto.mpc?.router?.v1?.MessageRouter; if (!MessageRouter) {