AglShellGrpcClient: Add activation with gRPC proxy
[apps/homescreen.git] / homescreen / src / AglShellGrpcClient.cpp
1 //include stuff here
2 #include <cstdio>
3
4 #include <mutex>
5 #include <condition_variable>
6 #include <grpc/grpc.h>
7 #include <grpcpp/grpcpp.h>
8 #include <grpcpp/server.h>
9 #include <grpcpp/server_builder.h>
10 #include <grpcpp/server_context.h>
11
12 #include <grpcpp/ext/proto_server_reflection_plugin.h>
13 #include <grpcpp/health_check_service_interface.h>
14
15 #include "AglShellGrpcClient.h"
16 #include "agl_shell.grpc.pb.h"
17
18 namespace {
19         const char kDefaultGrpcServiceAddress[] = "127.0.0.1:14005";
20 }
21
22 GrpcClient::GrpcClient()
23 {
24         auto channel = grpc::CreateChannel(kDefaultGrpcServiceAddress,
25                         grpc::InsecureChannelCredentials());
26
27         // init the stub here
28         m_stub = agl_shell_ipc::AglShellManagerService::NewStub(channel);
29         reader = new Reader(m_stub.get());
30 }
31
32
33 bool
34 GrpcClient::ActivateApp(const std::string& app_id, const std::string& output_name)
35 {
36         agl_shell_ipc::ActivateRequest request;
37
38         request.set_app_id(app_id);
39         request.set_output_name(output_name);
40
41         grpc::ClientContext context;
42         ::agl_shell_ipc::ActivateResponse reply;
43
44         grpc::Status status = m_stub->ActivateApp(&context, request, &reply);
45         return status.ok();
46 }
47
48 bool
49 GrpcClient::DeactivateApp(const std::string& app_id)
50 {
51         agl_shell_ipc::DeactivateRequest request;
52
53         request.set_app_id(app_id);
54
55         grpc::ClientContext context;
56         ::agl_shell_ipc::DeactivateResponse reply;
57
58         grpc::Status status = m_stub->DeactivateApp(&context, request, &reply);
59         return status.ok();
60 }
61
62 bool
63 GrpcClient::SetAppFloat(const std::string& app_id, int32_t x_pos, int32_t y_pos)
64 {
65         agl_shell_ipc::FloatRequest request;
66
67         request.set_app_id(app_id);
68
69         request.set_x_pos(x_pos);
70         request.set_y_pos(y_pos);
71
72         grpc::ClientContext context;
73         ::agl_shell_ipc::FloatResponse reply;
74
75         grpc::Status status = m_stub->SetAppFloat(&context, request, &reply);
76         return status.ok();
77 }
78
79 bool
80 GrpcClient::SetAppNormal(const std::string& app_id)
81 {
82         agl_shell_ipc::NormalRequest request;
83
84         request.set_app_id(app_id);
85
86         grpc::ClientContext context;
87         ::agl_shell_ipc::NormalResponse reply;
88
89         grpc::Status status = m_stub->SetAppNormal(&context, request, &reply);
90         return status.ok();
91 }
92
93 bool
94 GrpcClient::SetAppFullscreen(const std::string& app_id)
95 {
96         agl_shell_ipc::FullscreenRequest request;
97
98         request.set_app_id(app_id);
99
100         grpc::ClientContext context;
101         ::agl_shell_ipc::FullscreenResponse reply;
102
103         grpc::Status status = m_stub->SetAppFullscreen(&context, request, &reply);
104         return status.ok();
105 }
106
107 bool
108 GrpcClient::SetAppOnOutput(const std::string& app_id, const std::string &output)
109 {
110         agl_shell_ipc::AppOnOutputRequest request;
111
112         request.set_app_id(app_id);
113         request.set_output(output);
114
115         grpc::ClientContext context;
116         ::agl_shell_ipc::AppOnOutputResponse reply;
117
118         grpc::Status status = m_stub->SetAppOnOutput(&context, request, &reply);
119         return status.ok();
120 }
121
122 bool
123 GrpcClient::SetAppPosition(const std::string& app_id, int32_t x, int32_t y)
124 {
125         agl_shell_ipc::AppPositionRequest request;
126
127         request.set_app_id(app_id);
128         request.set_x(x);
129         request.set_y(y);
130
131         grpc::ClientContext context;
132         ::agl_shell_ipc::AppPositionResponse reply;
133
134         grpc::Status status = m_stub->SetAppPosition(&context, request, &reply);
135         return status.ok();
136 }
137
138 bool
139 GrpcClient::SetAppScale(const std::string& app_id, int32_t width, int32_t height)
140 {
141         agl_shell_ipc::AppScaleRequest request;
142
143         request.set_app_id(app_id);
144         request.set_width(width);
145         request.set_height(height);
146
147         grpc::ClientContext context;
148         ::agl_shell_ipc::AppScaleResponse reply;
149
150         grpc::Status status = m_stub->SetAppScale(&context, request, &reply);
151         return status.ok();
152 }
153
154
155 grpc::Status
156 GrpcClient::Wait(void)
157 {
158         return reader->Await();
159 }
160
161 void
162 GrpcClient::AppStatusState(Callback callback)
163 {
164         reader->AppStatusState(callback);
165 }
166
167 std::vector<std::string>
168 GrpcClient::GetOutputs()
169 {
170         grpc::ClientContext context;
171         std::vector<std::string> v;
172
173         ::agl_shell_ipc::OutputRequest request;
174         ::agl_shell_ipc::ListOutputResponse response;
175
176         grpc::Status status = m_stub->GetOutputs(&context, request, &response);
177         if (!status.ok())
178                 return std::vector<std::string>();
179
180         for (int i = 0; i < response.outputs_size(); i++) {
181                 ::agl_shell_ipc::OutputResponse rresponse = response.outputs(i);
182                 v.push_back(rresponse.name());
183         }
184
185         return v;
186 }