Beispiel #1
0
        static void PromiseTests()
        {
            // Promise
            var promise = new Promise();

            promise

                // ========== Then ==========
                .Then(delegate ()
                {
                    Console.WriteLine("AAA");
                })

                // ThenPromise - Resolve
                .ThenPromise(delegate ()
                {
                    var newPromise = new Promise();
                    newPromise.Resolve();
                    return newPromise;
                })
                .Then(delegate ()
                {
                    Console.WriteLine("BBB");
                })

                // ThenPromise - Reject
                .ThenPromise(delegate ()
                {
                    var newPromise = new Promise();
                    newPromise.Reject(new Exception("CCC"));
                    return newPromise;
                })
                .Fail(delegate (Exception error)
                {
                    Console.WriteLine(error.Message);
                })


                // ========== ThenNew ==========
                .ThenNew<string>(delegate ()
                {
                    return "DDD";
                })
                .Then(delegate (string result)
                {
                    Console.WriteLine(result);
                })

                // ThenNewPromise - Resolve
                .ThenNewPromise<string>(delegate ()
                {
                    var newPromise = new ResultPromise<string>();
                    newPromise.Resolve("EEE");
                    return newPromise;
                })
                .Then(delegate (string result)
                {
                    Console.WriteLine(result);
                })

                // ThenNewPromise - Reject
                .ThenNewPromise<string>(delegate ()
                {
                    var newPromise = new ResultPromise<string>();
                    newPromise.Reject(new Exception("FFF"));
                    return newPromise;
                })
                .Fail(delegate (Exception error)
                {
                    Console.WriteLine(error.Message);
                })


                // ========== All ==========
                .ThenNewPromise<List<string>>(delegate ()
                {
                    List<ResultPromise<string>> promiseList = new List<ResultPromise<String>>();

                    var promiseA = new ResultPromise<string>();
                    promiseA.Resolve("GGG");
                    promiseList.Add(promiseA);

                    var promiseB = new ResultPromise<string>();
                    promiseB.Resolve("HHH");
                    promiseList.Add(promiseB);

                    return Promise.AllNewPromise<string>(promiseList);
                })
                .Then(delegate (List<string> resultList)
                {
                    foreach(var result in resultList)
                    {
                        Console.WriteLine(result);
                    }
                })


                // ========== Throw ==========
                .Then(delegate ()
                {
                    throw new Exception("III");
                })
                .Fail(delegate (Exception error)
                {
                    throw error;
                })
                .Fail(delegate (Exception error)
                {
                    Console.WriteLine(error.Message);
                })


                // ========== End ==========
                .Progress(delegate (Progress progress)
                {
                Console.WriteLine("Progress:" + progress.LocalizedDescription);
                })
                .Fail(delegate (Exception error)
                {
                    Console.WriteLine("Fail:" + error.Message);
                })
                .Then(delegate ()
                {
                    Console.WriteLine("End");
                })
            ;

            // Operate 
            promise.Notify(new Progress("0%", 0, 100));
            promise.Notify(new Progress("50%", 50, 100));
            promise.Notify(new Progress("100%", 100, 100));
            promise.Resolve();
        }
Beispiel #2
0
        // Methods
        public override ResultPromise <TransportResponse> Send(TransportRequest request)
        {
            #region Contracts

            if (request == null)
            {
                throw new ArgumentNullException();
            }

            #endregion

            // Result
            ResultPromise <TransportResponse> promise = new ResultPromise <TransportResponse>();

            // IsAuthenticated
            if (_identityContext.CurrentUser.IsAuthenticated() == false)
            {
                if (this.IsAllowAnonymous(request) == false)
                {
                    // Reject
                    promise.Reject(new UnauthorizedException());

                    // Return
                    return(promise);
                }
            }

            // Send
            base.Send(request)

            // Success
            .Then(delegate(TransportResponse response)
            {
                // Resolve
                promise.Resolve(response);
            })

            // Fail
            .Fail(delegate(Exception error)
            {
                try
                {
                    // Require
                    if (error is UnauthorizedException)
                    {
                        if (this.IsAllowAnonymous(request) == true)
                        {
                            error = new Exception(error.Message);
                        }
                    }

                    // Reject
                    promise.Reject(error);

                    // Notify
                    if (error is UnauthorizedException)
                    {
                        this.OnUnauthorized();
                    }
                }
                catch (Exception ex)
                {
                    // Reject
                    promise.Reject(ex);
                }
            });

            // Return
            return(promise);
        }