#include "agl_shell.grpc.pb.h"
-typedef void (*Callback)(agl_shell_ipc::AppStateResponse app_response);
+typedef void (*Callback)(agl_shell_ipc::AppStateResponse app_response, void *data);
class Reader : public grpc::ClientReadReactor<::agl_shell_ipc::AppStateResponse> {
public:
{
}
- void AppStatusState(Callback callback)
+ void AppStatusState(Callback callback, void *_data)
{
::agl_shell_ipc::AppStateRequest request;
// set up the callback
m_callback = callback;
+ m_data = _data;
m_stub->async()->AppStatusState(&m_context, &request, this);
StartRead(&m_app_state);
void OnReadDone(bool ok) override
{
if (ok) {
- m_callback(m_app_state);
+ m_callback(m_app_state, m_data);
// blocks in StartRead() if the server doesn't send
// antyhing
private:
grpc::ClientContext m_context;
::agl_shell_ipc::AppStateResponse m_app_state;
+ void *m_data;
agl_shell_ipc::AglShellManagerService::Stub *m_stub;
Callback m_callback;
class GrpcClient {
public:
GrpcClient();
+ void WaitForConnected(int wait_time_ms, int tries_timeout);
bool ActivateApp(const std::string& app_id, const std::string& output_name);
bool DeactivateApp(const std::string& app_id);
bool SetAppFloat(const std::string& app_id, int32_t x_pos, int32_t y_pos);
bool SetAppScale(const std::string& app_id, int32_t width, int32_t height);
std::vector<std::string> GetOutputs();
void GetAppState();
- void AppStatusState(Callback callback);
+ void AppStatusState(Callback callback, void *data);
grpc::Status Wait();
private:
Reader *reader;
std::unique_ptr<agl_shell_ipc::AglShellManagerService::Stub> m_stub;
+ std::shared_ptr<grpc::Channel> m_channel;
};