Imported Upstream version 1.41.0
[platform/upstream/grpc.git] / include / grpcpp / impl / codegen / completion_queue_tag.h
1 /*
2  *
3  * Copyright 2015 gRPC authors.
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  *     http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  */
18
19 #ifndef GRPCPP_IMPL_CODEGEN_COMPLETION_QUEUE_TAG_H
20 #define GRPCPP_IMPL_CODEGEN_COMPLETION_QUEUE_TAG_H
21
22 // IWYU pragma: private
23
24 namespace grpc {
25
26 namespace internal {
27 /// An interface allowing implementors to process and filter event tags.
28 class CompletionQueueTag {
29  public:
30   virtual ~CompletionQueueTag() {}
31
32   /// FinalizeResult must be called before informing user code that the
33   /// operation bound to the underlying core completion queue tag has
34   /// completed. In practice, this means:
35   ///
36   ///   1. For the sync API - before returning from Pluck
37   ///   2. For the CQ-based async API - before returning from Next
38   ///   3. For the callback-based API - before invoking the user callback
39   ///
40   /// This is the method that translates from core-side tag/status to
41   /// C++ API-observable tag/status.
42   ///
43   /// The return value is the status of the operation (returning status is the
44   /// general behavior of this function). If this function returns false, the
45   /// tag is dropped and not returned from the completion queue: this concept is
46   /// for events that are observed at core but not requested by the user
47   /// application (e.g., server shutdown, for server unimplemented method
48   /// responses, or for cases where a server-side RPC doesn't have a completion
49   /// notification registered using AsyncNotifyWhenDone)
50   virtual bool FinalizeResult(void** tag, bool* status) = 0;
51 };
52 }  // namespace internal
53
54 }  // namespace grpc
55
56 #endif  // GRPCPP_IMPL_CODEGEN_COMPLETION_QUEUE_TAG_H