1 /* 2 * Licensed to the Apache Software Foundation (ASF) under one 3 * or more contributor license agreements. See the NOTICE file 4 * distributed with this work for additional information 5 * regarding copyright ownership. The ASF licenses this file 6 * to you under the Apache License, Version 2.0 (the 7 * "License"); you may not use this file except in compliance 8 * with the License. You may obtain a copy of the License at 9 * 10 * http://www.apache.org/licenses/LICENSE-2.0 11 * 12 * Unless required by applicable law or agreed to in writing, 13 * software distributed under the License is distributed on an 14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 15 * KIND, either express or implied. See the License for the 16 * specific language governing permissions and limitations 17 * under the License. 18 */ 19 20 #ifndef _THRIFT_ASYNC_TASYNCCHANNEL_H_ 21 #define _THRIFT_ASYNC_TASYNCCHANNEL_H_ 1 22 23 #include <functional> 24 #include <memory> 25 #include <thrift/Thrift.h> 26 27 namespace apache { 28 namespace thrift { 29 namespace transport { 30 class TMemoryBuffer; 31 } 32 } 33 } 34 35 namespace apache { 36 namespace thrift { 37 namespace async { 38 using apache::thrift::transport::TMemoryBuffer; 39 40 class TAsyncChannel { 41 public: 42 typedef std::function<void()> VoidCallback; 43 44 virtual ~TAsyncChannel() = default; 45 46 // is the channel in a good state? 47 virtual bool good() const = 0; 48 virtual bool error() const = 0; 49 virtual bool timedOut() const = 0; 50 51 /** 52 * Send a message over the channel. 53 */ 54 virtual void sendMessage(const VoidCallback& cob, 55 apache::thrift::transport::TMemoryBuffer* message) = 0; 56 57 /** 58 * Receive a message from the channel. 59 */ 60 virtual void recvMessage(const VoidCallback& cob, 61 apache::thrift::transport::TMemoryBuffer* message) = 0; 62 63 /** 64 * Send a message over the channel and receive a response. 65 */ 66 virtual void sendAndRecvMessage(const VoidCallback& cob, 67 apache::thrift::transport::TMemoryBuffer* sendBuf, 68 apache::thrift::transport::TMemoryBuffer* recvBuf); 69 }; 70 } 71 } 72 } // apache::thrift::async 73 74 #endif // #ifndef _THRIFT_ASYNC_TASYNCCHANNEL_H_ 75