public static Task <string> EncodeAuthReqAsync(AuthReq authReq) { return(Task.Run( () => { var tcs = new TaskCompletionSource <string>(); var authReqFfi = new AuthReqFfi { AppContainer = authReq.AppContainer, AppExchangeInfo = authReq.AppExchangeInfo, ContainersLen = (IntPtr)authReq.Containers.Count, ContainersArrayPtr = authReq.Containers.ToIntPtr() }; var authReqFfiPtr = CommonUtils.Helpers.StructToPtr(authReqFfi); EncodeAuthReqCb callback = null; callback = (ptr, result, id, req) => { if (result.ErrorCode != 0) { tcs.SetException(result.ToException()); CallbackManager.Unregister(callback); return; } tcs.SetResult(req); CallbackManager.Unregister(callback); }; CallbackManager.Register(callback); NativeBindings.EncodeAuthReq(authReqFfiPtr, UserData, callback); Marshal.FreeHGlobal(authReqFfi.ContainersArrayPtr); Marshal.FreeHGlobal(authReqFfiPtr); return tcs.Task; })); }
public static extern void EncodeAuthReqNative(IntPtr authReq, IntPtr userDataPtr, EncodeAuthReqCb callback);
public void EncodeAuthReq(IntPtr authReq, IntPtr userDataPtr, EncodeAuthReqCb callback) { EncodeAuthReqNative(authReq, userDataPtr, callback); }
public void EncodeAuthReq(IntPtr authReq, EncodeAuthReqCb callback) { EncodeAuthReqNative(authReq, callback.ToHandlePtr(), OnEncodeAuthReqCb); }