5 #include <condition_variable>
8 #include <grpcpp/grpcpp.h>
9 #include <grpcpp/server.h>
10 #include <grpcpp/server_builder.h>
11 #include <grpcpp/server_context.h>
13 #include <grpcpp/ext/proto_server_reflection_plugin.h>
14 #include <grpcpp/health_check_service_interface.h>
16 #include "AglShellGrpcClient.h"
17 #include "agl_shell.grpc.pb.h"
18 #include "hmi-debug.h"
20 using namespace std::chrono;
23 const char kDefaultGrpcServiceAddress[] = "127.0.0.1:14005";
26 GrpcClient::GrpcClient()
28 m_channel = grpc::CreateChannel(kDefaultGrpcServiceAddress,
29 grpc::InsecureChannelCredentials());
32 m_stub = agl_shell_ipc::AglShellManagerService::NewStub(m_channel);
33 reader = new Reader(m_stub.get());
37 GrpcClient::WaitForConnected(int wait_time_ms, int tries_timeout)
40 grpc_connectivity_state state;
43 clock_gettime(CLOCK_MONOTONIC, &ts);
45 ts.tv_nsec = 500 * 1000 * 1000; // 500ms
47 while (((state = m_channel->GetState(true)) != GRPC_CHANNEL_READY) &&
48 try_++ < tries_timeout) {
49 HMI_DEBUG("HomesScreen", "waiting for channel state to be ready, current state %d", state);
57 GrpcClient::ActivateApp(const std::string& app_id, const std::string& output_name)
59 agl_shell_ipc::ActivateRequest request;
61 request.set_app_id(app_id);
62 request.set_output_name(output_name);
64 grpc::ClientContext context;
65 ::agl_shell_ipc::ActivateResponse reply;
67 grpc::Status status = m_stub->ActivateApp(&context, request, &reply);
72 GrpcClient::DeactivateApp(const std::string& app_id)
74 agl_shell_ipc::DeactivateRequest request;
76 request.set_app_id(app_id);
78 grpc::ClientContext context;
79 ::agl_shell_ipc::DeactivateResponse reply;
81 grpc::Status status = m_stub->DeactivateApp(&context, request, &reply);
86 GrpcClient::SetAppFloat(const std::string& app_id, int32_t x_pos, int32_t y_pos)
88 agl_shell_ipc::FloatRequest request;
90 request.set_app_id(app_id);
92 request.set_x_pos(x_pos);
93 request.set_y_pos(y_pos);
95 grpc::ClientContext context;
96 ::agl_shell_ipc::FloatResponse reply;
98 grpc::Status status = m_stub->SetAppFloat(&context, request, &reply);
103 GrpcClient::SetAppNormal(const std::string& app_id)
105 agl_shell_ipc::NormalRequest request;
107 request.set_app_id(app_id);
109 grpc::ClientContext context;
110 ::agl_shell_ipc::NormalResponse reply;
112 grpc::Status status = m_stub->SetAppNormal(&context, request, &reply);
117 GrpcClient::SetAppFullscreen(const std::string& app_id)
119 agl_shell_ipc::FullscreenRequest request;
121 request.set_app_id(app_id);
123 grpc::ClientContext context;
124 ::agl_shell_ipc::FullscreenResponse reply;
126 grpc::Status status = m_stub->SetAppFullscreen(&context, request, &reply);
131 GrpcClient::SetAppOnOutput(const std::string& app_id, const std::string &output)
133 agl_shell_ipc::AppOnOutputRequest request;
135 request.set_app_id(app_id);
136 request.set_output(output);
138 grpc::ClientContext context;
139 ::agl_shell_ipc::AppOnOutputResponse reply;
141 grpc::Status status = m_stub->SetAppOnOutput(&context, request, &reply);
146 GrpcClient::SetAppPosition(const std::string& app_id, int32_t x, int32_t y)
148 agl_shell_ipc::AppPositionRequest request;
150 request.set_app_id(app_id);
154 grpc::ClientContext context;
155 ::agl_shell_ipc::AppPositionResponse reply;
157 grpc::Status status = m_stub->SetAppPosition(&context, request, &reply);
162 GrpcClient::SetAppScale(const std::string& app_id, int32_t width, int32_t height)
164 agl_shell_ipc::AppScaleRequest request;
166 request.set_app_id(app_id);
167 request.set_width(width);
168 request.set_height(height);
170 grpc::ClientContext context;
171 ::agl_shell_ipc::AppScaleResponse reply;
173 grpc::Status status = m_stub->SetAppScale(&context, request, &reply);
179 GrpcClient::Wait(void)
181 return reader->Await();
185 GrpcClient::AppStatusState(Callback callback, void *data)
187 reader->AppStatusState(callback, data);
190 std::vector<std::string>
191 GrpcClient::GetOutputs()
193 grpc::ClientContext context;
194 std::vector<std::string> v;
196 ::agl_shell_ipc::OutputRequest request;
197 ::agl_shell_ipc::ListOutputResponse response;
199 grpc::Status status = m_stub->GetOutputs(&context, request, &response);
201 return std::vector<std::string>();
203 for (int i = 0; i < response.outputs_size(); i++) {
204 ::agl_shell_ipc::OutputResponse rresponse = response.outputs(i);
205 v.push_back(rresponse.name());