Add more grpc - Asyncstuff
[src/agl-compositor.git] / clients / grpc-async-cb.h
1 #pragma once
2
3 #include <memory>
4
5 #include <grpc/grpc.h>
6 #include <grpcpp/grpcpp.h>
7 #include <grpcpp/server.h>
8 #include <grpcpp/server_builder.h>
9 #include <grpcpp/server_context.h>
10
11 #include <mutex>
12 #include <condition_variable>
13
14 #include <grpcpp/ext/proto_server_reflection_plugin.h>
15 #include <grpcpp/health_check_service_interface.h>
16
17 #include "shell.h"
18 #include "agl_shell.grpc.pb.h"
19
20 namespace {
21        const char kDefaultGrpcServiceAddress[] = "127.0.0.1:14005";
22 }
23
24 class Lister : public grpc::ServerWriteReactor<::agl_shell_ipc::AppState> {
25 public:
26         Lister(Shell *aglShell);
27         void OnDone() override;
28         void OnWriteDone(bool ok) override;
29         void NextWrite(void);
30 private:
31         Shell *m_shell;
32 };
33
34 class GrpcServiceImpl final : public agl_shell_ipc::AglShellManagerService::CallbackService {
35 public:
36         GrpcServiceImpl(Shell *aglShell) : m_aglShell(aglShell) {}
37
38         grpc::ServerUnaryReactor *ActivateApp(grpc::CallbackServerContext *context,
39                         const ::agl_shell_ipc::ActivateRequest* request,
40                         google::protobuf::Empty* /*response*/) override;
41
42         grpc::ServerUnaryReactor *DeactivateApp(grpc::CallbackServerContext *context,
43                         const ::agl_shell_ipc::DeactivateRequest* request,
44                         google::protobuf::Empty* /*response*/) override;
45
46         grpc::ServerUnaryReactor *SetAppSplit(grpc::CallbackServerContext *context,
47                         const ::agl_shell_ipc::SplitRequest* request,
48                         google::protobuf::Empty* /*response*/) override;
49
50         grpc::ServerUnaryReactor *SetAppFloat(grpc::CallbackServerContext *context,
51                         const ::agl_shell_ipc::FloatRequest* request,
52                         google::protobuf::Empty* /*response*/) override;
53
54         grpc::ServerWriteReactor< ::agl_shell_ipc::AppState>* AppStatusState(
55               ::grpc::CallbackServerContext* /*context*/,
56               const ::google::protobuf::Empty* /*request*/)  override;
57 private:
58        Shell *m_aglShell;
59
60        std::mutex m_done_mutex;
61        std::condition_variable m_done_cv;
62        bool m_done = false;
63
64 };