From e78b6e6dcba485d8a95c669cc761a28a47ae857a Mon Sep 17 00:00:00 2001 From: hailin Date: Sun, 28 Dec 2025 23:38:42 -0800 Subject: [PATCH] =?UTF-8?q?fix(service-party-app):=20=E5=BB=B6=E8=BF=9F?= =?UTF-8?q?=E5=8A=A0=E8=BD=BD=20proto=20=E5=AE=9A=E4=B9=89=E9=81=BF?= =?UTF-8?q?=E5=85=8D=E5=90=AF=E5=8A=A8=E6=97=B6=E5=B4=A9=E6=BA=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 将 proto 文件加载改为延迟加载模式,在 connect() 时才加载, 避免模块加载时 app.isPackaged 还未准备好导致的路径错误。 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- .../electron/modules/grpc-client.ts | 51 +++++++++++-------- 1 file changed, 30 insertions(+), 21 deletions(-) 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) {