public static Task <Session> AppRegisteredAsync(string appId, AuthGranted authGranted) { return(Task.Run( () => { var tcs = new TaskCompletionSource <Session>(TaskCreationOptions.RunContinuationsAsynchronously); var session = new Session(); Action <FfiResult, IntPtr, GCHandle> acctCreatedCb = (result, ptr, disconnectedHandle) => { if (result.ErrorCode != 0) { disconnectedHandle.Free(); tcs.SetException(result.ToException()); return; } session.Init(ptr, disconnectedHandle); tcs.SetResult(session); }; Action disconnectedCb = () => { OnDisconnected(session); }; AppBindings.AppRegistered(appId, ref authGranted, disconnectedCb, acctCreatedCb); return tcs.Task; })); }
public static Task <bool> AppRegisteredAsync(string appId, AuthGranted authGranted) { return(Task.Run( () => { var tcs = new TaskCompletionSource <bool>(); var authGrantedFfi = new AuthGrantedFfi { AccessContainer = authGranted.AccessContainer, AppKeys = authGranted.AppKeys, BootStrapConfigPtr = authGranted.BootStrapConfig.ToIntPtr(), BootStrapConfigLen = (IntPtr)authGranted.BootStrapConfig.Count }; var authGrantedFfiPtr = CommonUtils.Helpers.StructToPtr(authGrantedFfi); AppRegisteredCallback callback = null; callback = (ptr, result, appPtr) => { if (result.ErrorCode != 0) { tcs.SetException(result.ToException()); CallbackManager.Unregister(callback); return; } AppPtr = appPtr; tcs.SetResult(true); CallbackManager.Unregister(callback); }; CallbackManager.Register(callback); NativeBindings.AppRegistered(appId, authGrantedFfiPtr, IntPtr.Zero, UserData, NetObs, callback); Marshal.FreeHGlobal(authGrantedFfi.BootStrapConfigPtr); Marshal.FreeHGlobal(authGrantedFfiPtr); return tcs.Task; })); }
public void AppRegistered( string appId, ref AuthGranted authGranted, Action oDisconnectNotifierCb, Action <FfiResult, IntPtr, GCHandle> oCb) { var authGrantedNative = authGranted.ToNative(); var userData = BindingUtils.ToHandlePtr((oDisconnectNotifierCb, oCb)); AppRegisteredNative(appId, ref authGrantedNative, userData, OnAppDisconnectCb, OnAppCreateCb); authGrantedNative.Free(); }
public static Task <DecodeIpcResult> DecodeIpcMessageAsync(string encodedReq) { return(Task.Run( () => { var tcs = new TaskCompletionSource <DecodeIpcResult>(); DecodeAuthCb authCb = null; DecodeUnregCb unregCb = null; DecodeContCb contCb = null; DecodeShareMDataCb shareMDataCb = null; DecodeRevokedCb revokedCb = null; DecodeErrorCb errorCb = null; var callbacks = new List <object>(); authCb = (self, id, authGrantedFfiPtr) => { var authGrantedFfi = (AuthGrantedFfi)Marshal.PtrToStructure(authGrantedFfiPtr, typeof(AuthGrantedFfi)); var authGranted = new AuthGranted { AppKeys = authGrantedFfi.AppKeys, AccessContainer = authGrantedFfi.AccessContainer, BootStrapConfig = authGrantedFfi.BootStrapConfigPtr.ToList <byte>(authGrantedFfi.BootStrapConfigLen) }; tcs.SetResult(new DecodeIpcResult { AuthGranted = authGranted }); CallbackManager.Unregister(callbacks); }; unregCb = (self, id, config, size) => { tcs.SetResult(new DecodeIpcResult { UnRegAppInfo = Tuple.Create(config, size) }); CallbackManager.Unregister(callbacks); }; contCb = (self, id) => { tcs.SetResult(new DecodeIpcResult { ContReqId = id }); CallbackManager.Unregister(callbacks); }; shareMDataCb = (self, id) => { tcs.SetResult(new DecodeIpcResult { ShareMData = id }); CallbackManager.Unregister(callbacks); }; revokedCb = self => { tcs.SetResult(new DecodeIpcResult { Revoked = true }); CallbackManager.Unregister(callbacks); }; errorCb = (self, result) => { tcs.SetException(result.ToException()); CallbackManager.Unregister(callbacks); }; callbacks.AddRange(new List <object> { authCb, unregCb, contCb, shareMDataCb, revokedCb, errorCb }); CallbackManager.Register(callbacks); NativeBindings.DecodeIpcMessage(encodedReq, UserData, authCb, unregCb, contCb, shareMDataCb, revokedCb, errorCb); return tcs.Task; })); }