| // Copyright 2016 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. |
| |
| #include "peridot/lib/socket/socket_drainer_client.h" |
| |
| #include <utility> |
| |
| #include <lib/fit/function.h> |
| |
| namespace socket { |
| |
| SocketDrainerClient::SocketDrainerClient() : drainer_(this) {} |
| |
| SocketDrainerClient::~SocketDrainerClient() {} |
| |
| void SocketDrainerClient::Start(zx::socket source, |
| fit::function<void(std::string)> callback) { |
| callback_ = std::move(callback); |
| drainer_.Start(std::move(source)); |
| } |
| |
| void SocketDrainerClient::OnDataAvailable(const void* data, size_t num_bytes) { |
| data_.append(static_cast<const char*>(data), num_bytes); |
| } |
| |
| void SocketDrainerClient::OnDataComplete() { |
| if (destruction_sentinel_.DestructedWhile([this] { callback_(data_); })) { |
| return; |
| } |
| if (on_empty_callback_) { |
| on_empty_callback_(); |
| } |
| } |
| |
| } // namespace socket |