// 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 GARNET_BIN_NETCONNECTOR_LISTENER_H_
#define GARNET_BIN_NETCONNECTOR_LISTENER_H_

#include <memory>
#include <thread>

#include <lib/async/dispatcher.h>
#include <lib/fit/function.h>

#include "garnet/lib/inet/ip_port.h"
#include "lib/fxl/files/unique_fd.h"
#include "lib/fxl/macros.h"

namespace netconnector {

// Listens on the specified port for incoming connections.
//
// Listener is not thread-safe. All methods calls must be serialized. Callbacks
// will be called on the same thread on which the listener was constructed.
class Listener {
 public:
  Listener();

  ~Listener();

  // Starts listening on |port|. |new_connection_callback| is called when a new
  // connection is requested.
  void Start(inet::IpPort port,
             fit::function<void(fxl::UniqueFD)> new_connection_callback);

  // Stops the listener.
  void Stop();

 private:
  static constexpr int kListenerQueueDepth = 3;

  void Worker();

  async_dispatcher_t* dispatcher_;
  fit::function<void(fxl::UniqueFD)> new_connection_callback_;
  fxl::UniqueFD socket_fd_;
  std::thread worker_thread_;

  FXL_DISALLOW_COPY_AND_ASSIGN(Listener);
};

}  // namespace netconnector

#endif  // GARNET_BIN_NETCONNECTOR_LISTENER_H_
