Inheritance: PrologGenericDelegate, IDisposable
Example #1
0
 public static bool cliAddEventWaiter(PlTerm blockOn, PlTerm clazzOrInstance, PlTerm memberSpec, PlTerm newBlockOn)
 {
     WaitUntilDelegateList list = null;
     object getInstance1 = GetInstance(blockOn);
     var wud = getInstance1 as WaitUntilDelegate;
     if (wud == null)
     {
         if (!(getInstance1 is WaitUntilDelegateList)) return Embedded.Error("Not an instance of WaitUntilDelegate: " + blockOn);
         list = getInstance1 as WaitUntilDelegateList;
     }
     else
     {
         list = wud.parent;
     }
     object getInstance;
     Type c;
     if (!GetInstanceAndType(clazzOrInstance, out getInstance, out c)) return false;
     Type[] paramz = null;
     if (!CheckBound(memberSpec, blockOn)) return false;
     EventInfo fi = findEventInfo(memberSpec, c, ref paramz, BindingFlagsALL);
     if (fi == null)
     {
         return Embedded.Error("Cant find event {0} on {1}", memberSpec, (object)c ?? clazzOrInstance);
     }
     var wud2 = new WaitUntilDelegate(list, fi, getInstance);
     list.WaitOns.Add(wud2);
     return newBlockOn.FromObject(list);
 }
Example #2
0
 public object[] WaitOne(TimeSpan ts, out WaitUntilDelegate wud0)
 {
     wud0 = null;
     if (!mre.WaitOne(ts))
     {
         return(null);
     }
     foreach (WaitUntilDelegate wud in WaitOns)
     {
         var tr = wud.Result;
         if (tr != null)
         {
             wud0 = wud;
             return(tr);
         }
     }
     return(null);
 }
Example #3
0
        public static bool cliAddEventWaiter(PlTerm blockOn, PlTerm clazzOrInstance, PlTerm memberSpec, PlTerm newBlockOn)
        {
            WaitUntilDelegateList list = null;
            object getInstance1        = GetInstance(blockOn);
            var    wud = getInstance1 as WaitUntilDelegate;

            if (wud == null)
            {
                if (!(getInstance1 is WaitUntilDelegateList))
                {
                    return(Error("Not an instance of WaitUntilDelegate: " + blockOn));
                }
                list = getInstance1 as WaitUntilDelegateList;
            }
            else
            {
                list = wud.parent;
            }
            object getInstance;
            Type   c;

            if (!GetInstanceAndType(clazzOrInstance, out getInstance, out c))
            {
                return(false);
            }
            Type[] paramz = null;
            if (!CheckBound(memberSpec, blockOn))
            {
                return(false);
            }
            EventInfo fi = findEventInfo(memberSpec, c, ref paramz, BindingFlagsALL);

            if (fi == null)
            {
                return(Error("Cant find event {0} on {1}", memberSpec, (object)c ?? clazzOrInstance));
            }
            var wud2 = new WaitUntilDelegate(list, fi, getInstance);

            list.WaitOns.Add(wud2);
            return(newBlockOn.FromObject(list));
        }
Example #4
0
 public object[] WaitOne(TimeSpan ts, out WaitUntilDelegate wud0)
 {
     wud0 = null;
     if (!mre.WaitOne(ts)) return null;
     foreach (WaitUntilDelegate wud in WaitOns)
     {
         var tr = wud.Result;
         if (tr != null)
         {
             wud0 = wud;
             return tr;
         }
     }
     return null;
 }