// Copyright 2021 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 SRC_VIRTUALIZATION_TESTS_LIB_SOCKET_LOGGER_H_
#define SRC_VIRTUALIZATION_TESTS_LIB_SOCKET_LOGGER_H_

#include <lib/async-loop/cpp/loop.h>
#include <lib/zx/socket.h>

#include <optional>

#include <src/lib/fsl/socket/socket_drainer.h>

#include "logger.h"

class LogClient;

// Read data from the given socket, marshalling it to the logger.
class SocketLogger {
 public:
  ~SocketLogger();

  // Log all data received on the given socket to the given logger.
  //
  // Caller maintains ownership of `dispatcher` and `logger`.
  SocketLogger(Logger* logger, zx::socket socket);

 private:
  std::unique_ptr<LogClient> client_;
  std::optional<fsl::SocketDrainer> drainer_;
  async::Loop loop_ = async::Loop(&kAsyncLoopConfigNeverAttachToThread);
};

#endif  // SRC_VIRTUALIZATION_TESTS_LIB_SOCKET_LOGGER_H_
