Esempio n. 1
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;
        }
Esempio n. 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;
 }