1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-27 20:18:01 +02:00
Beef/BeefLibs/corlib/src/IO/Pipe.bf

100 lines
2 KiB
Beef

namespace System.IO
{
enum PipeOptions
{
None = 0,
AllowTimeouts = 1
}
class NamedPipe : FileStreamBase
{
public override bool CanRead
{
get
{
return true;
}
}
public override bool CanWrite
{
get
{
return true;
}
}
public Result<void, FileOpenError> Create(StringView machineName, StringView pipeName, PipeOptions options)
{
Runtime.Assert(mBfpFile == null);
String path = scope String();
path.Append(pipeName);
Platform.BfpFileCreateKind createKind = .CreateAlways;
Platform.BfpFileCreateFlags createFlags = .Pipe;
if (options.HasFlag(.AllowTimeouts))
createFlags |= .AllowTimeouts;
createKind = .CreateIfNotExists;
createFlags |= .Read;
createFlags |= .Write;
Platform.BfpFileAttributes fileFlags = .Normal;
Platform.BfpFileResult fileResult = .Ok;
mBfpFile = Platform.BfpFile_Create(path, createKind, createFlags, fileFlags, &fileResult);
if ((mBfpFile == null) || (fileResult != .Ok))
{
switch (fileResult)
{
case .ShareError:
return .Err(.SharingViolation);
case .NotFound:
return .Err(.NotFound);
default:
return .Err(.Unknown);
}
}
return .Ok;
}
public Result<void, FileOpenError> Open(StringView machineName, StringView pipeName, PipeOptions options)
{
Runtime.Assert(mBfpFile == null);
String path = scope String();
path.Append(pipeName);
Platform.BfpFileCreateKind createKind = .CreateAlways;
Platform.BfpFileCreateFlags createFlags = .Pipe;
createKind = .OpenExisting;
createFlags |= .Read;
createFlags |= .Write;
Platform.BfpFileAttributes fileFlags = .Normal;
Platform.BfpFileResult fileResult = .Ok;
mBfpFile = Platform.BfpFile_Create(path, createKind, createFlags, fileFlags, &fileResult);
if ((mBfpFile == null) || (fileResult != .Ok))
{
switch (fileResult)
{
case .ShareError:
return .Err(.SharingViolation);
case .NotFound:
return .Err(.NotFound);
default:
return .Err(.Unknown);
}
}
return .Ok;
}
}
}