import path from 'path'; import { fileURLToPath } from 'url'; import grpc from '@grpc/grpc-js' import protoLoader from '@grpc/proto-loader' export const __filename = fileURLToPath(import.meta.url) export const __dirname = path.dirname(__filename) // ========== 加载 Proto ========== const PROTO_ROOT = path.resolve(__dirname, './proto') // 指向 server/proto/ const AGV_PROTO_ENTRY = path.join(PROTO_ROOT, 'cmvr/api/agv_service.proto') const ARM_PROTO_ENTRY = path.join(PROTO_ROOT, 'cmvr/api/arm_service.proto') const CAMERA_PROTO_ENTRY = path.join(PROTO_ROOT, 'cmvr/api/camera_service.proto') const MICROPHONE_PROTO_ENTRY = path.join(PROTO_ROOT, 'cmvr/api/microphone_service.proto') const SPEAKER_PROTO_ENTRY = path.join(PROTO_ROOT, 'cmvr/api/speaker_service.proto') const audioLoaderOptions = { includeDirs: [PROTO_ROOT, path.join(PROTO_ROOT, 'cmvr/api')], keepCase: true, longs: String, enums: String, defaults: true, oneofs: true } const agvPackageDefinition = protoLoader.loadSync( AGV_PROTO_ENTRY, { includeDirs: [PROTO_ROOT , path.join(PROTO_ROOT, 'cmvr/api')], // 关键:让加载器从 PROTO_ROOT 查找 import keepCase: true, longs: String, enums: String, defaults: true, oneofs: true } ) const armPackageDefinition = protoLoader.loadSync( ARM_PROTO_ENTRY, { includeDirs: [PROTO_ROOT , path.join(PROTO_ROOT, 'cmvr/api')], // 关键:让加载器从 PROTO_ROOT 查找 import keepCase: true, longs: String, enums: String, defaults: true, oneofs: true } ) const cameraPackageDefinition = protoLoader.loadSync(CAMERA_PROTO_ENTRY, audioLoaderOptions) const microphonePackageDefinition = protoLoader.loadSync(MICROPHONE_PROTO_ENTRY, audioLoaderOptions) const speakerPackageDefinition = protoLoader.loadSync(SPEAKER_PROTO_ENTRY, audioLoaderOptions) const agvProto = grpc.loadPackageDefinition(agvPackageDefinition).cmvr.api const armProto = grpc.loadPackageDefinition(armPackageDefinition).cmvr.api const cameraProto = grpc.loadPackageDefinition(cameraPackageDefinition).cmvr.api const microphoneProto = grpc.loadPackageDefinition(microphonePackageDefinition).cmvr.api const speakerProto = grpc.loadPackageDefinition(speakerPackageDefinition).cmvr.api export const createAGVGrpcClient = (address) => { const grpcClient = new agvProto.AgvService( address, grpc.credentials.createInsecure() ) return grpcClient } export const createARMGrpcClient = (address) => { const grpcClient = new armProto.ArmService( address, grpc.credentials.createInsecure() ) return grpcClient } export const createCameraGrpcClient = (address) => new cameraProto.CameraService( address, grpc.credentials.createInsecure() ) export const createMicrophoneGrpcClient = (address) => new microphoneProto.MicPhoneService( address, grpc.credentials.createInsecure() ) export const createSpeakerGrpcClient = (address) => new speakerProto.SpeakerService( address, grpc.credentials.createInsecure() )