/* Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
   file Copyright.txt or https://cmake.org/licensing for details.  */
#pragma once

#include "cmConfigure.h" // IWYU pragma: keep

#include "cmUVHandlePtr.h"
#include <string>

#include "cmConnection.h"
#include "cm_uv.h"

class cmPipeConnection : public cmEventBasedConnection
{
public:
  cmPipeConnection(std::string name,
                   cmConnectionBufferStrategy* bufferStrategy = nullptr);

  bool OnServeStart(std::string* pString) override;

  bool OnConnectionShuttingDown() override;

  void Connect(uv_stream_t* server) override;

private:
  const std::string PipeName;
  cm::uv_pipe_ptr ServerPipe;
};
