|
class ImageSharedMemoryConsumer |
|
: ISharedMemoryConsumer |
|
{ |
|
[DllImport("ScryUnlimitedCommunicator.so")] |
|
private static extern IntPtr GetImageConsumer(string name); |
|
|
|
[DllImport("ScryUnlimitedCommunicator.so")] |
|
private static extern void DeleteImageNetCoreSharedMemoryConsumer(IntPtr instance); |
|
|
|
[DllImport("ScryUnlimitedCommunicator.so")] |
|
private static extern void ImageConsumerSetCallback(IntPtr instance, IntPtr callback); |
|
|
|
[DllImport("ScryUnlimitedCommunicator.so")] |
|
private static extern void StartImageConsumer(IntPtr instance); |
|
|
|
[DllImport("ScryUnlimitedCommunicator.so")] |
|
private static extern void SeralizedWait(IntPtr instance); |
|
|
|
private readonly IntPtr _nativePointer; |
|
private IntPtr _callbackPtr; |
|
private GCHandle _callbackHandle; |
|
|
|
public ImageSharedMemoryConsumer(string name) |
|
{ |
|
_nativePointer = GetImageConsumer(name); |
|
} |
|
|
|
~ImageSharedMemoryConsumer() |
|
{ |
|
DeleteImageNetCoreSharedMemoryConsumer(_nativePointer); |
|
} |
|
|
|
public long Size() |
|
{ |
|
return 3000000; |
|
} |
|
|
|
public void SetCallback(HandleMessage handler) |
|
{ |
|
void Callback(IntPtr x, int y) |
|
{ |
|
byte[] managedArray = new byte[y]; |
|
Marshal.Copy(x, managedArray, 0, y); |
|
handler(managedArray); |
|
} |
|
|
|
_callbackPtr = Marshal.GetFunctionPointerForDelegate(new InternalHandleMessage(Callback)); |
|
_callbackHandle = GCHandle.Alloc((Action<IntPtr, int>) Callback); |
|
|
|
ImageConsumerSetCallback(_nativePointer,_callbackPtr); |
|
} |
|
|
|
public void Start() |
|
{ |
|
StartImageConsumer(_nativePointer); |
|
} |
|
|
|
public void Wait() |
|
{ |
|
SeralizedWait(_nativePointer); |
|
} |
|
} |