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()
29 auto channel = grpc::CreateChannel(kDefaultGrpcServiceAddress,
30 grpc::InsecureChannelCredentials());
32 clock_gettime(CLOCK_MONOTONIC, &ts);
34 ts.tv_nsec = 500 * 1000 * 1000; // 500ms
36 bool try_to_connect = true;
37 grpc_connectivity_state state = channel->GetState(try_to_connect);
39 while (state != GRPC_CHANNEL_READY) {
40 state = channel->GetState(try_to_connect);
42 HMI_DEBUG("HomesScreen", "waiting for channel state to be ready, current state %d", state);
48 m_stub = agl_shell_ipc::AglShellManagerService::NewStub(channel);
49 reader = new Reader(m_stub.get());
54 GrpcClient::ActivateApp(const std::string& app_id, const std::string& output_name)
56 agl_shell_ipc::ActivateRequest request;
58 request.set_app_id(app_id);
59 request.set_output_name(output_name);
61 grpc::ClientContext context;
62 ::agl_shell_ipc::ActivateResponse reply;
64 grpc::Status status = m_stub->ActivateApp(&context, request, &reply);
69 GrpcClient::DeactivateApp(const std::string& app_id)
71 agl_shell_ipc::DeactivateRequest request;
73 request.set_app_id(app_id);
75 grpc::ClientContext context;
76 ::agl_shell_ipc::DeactivateResponse reply;
78 grpc::Status status = m_stub->DeactivateApp(&context, request, &reply);
83 GrpcClient::SetAppFloat(const std::string& app_id, int32_t x_pos, int32_t y_pos)
85 agl_shell_ipc::FloatRequest request;
87 request.set_app_id(app_id);
89 request.set_x_pos(x_pos);
90 request.set_y_pos(y_pos);
92 grpc::ClientContext context;
93 ::agl_shell_ipc::FloatResponse reply;
95 grpc::Status status = m_stub->SetAppFloat(&context, request, &reply);
100 GrpcClient::SetAppNormal(const std::string& app_id)
102 agl_shell_ipc::NormalRequest request;
104 request.set_app_id(app_id);
106 grpc::ClientContext context;
107 ::agl_shell_ipc::NormalResponse reply;
109 grpc::Status status = m_stub->SetAppNormal(&context, request, &reply);
114 GrpcClient::SetAppFullscreen(const std::string& app_id)
116 agl_shell_ipc::FullscreenRequest request;
118 request.set_app_id(app_id);
120 grpc::ClientContext context;
121 ::agl_shell_ipc::FullscreenResponse reply;
123 grpc::Status status = m_stub->SetAppFullscreen(&context, request, &reply);
128 GrpcClient::SetAppOnOutput(const std::string& app_id, const std::string &output)
130 agl_shell_ipc::AppOnOutputRequest request;
132 request.set_app_id(app_id);
133 request.set_output(output);
135 grpc::ClientContext context;
136 ::agl_shell_ipc::AppOnOutputResponse reply;
138 grpc::Status status = m_stub->SetAppOnOutput(&context, request, &reply);
143 GrpcClient::SetAppPosition(const std::string& app_id, int32_t x, int32_t y)
145 agl_shell_ipc::AppPositionRequest request;
147 request.set_app_id(app_id);
151 grpc::ClientContext context;
152 ::agl_shell_ipc::AppPositionResponse reply;
154 grpc::Status status = m_stub->SetAppPosition(&context, request, &reply);
159 GrpcClient::SetAppScale(const std::string& app_id, int32_t width, int32_t height)
161 agl_shell_ipc::AppScaleRequest request;
163 request.set_app_id(app_id);
164 request.set_width(width);
165 request.set_height(height);
167 grpc::ClientContext context;
168 ::agl_shell_ipc::AppScaleResponse reply;
170 grpc::Status status = m_stub->SetAppScale(&context, request, &reply);
176 GrpcClient::Wait(void)
178 return reader->Await();
182 GrpcClient::AppStatusState(Callback callback, void *data)
184 reader->AppStatusState(callback, data);
187 std::vector<std::string>
188 GrpcClient::GetOutputs()
190 grpc::ClientContext context;
191 std::vector<std::string> v;
193 ::agl_shell_ipc::OutputRequest request;
194 ::agl_shell_ipc::ListOutputResponse response;
196 grpc::Status status = m_stub->GetOutputs(&context, request, &response);
198 return std::vector<std::string>();
200 for (int i = 0; i < response.outputs_size(); i++) {
201 ::agl_shell_ipc::OutputResponse rresponse = response.outputs(i);
202 v.push_back(rresponse.name());