blob: 8c1d4494d537c877aff63c2a2b05486160fcd993 [file] [log] [blame]
// 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.
#ifndef PERIDOT_LIB_SOCKET_SOCKET_DRAINER_CLIENT_H_
#define PERIDOT_LIB_SOCKET_SOCKET_DRAINER_CLIENT_H_
#include <functional>
#include <memory>
#include <string>
#include <lib/callback/destruction_sentinel.h>
#include <lib/fit/function.h>
#include <lib/fsl/socket/socket_drainer.h>
#include <src/lib/fxl/macros.h>
namespace socket {
class SocketDrainerClient : public fsl::SocketDrainer::Client {
public:
SocketDrainerClient();
~SocketDrainerClient() override;
void Start(zx::socket source, fit::function<void(std::string)> callback);
void set_on_empty(fit::closure on_empty_callback) {
on_empty_callback_ = std::move(on_empty_callback);
}
private:
void OnDataAvailable(const void* data, size_t num_bytes) override;
void OnDataComplete() override;
fit::function<void(std::string)> callback_;
std::string data_;
fsl::SocketDrainer drainer_;
fit::closure on_empty_callback_;
callback::DestructionSentinel destruction_sentinel_;
FXL_DISALLOW_COPY_AND_ASSIGN(SocketDrainerClient);
};
} // namespace socket
#endif // PERIDOT_LIB_SOCKET_SOCKET_DRAINER_CLIENT_H_