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