diff Implab/SuccessPromiseT.cs @ 145:706fccb85524 v2

RC: cancellation support for promises + tests
author cin
date Sun, 08 Mar 2015 02:52:27 +0300
parents
children 4d9830a9bbb8
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Implab/SuccessPromiseT.cs	Sun Mar 08 02:52:27 2015 +0300
@@ -0,0 +1,177 @@
+using System;
+
+namespace Implab {
+    public class SuccessPromise<T> : IPromise<T> {
+        readonly T m_value;
+
+        public SuccessPromise(T value){
+            m_value = value;
+        }
+
+        public IPromise<T> On(Action<T> success, Action<Exception> error, Action<Exception> cancel) {
+            if (success != null) {
+                try {
+                    success(m_value);
+                } catch(Exception err) {
+                    if (error != null) {
+                        try {
+                            error(err);
+                            // Analysis disable once EmptyGeneralCatchClause
+                        } catch {
+                        }
+                    }
+                }
+            }
+            return this;
+        }
+
+        public IPromise<T> On(Action<T> success, Action<Exception> error) {
+            if (success != null) {
+                try {
+                    success(m_value);
+                } catch(Exception err) {
+                    if (error != null) {
+                        try {
+                            error(err);
+                            // Analysis disable once EmptyGeneralCatchClause
+                        } catch {
+                        }
+                    }
+                }
+            }
+            return this;
+        }
+
+        public IPromise<T> On(Action<T> success) {
+            if (success != null) {
+                try {
+                    success(m_value);
+                    // Analysis disable once EmptyGeneralCatchClause
+                } catch {
+                }
+            }
+            return this;
+        }
+
+        public T Join() {
+            return m_value;
+        }
+
+        public T Join(int timeout) {
+            return m_value;
+        }
+
+        public IPromise<T> On(Action success, Action<Exception> error, Action<Exception> cancel) {
+            if (success != null) {
+                try {
+                    success();
+                } catch(Exception err) {
+                    if (error != null) {
+                        try {
+                            error(err);
+                            // Analysis disable once EmptyGeneralCatchClause
+                        } catch {
+                        }
+                    }
+                }
+            }
+            return this;
+        }
+
+        public IPromise<T> On(Action success, Action<Exception> error) {
+            if (success != null) {
+                try {
+                    success();
+                } catch(Exception err) {
+                    if (error != null) {
+                        try {
+                            error(err);
+                            // Analysis disable once EmptyGeneralCatchClause
+                        } catch {
+                        }
+                    }
+                }
+            }
+            return this;
+        }
+
+        public IPromise<T> On(Action success) {
+            if (success != null) {
+                try {
+                    success();
+                    // Analysis disable once EmptyGeneralCatchClause
+                } catch {
+                }
+            }
+            return this;
+        }
+            
+        public IPromise<T> On(Action handler, PromiseEventType events) {
+            if (handler != null && events.HasFlag(PromiseEventType.Success)) {
+                try {
+                    handler();
+                // Analysis disable once EmptyGeneralCatchClause
+                } catch {
+                }
+            }
+            return this;
+        }
+
+        IPromise IPromise.On(Action success, Action<Exception> error, Action<Exception> cancel) {
+            return On(success, error, cancel);
+        }
+
+        IPromise IPromise.On(Action success, Action<Exception> error) {
+            return On(success, error);
+        }
+
+        IPromise IPromise.On(Action success) {
+            return On(success);
+        }
+
+        IPromise IPromise.On(Action handler, PromiseEventType events) {
+            return On(handler, events);
+        }
+
+        public IPromise<T2> Cast<T2>() {
+            return new SuccessPromise<T2>((T2)(object)m_value);
+        }
+
+        void IPromise.Join() {
+        }
+
+        void IPromise.Join(int timeout) {
+        }
+
+        public Type PromiseType {
+            get {
+                return typeof(T);
+            }
+        }
+
+        public bool IsResolved {
+            get {
+                return true;
+            }
+        }
+
+        public bool IsCancelled {
+            get {
+                return false;
+            }
+        }
+
+        public Exception Error {
+            get {
+                return null;
+            }
+        }
+
+        public void Cancel() {
+        }
+
+        public void Cancel(Exception reason) {
+        }
+    }
+}
+