8 #ifndef WPIUTIL_WPI_UV_PIPE_H_
9 #define WPIUTIL_WPI_UV_PIPE_H_
17 #include "wpi/Twine.h"
18 #include "wpi/uv/NetworkStream.h"
32 struct private_init {};
35 explicit Pipe(
const private_init&) {}
36 ~
Pipe() noexcept
override =
default;
45 static std::shared_ptr<Pipe>
Create(
Loop& loop,
bool ipc =
false);
54 static std::shared_ptr<Pipe>
Create(
const std::shared_ptr<Loop>& loop,
69 void Reuse(std::function<
void()> callback,
bool ipc =
false);
86 std::shared_ptr<Pipe>
Accept();
104 bool Accept(
const std::shared_ptr<Pipe>& client) {
116 void Open(uv_file file) { Invoke(&uv_pipe_open,
GetRaw(), file); }
142 void Connect(
const Twine& name,
const std::shared_ptr<PipeConnectReq>& req);
156 void Connect(
const Twine& name, std::function<
void()> callback);
187 void Chmod(
int flags) { Invoke(&uv_pipe_chmod,
GetRaw(), flags); }
190 Pipe* DoAccept()
override;
193 std::function<void()> callback;
196 std::unique_ptr<ReuseData> m_reuseData;
204 Pipe& GetStream()
const {
205 return *static_cast<Pipe*>(&ConnectReq::GetStream());
212 #endif // WPIUTIL_WPI_UV_PIPE_H_
void Open(uv_file file)
Open an existing file descriptor or HANDLE as a pipe.
Definition: Pipe.h:116
void Chmod(int flags)
Alters pipe permissions, allowing it to be accessed from processes run by different users.
Definition: Pipe.h:187
Connection request.
Definition: NetworkStream.h:27
static std::shared_ptr< Pipe > Create(const std::shared_ptr< Loop > &loop, bool ipc=false)
Create a pipe handle.
Definition: Pipe.h:54
static std::shared_ptr< Pipe > Create(Loop &loop, bool ipc=false)
Create a pipe handle.
Pipe connection request.
Definition: Pipe.h:202
Definition: NetworkStream.h:130
WPILib C++ utilities (wpiutil) namespace.
Definition: EventLoopRunner.h:17
std::shared_ptr< NetworkStream > Accept()
Accept incoming connection.
Definition: NetworkStream.h:94
void Connect(const Twine &name, const std::shared_ptr< PipeConnectReq > &req)
Connect to the Unix domain socket or the named pipe.
std::string GetSock()
Get the name of the Unix domain socket or the named pipe.
std::string GetPeer()
Get the name of the Unix domain socket or the named pipe to which the handle is connected.
void Reuse(std::function< void()> callback, bool ipc=false)
Reuse this handle.
uv_pipe_t * GetRaw() const noexcept
Get the underlying handle data structure.
Definition: NetworkStream.h:145
Pipe handle.
Definition: Pipe.h:31
void SetPendingInstances(int count)
Set the number of pending pipe instance handles when the pipe server is waiting for connections.
Definition: Pipe.h:177
std::shared_ptr< Pipe > Accept()
Accept incoming connection.
void Bind(const Twine &name)
Bind the pipe to a file path (Unix) or a name (Windows).
Event loop.
Definition: Loop.h:39
auto count(R &&Range, const E &Element) -> typename std::iterator_traits< decltype(adl_begin(Range))>::difference_type
Wrapper function around std::count to count the number of times an element Element occurs in the give...
Definition: STLExtras.h:1092
bool Accept(const std::shared_ptr< Pipe > &client)
Accept incoming connection.
Definition: Pipe.h:104
Twine - A lightweight data structure for efficiently representing the concatenation of temporary valu...
Definition: Twine.h:85