private static void InitialEvent(IntPtr aPtr) { GCHandle gch = GCHandle.FromIntPtr(aPtr); CpProxy self = (CpProxy)gch.Target; Property.CallPropertyChangedDelegate(self.iInitialEvent); }
/// <summary> /// Request an invocation object prior to setting input/output arguments /// </summary> /// <param name="aAction">Action which will be invoked</param> /// <param name="aCallback">Delegate to run when the action completes</param> /// <returns>Invocation object, ready to receive input and output arguments</returns> public Invocation Invocation(OpenHome.Net.Core.Action aAction, CpProxy.CallbackAsyncComplete aCallback) { Invocation invocation = new Invocation(this, aAction.Handle(), aCallback); lock (this) { iActiveInvocations.Add(invocation); } return invocation; }
/// <summary> /// Constructor. Not intended for external use (use CpService.Invocation instead) /// </summary> /// <param name="aService">Service the action is being invoked on</param> /// <param name="aAction">Handle to the action being invoked</param> /// <param name="aCallback">Callback to run when the action completes</param> internal Invocation(CpService aService, IntPtr aAction, CpProxy.CallbackAsyncComplete aCallback) { iService = aService; iInputArgs = new List<Argument>(); iOutputArgs = new List<Argument>(); GCHandle gch = GCHandle.Alloc(this); /* no need to store gch as a member as AsyncComplete is guaranteed to be called, even in error cases */ iAsyncComplete = aCallback; iCallbackAsyncComplete = new CpProxy.CallbackActionComplete(AsyncComplete); IntPtr ptr = GCHandle.ToIntPtr(gch); iHandle = CpServiceInvocation(aService.Handle(), aAction, iCallbackAsyncComplete, ptr); }
static extern IntPtr CpServiceInvocation(IntPtr aService, IntPtr aAction, CpProxy.CallbackActionComplete aCallback, IntPtr aPtr);