示例#1
0
        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;
            }));
        }
示例#2
0
        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();
        }
示例#4
0
        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;
            }));
        }