Как создать BlockingStub на C++ в Protobuf? ⇐ C++
-
Гость
Как создать BlockingStub на C++ в Protobuf?
У меня есть следующий .proto для Protobuf (подробнее 2.6.1):
service InstallService { rpc getWifiNetworks (WifiRequest) возвращает (WifiResponse); } Я сгенерировал Java-файлы и у меня есть BlockingStub:
TestInstallService.BlockingInterface сервис = TestInstallService.newBlockingStub(канал); и я могу использовать if для блокировки (работает хорошо):
Wifi.WifiResponse ответ = service.getWifiNetworks(контроллер, запрос); Сейчас я создаю клиент C++, который также должен работать в режиме блокировки, но я не вижу никаких интерфейсов Blocking ни в прототипе, ни в сгенерированном коде C++. Как создать BlockingStub на C++ в Protobuf? Как я могу передать закрытие, если работаю асинхронно?
Сгенерированный служебный файл C++ (.cpp):
класс InstallService_Stub; класс InstallService: public ::google::protobuf::Service { защищено: // Этот класс следует рассматривать как абстрактный интерфейс. встроенный InstallService() {}; публика: виртуальный ~InstallService(); typedef InstallService_Stub Stub; static const ::google::protobuf::ServiceDescriptor* дескриптор(); контроллер Virtual void getWifiNetworks(::google::protobuf::RpcController*, const ::WifiRequest* запрос, ::WifiResponse* ответ, ::google::protobuf::Замыкание* выполнено); // реализует Сервис ---------------------------------------------- const ::google::protobuf::ServiceDescriptor* GetDescriptor(); void CallMethod(const ::google::protobuf::MethodDescriptor* метод, ::google::protobuf::RpcController* контроллер, const ::google::protobuf::Message* запрос, ::google::protobuf::Message* ответ, ::google::protobuf::Замыкание* выполнено); const ::google::protobuf::Message& GetRequestPrototype( const ::google::protobuf::MethodDescriptor* метод) const; const ::google::protobuf::Message& GetResponsePrototype( const ::google::protobuf::MethodDescriptor* метод) const; частный: GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(InstallService); }; класс InstallService_Stub: общественный InstallService { публика: InstallService_Stub(::google::protobuf::RpcChannel* канал); InstallService_Stub(::google::protobuf::RpcChannel* канал, ::google::protobuf::Service::владение ChannelOwnership); ~InstallService_Stub(); встроенный ::google::protobuf::RpcChannel* канал() { return Channel_; } // реализует InstallService ------------------------------------------ void getWifiNetworks(::google::protobuf::RpcController* контроллер, const ::WifiRequest* запрос, ::WifiResponse* ответ, ::google::protobuf::Замыкание* выполнено); частный: ::google::protobuf::RpcChannel*channel_; bool owns_channel_; GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(InstallService_Stub); };
У меня есть следующий .proto для Protobuf (подробнее 2.6.1):
service InstallService { rpc getWifiNetworks (WifiRequest) возвращает (WifiResponse); } Я сгенерировал Java-файлы и у меня есть BlockingStub:
TestInstallService.BlockingInterface сервис = TestInstallService.newBlockingStub(канал); и я могу использовать if для блокировки (работает хорошо):
Wifi.WifiResponse ответ = service.getWifiNetworks(контроллер, запрос); Сейчас я создаю клиент C++, который также должен работать в режиме блокировки, но я не вижу никаких интерфейсов Blocking ни в прототипе, ни в сгенерированном коде C++. Как создать BlockingStub на C++ в Protobuf? Как я могу передать закрытие, если работаю асинхронно?
Сгенерированный служебный файл C++ (.cpp):
класс InstallService_Stub; класс InstallService: public ::google::protobuf::Service { защищено: // Этот класс следует рассматривать как абстрактный интерфейс. встроенный InstallService() {}; публика: виртуальный ~InstallService(); typedef InstallService_Stub Stub; static const ::google::protobuf::ServiceDescriptor* дескриптор(); контроллер Virtual void getWifiNetworks(::google::protobuf::RpcController*, const ::WifiRequest* запрос, ::WifiResponse* ответ, ::google::protobuf::Замыкание* выполнено); // реализует Сервис ---------------------------------------------- const ::google::protobuf::ServiceDescriptor* GetDescriptor(); void CallMethod(const ::google::protobuf::MethodDescriptor* метод, ::google::protobuf::RpcController* контроллер, const ::google::protobuf::Message* запрос, ::google::protobuf::Message* ответ, ::google::protobuf::Замыкание* выполнено); const ::google::protobuf::Message& GetRequestPrototype( const ::google::protobuf::MethodDescriptor* метод) const; const ::google::protobuf::Message& GetResponsePrototype( const ::google::protobuf::MethodDescriptor* метод) const; частный: GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(InstallService); }; класс InstallService_Stub: общественный InstallService { публика: InstallService_Stub(::google::protobuf::RpcChannel* канал); InstallService_Stub(::google::protobuf::RpcChannel* канал, ::google::protobuf::Service::владение ChannelOwnership); ~InstallService_Stub(); встроенный ::google::protobuf::RpcChannel* канал() { return Channel_; } // реализует InstallService ------------------------------------------ void getWifiNetworks(::google::protobuf::RpcController* контроллер, const ::WifiRequest* запрос, ::WifiResponse* ответ, ::google::protobuf::Замыкание* выполнено); частный: ::google::protobuf::RpcChannel*channel_; bool owns_channel_; GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(InstallService_Stub); };
Мобильная версия