public ActorRef GetActor(Action <Inbox> initializer) { ActorInbox <TActor> inbox = null; Fiber fiber = _fiberFactory(new TryCatchOperationExecutor(ex => { inbox.Send <Fault>(new { ex.Message, ex.StackTrace }); })); Scheduler scheduler = _schedulerFactory(); inbox = new ActorInbox <TActor>(fiber, scheduler); TActor instance = CreateActorInstance(fiber, scheduler, inbox); ApplyConventions(instance, fiber, scheduler, inbox); if (initializer != null) { fiber.Add(() => initializer(inbox)); } return(inbox); }
public ActorInstance Create(Action<Inbox> initializer) { Fiber fiber = _fiberFactory(); Scheduler scheduler = _schedulerFactory(); var inbox = new ActorInbox<AnonymousActor>(fiber, scheduler); _factory(fiber, scheduler, inbox); fiber.Add(() => initializer(inbox)); return inbox; }
public ActorInstance Create(Action <Inbox> initializer) { Fiber fiber = _fiberFactory(); Scheduler scheduler = _schedulerFactory(); var inbox = new ActorInbox <AnonymousActor>(fiber, scheduler); _factory(fiber, scheduler, inbox); fiber.Add(() => initializer(inbox)); return(inbox); }
public void Should_properly_invoke_the_message_receiver() { var inbox = new ActorInbox<MyActor>(new SynchronousFiber(), new TimerScheduler(new SynchronousFiber())); var received1 = new Future<Request<A>>(); var received2 = new Future<Request<A>>(); var responseChannel = new ChannelAdapter(); Request<A> request1 = inbox.Request(new A(), responseChannel); Request<A> request2 = inbox.Request(new A(), responseChannel); inbox.Receive<Request<A>>(x => x.RequestId != request2.RequestId ? (Consumer<Request<A>>)null : received2.Complete); inbox.Receive<Request<A>>(x => x.RequestId != request1.RequestId ? (Consumer<Request<A>>)null : received1.Complete); received1.WaitUntilCompleted(2.Seconds()).ShouldBeTrue("1 not received"); received2.WaitUntilCompleted(2.Seconds()).ShouldBeTrue("2 not received"); }
public void Should_properly_invoke_the_message_receiver() { var inbox = new ActorInbox <MyActor>(new SynchronousFiber(), new TimerScheduler(new SynchronousFiber())); var received1 = new Future <Request <A> >(); var received2 = new Future <Request <A> >(); var responseChannel = new ChannelAdapter(); Request <A> request1 = inbox.Request(new A(), responseChannel); Request <A> request2 = inbox.Request(new A(), responseChannel); inbox.Receive <Request <A> >(x => x.RequestId != request2.RequestId ? (Consumer <Request <A> >)null : received2.Complete); inbox.Receive <Request <A> >(x => x.RequestId != request1.RequestId ? (Consumer <Request <A> >)null : received1.Complete); received1.WaitUntilCompleted(2.Seconds()).ShouldBeTrue("1 not received"); received2.WaitUntilCompleted(2.Seconds()).ShouldBeTrue("2 not received"); }
protected virtual bool Visit <TActor>(ActorInbox <TActor> inbox) where TActor : class, Actor { Visit(inbox.Engine); return(true); }