Home | History | Annotate | Download | only in codegen
      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 namespace grpc {
     23 
     24 namespace internal {
     25 /// An interface allowing implementors to process and filter event tags.
     26 class CompletionQueueTag {
     27  public:
     28   virtual ~CompletionQueueTag() {}
     29 
     30   /// FinalizeResult must be called before informing user code that the
     31   /// operation bound to the underlying core completion queue tag has
     32   /// completed. In practice, this means:
     33   ///
     34   ///   1. For the sync API - before returning from Pluck
     35   ///   2. For the CQ-based async API - before returning from Next
     36   ///   3. For the callback-based API - before invoking the user callback
     37   ///
     38   /// This is the method that translates from core-side tag/status to
     39   /// C++ API-observable tag/status.
     40   ///
     41   /// The return value is the status of the operation (returning status is the
     42   /// general behavior of this function). If this function returns false, the
     43   /// tag is dropped and not returned from the completion queue: this concept is
     44   /// for events that are observed at core but not requested by the user
     45   /// application (e.g., server shutdown, for server unimplemented method
     46   /// responses, or for cases where a server-side RPC doesn't have a completion
     47   /// notification registered using AsyncNotifyWhenDone)
     48   virtual bool FinalizeResult(void** tag, bool* status) = 0;
     49 };
     50 }  // namespace internal
     51 
     52 }  // namespace grpc
     53 
     54 #endif  // GRPCPP_IMPL_CODEGEN_COMPLETION_QUEUE_TAG_H
     55