804ab79a58c0d12060f3ba25518859657fd21d74
[src/window-management-client-grpc.git] / 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         request.set_x_pos(x_pos);
69         request.set_y_pos(y_pos);
70
71         grpc::ClientContext context;
72         ::agl_shell_ipc::FloatResponse reply;
73
74         grpc::Status status = m_stub->SetAppFloat(&context, request, &reply);
75         return status.ok();
76 }
77
78 bool
79 GrpcClient::SetAppFullscreen(const std::string& app_id)
80 {
81         agl_shell_ipc::FullscreenRequest request;
82
83         request.set_app_id(app_id);
84
85         grpc::ClientContext context;
86         ::agl_shell_ipc::FullscreenResponse reply;
87
88         grpc::Status status = m_stub->SetAppFullscreen(&context, request, &reply);
89         return status.ok();
90 }
91
92 bool
93 GrpcClient::SetAppOnOutput(const std::string& app_id, const std::string& output_name)
94 {
95         agl_shell_ipc::AppOnOutputRequest request;
96
97         request.set_app_id(app_id);
98         request.set_output(output_name);
99
100         grpc::ClientContext context;
101         ::agl_shell_ipc::AppOnOutputResponse reply;
102
103         grpc::Status status = m_stub->SetAppOnOutput(&context, request, &reply);
104         return status.ok();
105 }
106
107 bool
108 GrpcClient::SetAppPosition(const std::string& app_id, int32_t x, int32_t y)
109 {
110         agl_shell_ipc::AppPositionRequest request;
111
112         request.set_app_id(app_id);
113         request.set_x(x);
114         request.set_y(y);
115
116         grpc::ClientContext context;
117         ::agl_shell_ipc::AppPositionResponse reply;
118
119         grpc::Status status = m_stub->SetAppPosition(&context, request, &reply);
120         return status.ok();
121 }
122
123 bool
124 GrpcClient::SetAppScale(const std::string& app_id, int32_t width, int32_t height)
125 {
126         agl_shell_ipc::AppScaleRequest request;
127
128         request.set_app_id(app_id);
129         request.set_width(width);
130         request.set_height(height);
131
132         grpc::ClientContext context;
133         ::agl_shell_ipc::AppScaleResponse reply;
134
135         grpc::Status status = m_stub->SetAppScale(&context, request, &reply);
136         return status.ok();
137 }
138
139 grpc::Status
140 GrpcClient::Wait(void)
141 {
142         return reader->Await();
143 }
144
145 void
146 GrpcClient::AppStatusState(Callback callback)
147 {
148         reader->AppStatusState(callback);
149 }
150
151 std::vector<std::string>
152 GrpcClient::GetOutputs()
153 {
154         grpc::ClientContext context;
155         std::vector<std::string> v;
156
157         ::agl_shell_ipc::OutputRequest request;
158         ::agl_shell_ipc::ListOutputResponse response;
159
160         grpc::Status status = m_stub->GetOutputs(&context, request, &response);
161         if (!status.ok())
162                 return std::vector<std::string>();
163
164         for (int i = 0; i < response.outputs_size(); i++) {
165                 ::agl_shell_ipc::OutputResponse rresponse = response.outputs(i);
166                 v.push_back(rresponse.name());
167         }
168
169         return v;
170 }