X-Git-Url: https://gerrit.akraino.org/r/gitweb?a=blobdiff_plain;f=src%2Ftype3_AndroidCloud%2Fanbox-master%2Fsrc%2Fanbox%2Frpc%2Fpending_call_cache.h;fp=src%2Ftype3_AndroidCloud%2Fanbox-master%2Fsrc%2Fanbox%2Frpc%2Fpending_call_cache.h;h=f35ef9a52fe696d914ab4c57ef61a4aa384f75cc;hb=e26c1ec581be598521517829adba8c8dd23a768f;hp=0000000000000000000000000000000000000000;hpb=6699c1aea74eeb0eb400e6299079f0c7576f716f;p=iec.git diff --git a/src/type3_AndroidCloud/anbox-master/src/anbox/rpc/pending_call_cache.h b/src/type3_AndroidCloud/anbox-master/src/anbox/rpc/pending_call_cache.h new file mode 100644 index 0000000..f35ef9a --- /dev/null +++ b/src/type3_AndroidCloud/anbox-master/src/anbox/rpc/pending_call_cache.h @@ -0,0 +1,74 @@ +/* + * Copyright © 2012 Canonical Ltd. + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Authored by: Alan Griffiths + */ + +#ifndef ANBOX_RPC_PENDING_CALL_CACHE_ +#define ANBOX_RPC_PENDING_CALL_CACHE_ + +#include +#include +#include + +namespace google { +namespace protobuf { +class Closure; +class MessageLite; +} // namespace protobuf +} // namespace google + +namespace anbox { +namespace protobuf { +namespace rpc { +class Invocation; +class Result; +} // namespace rpc +} // namespace protobuf +namespace rpc { +class PendingCallCache { + public: + PendingCallCache(); + + void save_completion_details( + anbox::protobuf::rpc::Invocation const &invocation, + google::protobuf::MessageLite *response, + google::protobuf::Closure *complete); + void populate_message_for_result( + anbox::protobuf::rpc::Result &result, + std::function const &populator); + void complete_response(anbox::protobuf::rpc::Result &result); + void force_completion(); + bool empty() const; + + private: + struct PendingCall { + PendingCall(google::protobuf::MessageLite *response, + google::protobuf::Closure *target) + : response(response), complete(target) {} + + PendingCall() : response(0), complete() {} + + google::protobuf::MessageLite *response; + google::protobuf::Closure *complete; + }; + + std::mutex mutable mutex_; + std::map pending_calls_; +}; +} // namespace rpc +} // namespace anbox + +#endif