1// Copyright 2017 The Fuchsia Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include <lib/async/cpp/receiver.h> 6 7namespace async { 8 9ReceiverBase::ReceiverBase(async_receiver_handler_t* handler) 10 : receiver_{{ASYNC_STATE_INIT}, handler} {} 11 12ReceiverBase::~ReceiverBase() = default; 13 14zx_status_t ReceiverBase::QueuePacket(async_dispatcher_t* dispatcher, const zx_packet_user_t* data) { 15 return async_queue_packet(dispatcher, &receiver_, data); 16} 17 18Receiver::Receiver(Handler handler) 19 : ReceiverBase(&Receiver::CallHandler), handler_(fbl::move(handler)) {} 20 21Receiver::~Receiver() = default; 22 23void Receiver::CallHandler(async_dispatcher_t* dispatcher, async_receiver_t* receiver, 24 zx_status_t status, const zx_packet_user_t* data) { 25 auto self = Dispatch<Receiver>(receiver); 26 self->handler_(dispatcher, self, status, data); 27} 28 29} // namespace async 30