| // Copyright 2018 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef LIB_FIDL_CPP_INTERNAL_STUB_H_ |
| #define LIB_FIDL_CPP_INTERNAL_STUB_H_ |
| |
| #include <lib/fidl/cpp/internal/pending_response.h> |
| #include <lib/fidl/cpp/message.h> |
| #include <zircon/types.h> |
| |
| namespace fidl { |
| namespace internal { |
| class MessageSender; |
| |
| // An interface for dispatching FIDL messages to a protocol implementation. |
| // |
| // Used by |StubController| to supply both a |Message| and a |PendingResponse| |
| // object to protocol implementations. |
| class Stub { |
| public: |
| virtual ~Stub(); |
| |
| // A new message has arrived. |
| // |
| // If the message expects a response, the |PendingResponse| object's |
| // |needs_response()| method will return true. |
| // |
| // The memory backing the message will remain valid until this method returns, |
| // at which point the memory might or might not be deallocated. |
| // |
| // The |PendingResponse| object has affinity for the current thread and is not |
| // safe to transport to another thread. |
| virtual zx_status_t Dispatch_(Message message, PendingResponse response) = 0; |
| |
| // The protocol-agnostic object that can send messages. |
| // |
| // The sender must be set to a non-null value before sending events |
| // through this stub. |
| MessageSender* sender_() const { return message_sender_; } |
| void set_sender(MessageSender* sender) { message_sender_ = sender; } |
| |
| private: |
| MessageSender* message_sender_ = nullptr; |
| }; |
| |
| } // namespace internal |
| } // namespace fidl |
| |
| #endif // LIB_FIDL_CPP_INTERNAL_STUB_H_ |