From 2f917c578d62a69a04c7cb074b7a02db51c48c81 Mon Sep 17 00:00:00 2001 From: Leonardo Di Donato Date: Tue, 3 Sep 2019 14:51:41 +0000 Subject: [PATCH] new(userspace/falco): introduce request context base and request stream context classes Co-authored-by: Lorenzo Fontana Signed-off-by: Leonardo Di Donato --- userspace/falco/grpc_server.h | 45 +++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/userspace/falco/grpc_server.h b/userspace/falco/grpc_server.h index 88816457..560b8d97 100644 --- a/userspace/falco/grpc_server.h +++ b/userspace/falco/grpc_server.h @@ -63,4 +63,49 @@ private: void start_grpc_server(std::string server_address, int threadiness); +class request_context_base +{ +public: + request_context_base() = default; + ~request_context_base() = default; + std::unique_ptr m_srv_ctx; + enum : char + { + UNKNOWN = 0, + REQUEST, + WRITE, + FINISH + } m_state = UNKNOWN; + virtual void start(falco_grpc_server* srv) = 0; + virtual void process(falco_grpc_server* srv) = 0; + virtual void end(falco_grpc_server* srv, bool isError) = 0; +}; + +// +// Template class to handle streaming responses +// +template +class request_stream_context : public request_context_base +{ +public: + request_stream_context(): + m_process_func(nullptr), + m_request_func(nullptr){}; + ~request_stream_context() = default; + + // Pointer to function that does actual processing + void (falco_grpc_server::*m_process_func)(const stream_context&, const Request&, Response&); + + // Pointer to function that requests the system to start processing given requests + void (falco_output_service::AsyncService::*m_request_func)(grpc::ServerContext*, Request*, grpc::ServerAsyncWriter*, grpc::CompletionQueue*, grpc::ServerCompletionQueue*, void*); + + void start(falco_grpc_server* srv); + void process(falco_grpc_server* srv); + void end(falco_grpc_server* srv, bool isError); + +private: + std::unique_ptr> m_res_writer; + std::unique_ptr m_stream_ctx; + Request m_req; +}; \ No newline at end of file