X-Git-Url: https://gerrit.akraino.org/r/gitweb?a=blobdiff_plain;f=src%2Ftype3_AndroidCloud%2Fanbox-master%2Fsrc%2Fanbox%2Frpc%2Fchannel.h;fp=src%2Ftype3_AndroidCloud%2Fanbox-master%2Fsrc%2Fanbox%2Frpc%2Fchannel.h;h=fb98a7bce5caa984726069873423afab0373b9b3;hb=e26c1ec581be598521517829adba8c8dd23a768f;hp=0000000000000000000000000000000000000000;hpb=6699c1aea74eeb0eb400e6299079f0c7576f716f;p=iec.git diff --git a/src/type3_AndroidCloud/anbox-master/src/anbox/rpc/channel.h b/src/type3_AndroidCloud/anbox-master/src/anbox/rpc/channel.h new file mode 100644 index 0000000..fb98a7b --- /dev/null +++ b/src/type3_AndroidCloud/anbox-master/src/anbox/rpc/channel.h @@ -0,0 +1,72 @@ +/* + * Copyright (C) 2016 Simon Fels + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU 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 warranties of + * MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + * + */ + +#ifndef ANBOX_RPC_CHANNEL_H_ +#define ANBOX_RPC_CHANNEL_H_ + +#include +#include +#include + +namespace google { +namespace protobuf { +class Closure; +class MessageLite; +} // namespace protobuf +} // namespace google + +namespace anbox { +namespace protobuf { +namespace rpc { +class Invocation; +} // namespace rpc +} // namespace protobuf +namespace network { +class MessageSender; +} // namespace network +namespace rpc { +class PendingCallCache; +class Channel { + public: + Channel(const std::shared_ptr &pending_calls, + const std::shared_ptr &sender); + ~Channel(); + + void call_method(std::string const &method_name, + google::protobuf::MessageLite const *parameters, + google::protobuf::MessageLite *response, + google::protobuf::Closure *complete); + + void send_event(google::protobuf::MessageLite const &event); + + private: + protobuf::rpc::Invocation invocation_for( + std::string const &method_name, + google::protobuf::MessageLite const *request); + void send_message(const std::uint8_t &type, + google::protobuf::MessageLite const &message); + std::uint32_t next_id(); + void notify_disconnected(); + + std::shared_ptr pending_calls_; + std::shared_ptr sender_; + std::mutex write_mutex_; +}; +} // namespace rpc +} // namespace anbox + +#endif