Esempio n. 1
0
 public IBehaviors RemoveBehavior(IBehavior aBehavior)
 {
     CheckArg.Behavior(aBehavior);
     aBehavior.LinkBehaviors(null);
     fList.Remove(aBehavior);
     return(this);
 }
Esempio n. 2
0
 public IBehaviors AddBehavior(IBehavior aBehavior)
 {
     CheckArg.Behavior(aBehavior);
     aBehavior.LinkBehaviors(this);
     fList.Add(aBehavior);
     return(this);
 }
Esempio n. 3
0
 public IBehaviors BecomeBehavior(IBehavior aBehavior)
 {
     CheckArg.Behavior(aBehavior);
     fList.Clear();
     aBehavior.LinkBehaviors(this);
     fList.Add(aBehavior);
     return(this);
 }
Esempio n. 4
0
 public Behaviors(IBehavior[] someBehaviors)
 {
     CheckArg.BehaviorParam(someBehaviors);
     foreach (var item in someBehaviors)
     {
         AddBehavior(item);
     }
 }
Esempio n. 5
0
 public Behaviors(IEnumerable <IBehavior> manyBehaviors)
 {
     CheckArg.BehaviorEnumerable(manyBehaviors);
     foreach (IBehavior item in manyBehaviors)
     {
         AddBehavior(item);
     }
 }
Esempio n. 6
0
 protected void AddBehavior(IBehaviors someBehaviors)
 {
     CheckArg.Behaviors(someBehaviors);
     someBehaviors.LinkToActor(this);
     fListBehaviors.AddRange(someBehaviors.AllBehaviors());
     AddMissedMessages();
     TrySetInTask();
 }
Esempio n. 7
0
 public static async Task <Object> Receive <T1, T2, T3, T4>(this BaseActor anActor, Func <T1, T2, T3, T4, bool> aPattern)
 {
     CheckArg.Actor(anActor);
     return(await anActor.Receive((o) =>
     {
         IMessageParam <T1, T2, T3, T4> t = o as IMessageParam <T1, T2, T3, T4>;
         return t != null ? aPattern(t.Item1, t.Item2, t.Item3, t.Item4) : false;
     }));
 }
Esempio n. 8
0
        public static void CompleteInitialize(BaseActor anActor)
        {
            CheckArg.Actor(anActor);
            anActor.fListBehaviors = new List <IBehavior>();
            anActor.fCompletions   = QueueFactory <IBehavior> .Current.GetQueue();

            anActor.fMailBox = new ActorMailBox <object>();
            if (anActor.Tag == null)
            {
                anActor.Tag = new ActorTag();
            }
        }
Esempio n. 9
0
        protected void AddBehavior(params IBehavior[] someBehaviors)
        {
            CheckArg.BehaviorParam(someBehaviors);
            var behaviors = new Behaviors();

            foreach (var item in someBehaviors)
            {
                behaviors.AddBehavior(item);
                fListBehaviors.Add(item);
            }
            behaviors.LinkToActor(this);
            AddMissedMessages();
            TrySetInTask();
        }
Esempio n. 10
0
        protected void Become(params IBehavior[] manyBehaviors)
        {
            CheckArg.BehaviorParam(manyBehaviors);

            fListBehaviors.Clear();

            var someBehaviors = new Behaviors();

            foreach (var item in manyBehaviors)
            {
                someBehaviors.AddBehavior(item);
                fListBehaviors.Add(item);
            }
            someBehaviors.LinkToActor(this);
            AddMissedMessages();
            TrySetInTask();
        }
Esempio n. 11
0
        public async Task <object> Receive(Func <object, bool> aPattern, int timeOutMS)
        {
            CheckArg.Pattern(aPattern);
            var lTCS = new Behavior(aPattern, new TaskCompletionSource <object>());

            Interlocked.Increment(ref fShared.fReceive);
            fCompletions.Add(lTCS);
            AddMissedMessages();
            Interlocked.Exchange(ref fShared.fInTask, 0);
            TrySetInTask(TaskCreationOptions.LongRunning);
            if (timeOutMS != Timeout.Infinite)
            {
                var noTimeOut = lTCS.Completion.Task.Wait(timeOutMS);
                if (noTimeOut)
                {
                    return(await lTCS.Completion.Task);
                }
                else
                {
                    // remove this lTCS
                    Queue <IBehavior> lQueue = new Queue <IBehavior>();
                    IBehavior         bhv;
                    while (fCompletions.TryTake(out bhv))
                    {
                        if (bhv != lTCS)
                        {
                            lQueue.Enqueue(bhv);
                        }
                    }
                    while (lQueue.Count > 0)
                    {
                        fCompletions.Add(lQueue.Dequeue());
                    }

                    Interlocked.Decrement(ref fShared.fReceive);
                    return(null);
                }
            }
            else
            {
                return(await lTCS.Completion.Task);
            }
        }
Esempio n. 12
0
 public ActorTag(string urlAddress)
 {
     CheckArg.Address(urlAddress);
     InitTag(new Uri(urlAddress));
 }
Esempio n. 13
0
 public static Task <object> Receive <T1, T2, T3, T4>(this BaseActor anActor, Func <T1, T2, T3, T4, bool> aPattern)
 {
     CheckArg.Actor(anActor);
     return(anActor.Receive((o) => o is IMessageParam <T1, T2, T3, T4> t ? aPattern(t.Item1, t.Item2, t.Item3, t.Item4) : false));
 }
Esempio n. 14
0
 public static BaseActor Add(BaseActor anActor, object aMessage)
 {
     CheckArg.Actor(anActor);
     anActor.SendMessage(aMessage);
     return(anActor);
 }
Esempio n. 15
0
 public static void SendMessage <T1, T2, T3, T4>(this BaseActor anActor, T1 t1, T2 t2, T3 t3, T4 t4)
 {
     CheckArg.Actor(anActor);
     anActor.SendMessage(new MessageParam <T1, T2, T3, T4>(t1, t2, t3, t4));
 }
Esempio n. 16
0
 public static void SendMessage <T1, T2>(this BaseActor anActor, T1 t1, T2 t2)
 {
     CheckArg.Actor(anActor);
     anActor.SendMessage(new MessageParam <T1, T2>(t1, t2));
 }
Esempio n. 17
0
 public static Task <object> ReceiveAsync <T1, T2, T3>(this BaseActor anActor, Func <T1, T2, T3, bool> aPattern)
 {
     CheckArg.Actor(anActor);
     return(anActor.ReceiveAsync((o) => o is IMessageParam <T1, T2, T3> t && aPattern(t.Item1, t.Item2, t.Item3)));
 }
Esempio n. 18
0
 public void RemoveBehavior(IBehavior aBehavior)
 {
     CheckArg.Behavior(aBehavior);
     aBehavior.LinkBehaviors(null);
     fList.Remove(aBehavior);
 }
Esempio n. 19
0
 protected void RemoveBehavior(IBehavior aBehavior)
 {
     CheckArg.Behavior(aBehavior);
     AddMissedMessages();
     fListBehaviors.Remove(aBehavior);
 }
Esempio n. 20
0
 public ActorTag(Uri uri)
 {
     CheckArg.Uri(uri);
     InitTag(uri);
 }
Esempio n. 21
0
 public static void SendMessage <T1, T2, T3>(this IActor anActor, T1 t1, T2 t2, T3 t3)
 {
     CheckArg.Actor(anActor);
     anActor.SendMessage(new MessageParam <T1, T2, T3>(t1, t2, t3));
 }