示例#1
0
 private static void EventCompletion(IntPtr ptr)
 {
     if (handleToCallback.ContainsKey(ptr))
     {
         var ev       = new BPSEvent(ptr, false);
         var callback = handleToCallback[ptr];
         handleToCallback.Remove(ptr);
         try
         {
             callback(ev);
         }
         catch
         {
         }
     }
     BPSEventPayload.FreeDataPointer(bps_event_get_payload(ptr));
 }
示例#2
0
        private BPSEvent(int domain, uint code, BPSEventPayload payload, Action <BPSEvent> completionFunction, bool recordCompletion)
            : this(IntPtr.Zero, true)
        {
            if (domain < 0 || domain > BPS_EVENT_DOMAIN_MAX)
            {
                throw new ArgumentOutOfRangeException("domain", domain, "0 <= domain < BPS_EVENT_DOMAIN_MAX");
            }
            if (code > ushort.MaxValue)
            {
                throw new ArgumentOutOfRangeException("code", code, "0 <= code < UInt16.MaxValue");
            }
            Util.GetBPSOrException();
            var payloadPtr = payload.GetDataPointer();
            var success    = bps_event_create(out handle, (uint)domain, code, payloadPtr, EventCompletion) != BPS.BPS_SUCCESS;

            if (payloadPtr != IntPtr.Zero)
            {
                if (!success)
                {
                    BPSEventPayload.FreeDataPointer(payloadPtr);
                }
                Stdlib.free(payloadPtr);
            }
            if (success)
            {
                if (recordCompletion)
                {
                    handleToCallback.Add(handle, completionFunction);
                }
            }
            else
            {
                Util.ThrowExceptionForLastErrno();
            }
            IsDisposable = true;
        }
示例#3
0
 private BPSEvent(int domain, uint code, BPSEventPayload payload, Action<BPSEvent> completionFunction, bool recordCompletion)
     : this(IntPtr.Zero, true)
 {
     if (domain < 0 || domain > BPS_EVENT_DOMAIN_MAX)
     {
         throw new ArgumentOutOfRangeException("domain", domain, "0 <= domain < BPS_EVENT_DOMAIN_MAX");
     }
     if (code > ushort.MaxValue)
     {
         throw new ArgumentOutOfRangeException("code", code, "0 <= code < UInt16.MaxValue");
     }
     Util.GetBPSOrException();
     var payloadPtr = payload.GetDataPointer();
     var success = bps_event_create(out handle, (uint)domain, code, payloadPtr, EventCompletion) != BPS.BPS_SUCCESS;
     if (payloadPtr != IntPtr.Zero)
     {
         if (!success)
         {
             BPSEventPayload.FreeDataPointer(payloadPtr);
         }
         Stdlib.free(payloadPtr);
     }
     if (success)
     {
         if (recordCompletion)
         {
             handleToCallback.Add(handle, completionFunction);
         }
     }
     else
     {
         Util.ThrowExceptionForLastErrno();
     }
     IsDisposable = true;
 }
示例#4
0
 public BPSEvent(int domain, uint code, BPSEventPayload payload, Action<BPSEvent> completionFunction)
     : this(domain, code, payload, completionFunction, true)
 {
 }
示例#5
0
 public BPSEvent(int domain, uint code, BPSEventPayload payload)
     : this(domain, code, payload, null, false)
 {
 }
示例#6
0
 public BPSEvent(int domain, uint code, BPSEventPayload payload, Action <BPSEvent> completionFunction)
     : this(domain, code, payload, completionFunction, true)
 {
 }
示例#7
0
 public BPSEvent(int domain, uint code, BPSEventPayload payload)
     : this(domain, code, payload, null, false)
 {
 }