public IBehaviors RemoveBehavior(IBehavior aBehavior) { CheckArg.Behavior(aBehavior); aBehavior.LinkBehaviors(null); fList.Remove(aBehavior); return(this); }
public IBehaviors AddBehavior(IBehavior aBehavior) { CheckArg.Behavior(aBehavior); aBehavior.LinkBehaviors(this); fList.Add(aBehavior); return(this); }
public IBehaviors BecomeBehavior(IBehavior aBehavior) { CheckArg.Behavior(aBehavior); fList.Clear(); aBehavior.LinkBehaviors(this); fList.Add(aBehavior); return(this); }
public Behaviors(IBehavior[] someBehaviors) { CheckArg.BehaviorParam(someBehaviors); foreach (var item in someBehaviors) { AddBehavior(item); } }
public Behaviors(IEnumerable <IBehavior> manyBehaviors) { CheckArg.BehaviorEnumerable(manyBehaviors); foreach (IBehavior item in manyBehaviors) { AddBehavior(item); } }
protected void AddBehavior(IBehaviors someBehaviors) { CheckArg.Behaviors(someBehaviors); someBehaviors.LinkToActor(this); fListBehaviors.AddRange(someBehaviors.AllBehaviors()); AddMissedMessages(); TrySetInTask(); }
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; })); }
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(); } }
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(); }
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(); }
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); } }
public ActorTag(string urlAddress) { CheckArg.Address(urlAddress); InitTag(new Uri(urlAddress)); }
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)); }
public static BaseActor Add(BaseActor anActor, object aMessage) { CheckArg.Actor(anActor); anActor.SendMessage(aMessage); return(anActor); }
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)); }
public static void SendMessage <T1, T2>(this BaseActor anActor, T1 t1, T2 t2) { CheckArg.Actor(anActor); anActor.SendMessage(new MessageParam <T1, T2>(t1, t2)); }
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))); }
public void RemoveBehavior(IBehavior aBehavior) { CheckArg.Behavior(aBehavior); aBehavior.LinkBehaviors(null); fList.Remove(aBehavior); }
protected void RemoveBehavior(IBehavior aBehavior) { CheckArg.Behavior(aBehavior); AddMissedMessages(); fListBehaviors.Remove(aBehavior); }
public ActorTag(Uri uri) { CheckArg.Uri(uri); InitTag(uri); }
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)); }