mirror of
https://gitee.com/csharpui/CPF.git
synced 2025-07-15 14:04:34 +08:00
135 lines
4.1 KiB
C#
135 lines
4.1 KiB
C#
![]() |
using CPF.Mac.Foundation;
|
||
|
using CPF.Mac.ObjCRuntime;
|
||
|
using System;
|
||
|
using System.Runtime.InteropServices;
|
||
|
|
||
|
namespace CPF.Mac.CoreFoundation
|
||
|
{
|
||
|
public class CFWriteStream : CFStream
|
||
|
{
|
||
|
internal CFWriteStream(IntPtr handle)
|
||
|
: base(handle)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
[DllImport("/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation")]
|
||
|
private static extern IntPtr CFWriteStreamCopyError(IntPtr handle);
|
||
|
|
||
|
public override CFException GetError()
|
||
|
{
|
||
|
IntPtr intPtr = CFWriteStreamCopyError(base.Handle);
|
||
|
if (intPtr == IntPtr.Zero)
|
||
|
{
|
||
|
return null;
|
||
|
}
|
||
|
return CFException.FromCFError(intPtr);
|
||
|
}
|
||
|
|
||
|
[DllImport("/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation")]
|
||
|
private static extern bool CFWriteStreamOpen(IntPtr handle);
|
||
|
|
||
|
protected override bool DoOpen()
|
||
|
{
|
||
|
return CFWriteStreamOpen(base.Handle);
|
||
|
}
|
||
|
|
||
|
[DllImport("/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation")]
|
||
|
private static extern void CFWriteStreamClose(IntPtr handle);
|
||
|
|
||
|
protected override void DoClose()
|
||
|
{
|
||
|
CFWriteStreamClose(base.Handle);
|
||
|
}
|
||
|
|
||
|
[DllImport("/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation")]
|
||
|
private static extern CFStreamStatus CFWriteStreamGetStatus(IntPtr handle);
|
||
|
|
||
|
protected override CFStreamStatus DoGetStatus()
|
||
|
{
|
||
|
return CFWriteStreamGetStatus(base.Handle);
|
||
|
}
|
||
|
|
||
|
[DllImport("/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation")]
|
||
|
private static extern bool CFWriteStreamCanAcceptBytes(IntPtr handle);
|
||
|
|
||
|
public bool CanAcceptBytes()
|
||
|
{
|
||
|
return CFWriteStreamCanAcceptBytes(base.Handle);
|
||
|
}
|
||
|
|
||
|
[DllImport("/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation")]
|
||
|
private static extern CFIndex CFWriteStreamWrite(IntPtr handle, IntPtr buffer, CFIndex count);
|
||
|
|
||
|
public int Write(byte[] buffer)
|
||
|
{
|
||
|
return Write(buffer, 0, buffer.Length);
|
||
|
}
|
||
|
|
||
|
public int Write(byte[] buffer, int offset, int count)
|
||
|
{
|
||
|
CheckHandle();
|
||
|
if (offset < 0)
|
||
|
{
|
||
|
throw new ArgumentException();
|
||
|
}
|
||
|
if (count < 1)
|
||
|
{
|
||
|
throw new ArgumentException();
|
||
|
}
|
||
|
if (offset + count > buffer.Length)
|
||
|
{
|
||
|
throw new ArgumentException();
|
||
|
}
|
||
|
GCHandle gCHandle = GCHandle.Alloc(buffer, GCHandleType.Pinned);
|
||
|
try
|
||
|
{
|
||
|
return CFWriteStreamWrite(buffer: new IntPtr(gCHandle.AddrOfPinnedObject().ToInt64() + offset), handle: base.Handle, count: count);
|
||
|
}
|
||
|
finally
|
||
|
{
|
||
|
gCHandle.Free();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
[DllImport("/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation")]
|
||
|
private static extern bool CFWriteStreamSetClient(IntPtr stream, CFIndex eventTypes, CFStreamCallback cb, IntPtr context);
|
||
|
|
||
|
protected override bool DoSetClient(CFStreamCallback callback, CFIndex eventTypes, IntPtr context)
|
||
|
{
|
||
|
return CFWriteStreamSetClient(base.Handle, eventTypes, callback, context);
|
||
|
}
|
||
|
|
||
|
[DllImport("/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation")]
|
||
|
private static extern void CFWriteStreamScheduleWithRunLoop(IntPtr handle, IntPtr loop, IntPtr mode);
|
||
|
|
||
|
protected override void ScheduleWithRunLoop(CFRunLoop loop, NSString mode)
|
||
|
{
|
||
|
CFWriteStreamScheduleWithRunLoop(base.Handle, loop.Handle, mode.Handle);
|
||
|
}
|
||
|
|
||
|
[DllImport("/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation")]
|
||
|
private static extern void CFWriteStreamUnscheduleFromRunLoop(IntPtr handle, IntPtr loop, IntPtr mode);
|
||
|
|
||
|
protected override void UnscheduleFromRunLoop(CFRunLoop loop, NSString mode)
|
||
|
{
|
||
|
CFWriteStreamUnscheduleFromRunLoop(base.Handle, loop.Handle, mode.Handle);
|
||
|
}
|
||
|
|
||
|
[DllImport("/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation")]
|
||
|
private static extern IntPtr CFReadStreamCopyProperty(IntPtr handle, IntPtr name);
|
||
|
|
||
|
protected override IntPtr DoGetProperty(NSString name)
|
||
|
{
|
||
|
return CFReadStreamCopyProperty(base.Handle, name.Handle);
|
||
|
}
|
||
|
|
||
|
[DllImport("/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation")]
|
||
|
private static extern bool CFWriteStreamSetProperty(IntPtr handle, IntPtr name, IntPtr value);
|
||
|
|
||
|
protected override bool DoSetProperty(NSString name, INativeObject value)
|
||
|
{
|
||
|
return CFWriteStreamSetProperty(base.Handle, name.Handle, value.Handle);
|
||
|
}
|
||
|
}
|
||
|
}
|