6 #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 "agl_shell.grpc.pb.h"
18 typedef void (*Callback)(agl_shell_ipc::AppStateResponse app_response);
20 class Reader : public grpc::ClientReadReactor<::agl_shell_ipc::AppStateResponse> {
22 Reader(agl_shell_ipc::AglShellManagerService::Stub *stub)
27 void AppStatusState(Callback callback)
29 ::agl_shell_ipc::AppStateRequest request;
31 // set up the callback
32 m_callback = callback;
33 m_stub->async()->AppStatusState(&m_context, &request, this);
35 StartRead(&m_app_state);
39 void OnReadDone(bool ok) override
42 m_callback(m_app_state);
44 // blocks in StartRead() if the server doesn't send
46 StartRead(&m_app_state);
52 fprintf(stderr, "%s()\n", __func__);
53 std::unique_lock<std::mutex> l(m_mutex);
57 void OnDone(const grpc::Status& s) override
59 fprintf(stderr, "%s()\n", __func__);
60 std::unique_lock<std::mutex> l(m_mutex);
64 fprintf(stderr, "%s() done\n", __func__);
70 std::unique_lock<std::mutex> l(m_mutex);
72 m_cv.wait(l, [this] { return m_done; });
74 return std::move(m_status);
77 grpc::ClientContext m_context;
78 ::agl_shell_ipc::AppStateResponse m_app_state;
79 agl_shell_ipc::AglShellManagerService::Stub *m_stub;
85 std::condition_variable m_cv;
86 grpc::Status m_status;
93 bool ActivateApp(const std::string& app_id, const std::string& output_name);
94 bool DeactivateApp(const std::string& app_id);
95 bool SetAppFloat(const std::string& app_id, int32_t x_pos, int32_t y_pos);
96 bool SetAppFullscreen(const std::string& app_id);
97 bool SetAppOnOutput(const std::string& app_id, const std::string& output);
98 bool SetAppNormal(const std::string& app_id);
99 bool SetAppPosition(const std::string& app_id, int32_t x, int32_t y);
100 bool SetAppScale(const std::string& app_id, int32_t width, int32_t height);
101 std::vector<std::string> GetOutputs();
103 void AppStatusState(Callback callback);
108 std::unique_ptr<agl_shell_ipc::AglShellManagerService::Stub> m_stub;