Instantly share code, notes, and snippets.
          Created
          June 10, 2019 15:26 
        
      - 
            
      
        
      
    Star
      
          0
          (0)
      
  
You must be signed in to star a gist  - 
              
      
        
      
    Fork
      
          0
          (0)
      
  
You must be signed in to fork a gist  
- 
        
Save QiMata/a8b08811c7eb37d04756909ce5531570 to your computer and use it in GitHub Desktop.  
    The C# portions of the shared memory provider
  
        
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
  | 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); | |
| } | |
| } | 
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
  | class ImageSharedMemoryProducer | |
| : ISharedMemoryProducer | |
| { | |
| [DllImport("ScryUnlimitedCommunicator.so")] | |
| private static extern IntPtr GetImageProducer(string name); | |
| [DllImport("ScryUnlimitedCommunicator.so")] | |
| private static extern void DeleteImageProducer(IntPtr handle); | |
| [DllImport("ScryUnlimitedCommunicator.so")] | |
| private static extern void SendImageData(IntPtr handle, byte[] data,long length); | |
| private IntPtr _nativeHandle; | |
| public ImageSharedMemoryProducer(string name) | |
| { | |
| _nativeHandle = GetImageProducer(name); | |
| } | |
| ~ImageSharedMemoryProducer() | |
| { | |
| DeleteImageProducer(_nativeHandle); | |
| } | |
| public long Size() | |
| { | |
| return 3000000; | |
| } | |
| public void Write(byte[] message) | |
| { | |
| SendImageData(_nativeHandle,message,message.LongLength); | |
| } | |
| } | 
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
  | using System; | |
| public delegate void HandleMessage(byte[] message); | |
| internal delegate void InternalHandleMessage(IntPtr array, int length); | |
| public interface ISharedMemoryConsumer | |
| { | |
| long Size(); | |
| void SetCallback(HandleMessage handler); | |
| void Start(); | |
| void Wait(); | |
| } | 
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
  | public interface ISharedMemoryProducer | |
| { | |
| long Size(); | |
| void Write(byte[] message); | |
| } | 
  
    Sign up for free
    to join this conversation on GitHub.
    Already have an account?
    Sign in to comment