// 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
