예제 #1
0
        private static void CreateActorSystem()
        {
            ActorSystem = ActorSystem.Create("FeatureAdminActorSystem",
                                             @"akka {
                stdout - loglevel = WARNING
                    loglevel = WARNING
                    log - config - on - start = on
                    actor {
                            debug {
                                receive = on
                                autoreceive = on
                                lifecycle = on
                                event-stream = on
                                unhandled = on
                                  }
                          }"
                                             );


            //// Setup Autofac
            ContainerBuilder builder = new ContainerBuilder();

#if (SP2013)
            builder.RegisterType <Backends.Sp2013.Services.SpDataService>().As <IDataService>().SingleInstance();
#else
            builder.RegisterType <Backends.Demo.Services.DemoDataService>().As <IDataService>().SingleInstance();
#endif
            builder.RegisterType <Actors.LocationActor>();
            builder.RegisterType <Actors.FeatureDefinitionActor>();
            IContainer container = builder.Build();

            var propsResolver = new AutoFacDependencyResolver(container, ActorSystem);
        }
예제 #2
0
        public static void Main(string[] args)
        {
            var builder = new ContainerBuilder();
            builder.RegisterType<SampleUserService>().As<IUserService>();
            builder.RegisterType<SampleStationService>().As<IStationService>();
            builder.RegisterType<UserActor>();
            builder.RegisterType<StationCoordinatorActor>();
            builder.RegisterType<StationActor>();


            Container = builder.Build();

            var system = ActorSystem.Create("UserActorSystem");

            // Create the dependency resolver for the actor system
            var propsResolver = new AutoFacDependencyResolver(Container, system);

            IActorRef jayActor = system.ActorOf(system.DI().Props<UserActor>(), "Jay");
            jayActor.Tell(new User() { Id = 5, Name = "Jay" });
            IActorRef stationCoordinatorActor = system.ActorOf(system.DI().Props<StationCoordinatorActor>(), "StationCoordinatorActor");

            jayActor.Tell(new SendPerformedMessage(699));
            Console.Read();

            jayActor.Tell(new SendPerformedMessage(700));
            Console.Read();

            system.Shutdown();
            system.AwaitTermination();
            Console.WriteLine("Shutdown");
            Console.Read();
        }
예제 #3
0
        public bool Start(HostControl hostControl)
        {
            // Akka
            _actorSystem = ActorSystem.Create("Euricom-Cruise2018-Demo", ConfigurationHelper.GetAkkaConfigurationSettings());

            // Autofac
            _bootStrapper = BootStrapper.Instance;
            _bootStrapper.ConfigureContainer(_actorSystem);

            var dependencyResolver = new AutoFacDependencyResolver(_bootStrapper.Container, _actorSystem);

            // Akka Infrastructure
            var deadLetterLogger = _actorSystem.ActorOf(Props.Create <DeadLetterLogger>(), "deadLetterLogger");
            var addressBook      = _actorSystem.ActorOf(Props.Create(() => new AddressBook(null)), AddressBook.Name);

            Domain.DomainExtensionProvider.Instance.Apply(_actorSystem);
            Projections.ProjectionExtensionProvider.Instance.Apply(_actorSystem);

            System.Threading.Thread.Sleep(5000);

            // Service bus
            _serviceBus = _bootStrapper.Container.Resolve <IBusControl>();
            _serviceBus.Start();

            return(true);
        }
        public void Correct_Message_Received_When_Using_TestChildActor_Test()
        {
            //Setup stuff for this testcase
            Mock <ISomeService> mockSomeService = new Mock <ISomeService>();

            mockSomeService.Setup(x => x.ReturnValue(It.IsAny <string>())).Returns("In a test mock");
            ContainerOperations.Instance.AddExtraModulesCallBack = builder =>
            {
                builder.Register(x => mockSomeService.Object)
                .As <ISomeService>()
                .SingleInstance();
            };

            var system = ContainerOperations.Instance.Container.Resolve <ActorSystem>();
            IDependencyResolver resolver = new AutoFacDependencyResolver(ContainerOperations.Instance.Container, system);
            var mySupervisorActor        = system.ActorOf(system.DI().Props <MySupervisorActor>(), "MySupervisorActor");

            mySupervisorActor.Tell(new StartMessage(), TestActor);


            // Assert
            AwaitCondition(() => HasMessages, TimeSpan.FromSeconds(10));
            var message = ExpectMsg <ChildSucceededMessage>();

            Assert.AreEqual("MyChildActor", message.FromWho);
        }
예제 #5
0
        public static void Main(String[] args)
        {
            var builder = new ContainerBuilder();

            builder
            .RegisterType <WorldContextFactory>()
            .SingleInstance();

            builder.RegisterType <SessionsManagerActor>();
            builder.RegisterType <WorldContextActor>();

            var container = builder.Build();

            ReinitializeDatabase(container.Resolve <WorldContextFactory>());

            var akkaConfig = ConfigurationFactory.ParseString(File.ReadAllText(@"Properties/ServerConfig.hocon"));

            using (var system = ActorSystem.Create("HabitableZoneServer", akkaConfig))
            {
                var propsResolver = new AutoFacDependencyResolver(container, system);

                var mgr = system.ActorOf(
                    system.DI().Props <SessionsManagerActor>(),
                    "sessionsManager");

                var worldContextActor = system.ActorOf(
                    system.DI().Props <WorldContextActor>(),
                    "worldContext");

                Console.ReadLine();
                system.Terminate();
                system.WhenTerminated.Wait();
            }
        }
예제 #6
0
        static void Main(string[] args)
        {
            #region DI things
            var builder = new ContainerBuilder();
            builder.RegisterType<NotificationAnalyzer>().As<INotificationAnalyzer>();
            builder.RegisterType<PushNotificationActor>();
            var container = builder.Build();
            #endregion

            NotificationsActorSystem = ActorSystem.Create("NotificationsActorSystem");
            IDependencyResolver resolver = new AutoFacDependencyResolver(container, NotificationsActorSystem);

            Props notificationActor = Props.Create<NotificationActor>();
            IActorRef pushNotificationActorRef = NotificationsActorSystem.ActorOf(notificationActor, "NotificationActor");

            Console.ReadKey();
            Console.WriteLine("Sending notification");

            pushNotificationActorRef.Tell(new NotificationMessage("*****@*****.**", "New Job"));

            //This is for reaching from lower level actor to high level actor

            //NotificationsActorSystem.ActorSelection("user/NotificationActor/PushNotificationActor")
            //    .Tell(new NotificationMessage("*****@*****.**", "New Job"));

            Console.ReadKey();

            NotificationsActorSystem.Terminate();
        }
예제 #7
0
파일: Program.cs 프로젝트: lulzzz/Dockka
        static void Main(string[] args)
        {
            LogSetup.ConfigureLogger();

            var akkaConfFile = Environment.GetEnvironmentVariable("AKKA_CONF_FILENAME");

            // Get actor configuration
            using (var reader = new StreamReader(File.OpenRead(akkaConfFile ?? "akka.conf")))
            {
                var config = ConfigurationFactory.ParseString(reader.ReadToEnd());

                // Join the cluster
                using (var system = ActorSystem.Create("dockka-system", config))
                {
                    var container = DependencyInjection.ConfigureDependencyInjection();
                    container.RegisterType <AddPersonActor>();
                    var propsResolver = new AutoFacDependencyResolver(container.Build(), system);

                    // Start the actor
                    system.ActorOf(system.DI().Props <AddPersonActor>(), "addPerson");

                    // Wait indefinitely
                    if (string.IsNullOrEmpty(akkaConfFile))
                    {
                        Console.ReadKey();
                    }
                    else
                    {
                        Thread.Sleep(Timeout.Infinite);
                    }
                }
            }
        }
예제 #8
0
        /// <inheritdoc />
        public virtual IEntityActorRef <TActorType> Create(ActorCreationContext context)
        {
            if (context == null)
            {
                throw new ArgumentNullException(nameof(context));
            }

            //Also on the Actor registeration we resolve the lifetimescope
            //and attach it so we don't need to send a dispose message.
            //Do not directly dispose this, needs to be disposed by the Actor stop.
            var   lifetimeScope = Container.BeginLifetimeScope();
            Props props         = new AutoFacDependencyResolver(lifetimeScope, System)
                                  .Create <TActorType>();

            //We cannot use type name, because it's not unique for Actor name
            //I also don't have a good way to seed in unique identifiers.
            //We must rely on Akka to produce a unique key.
            IActorRef actorRef = context.ActorReferenceFactory.ActorOf(props);

            if (actorRef.IsNobody())
            {
                throw new InvalidOperationException($"Failed to create Actor: {typeof(TActorType).Name}. Path: {actorRef.Path}");
            }

            //We adapt this to the type-containing actor type interface.
            return(new EntityActorGenericAdapter <TActorType>(actorRef));
        }
예제 #9
0
        private static void CreateActorSystem()
        {
            // see also https://doc.akka.io/docs/akka/2.5/general/configuration.html#custom-application-conf
            ActorSystem = ActorSystem.Create("FeatureAdminActorSystem",
                                             @"akka {
                stdout - loglevel = WARNING
                    loglevel = WARNING
                    log - config - on - start = on
                    actor {
                            debug {
                                receive = on
                                autoreceive = on
                                lifecycle = on
                                event-stream = on
                                unhandled = on
                                  }
                          }"
                                             );


            //// Setup Autofac
            ContainerBuilder builder = new ContainerBuilder();

//#if (SP2013)
//            builder.RegisterType<Backends.Sp2013.Services.SpDataService>().As<IDataService>();
//#else
//            builder.RegisterType<Backends.Demo.Services.DemoDataService>().As<IDataService>();
//#endif
            builder.RegisterType <Actors.LocationActor>();
            builder.RegisterType <Actors.FeatureDefinitionActor>();
            IContainer container = builder.Build();

            var propsResolver = new AutoFacDependencyResolver(container, ActorSystem);
        }
예제 #10
0
        public void Register(IContainer container, Action <ContainerBuilder> postBuildOperation = null, ActorSystem actorSystem = null)
        {
            if (container == null)
            {
                throw new ArgumentNullException(nameof(container));
            }
            ActorSystem = actorSystem ?? ActorSystem.Create(typeof(ApplicationActorSystem).Name);
            var builder = new ContainerBuilder();

            builder.RegisterAssemblyTypes(AppDomain.CurrentDomain.GetAssemblies()).Where(t => typeof(ReceiveActor).IsAssignableFrom(t));

            foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies())
            {
                foreach (var type in assembly.GetTypes().Where(type => type.IsAssignableTo <ActorBase>()))
                {
                    if (type.IsGenericType)
                    {
                        builder.RegisterGeneric(type);
                    }
                    else
                    {
                        builder.RegisterType(type);
                    }
                }
            }

            postBuildOperation?.Invoke(builder);
            builder.Update(container);
            IDependencyResolver resolver = new AutoFacDependencyResolver(container, ActorSystem);
        }
예제 #11
0
        public static ActorSystem WithContainer(this ActorSystem system, IContainer container)
        {
            // It's the way, how we add dependency injection ot Akka.net
            // ReSharper disable once UnusedVariable
            var propsResolver = new AutoFacDependencyResolver(container, system);

            return(system);
        }
예제 #12
0
        private void ConfigureDependecies()
        {
            var builder = new Autofac.ContainerBuilder();
            builder.RegisterType<Calculator>().As<ICalculator>().SingleInstance();
            builder.RegisterType<CalculatingActor>();
            var container = builder.Build();

            var resolver = new AutoFacDependencyResolver(container, system);
        }
예제 #13
0
        public DuplicateFinder(ILifetimeScope lifetimeScope)
        {
            var actorSystem = ActorSystem.Create("DuplicateFinderActorSystem");

            var autoFacDependencyResolver = new AutoFacDependencyResolver(lifetimeScope, actorSystem);

            _duplicateFinderOrchestratorActor = actorSystem.ActorOf(actorSystem.DI().Props <DuplicateFinderOrchestratorActor>(),
                                                                    nameof(DuplicateFinderOrchestratorActor));
        }
예제 #14
0
        static void Main(string[] args)
        {
            ConfigureAutofac();
            ResolveLogger();

            using (var system = ActorSystem.Create(SystemName))
            {
                Logger.WriteVerbose("Actor system created");

                var resolver = new AutoFacDependencyResolver(Container, system);

                system.ActorOf(resolver.Create <PlaybackActor>(), PlaybackActorName);

                bool running = true;

                do
                {
                    Console.WriteLine("Enter a command and hit Enter");
                    Console.WriteLine("eg 'play <user id> <movie title>'");
                    Console.WriteLine("eg 'stop <user id>'");
                    Console.WriteLine("(enter 'exit' to quit)");

                    var command = Console.ReadLine();

                    if (command.StartsWith("play", StringComparison.InvariantCultureIgnoreCase))
                    {
                        var parts      = command.Split(new[] { ' ' }, 3);
                        var userId     = int.Parse(parts[1]);
                        var movieTitle = parts[2];

                        var message = new PlayMovieMessage(movieTitle, userId);
                        system.ActorSelection($"/user/{PlaybackActorName}/{UserCoordinatorActorName}").Tell(message);
                    }

                    if (command.StartsWith("stop", StringComparison.InvariantCultureIgnoreCase))
                    {
                        var parts  = command.Split(new[] { ' ' }, 2);
                        var userId = int.Parse(parts[1]);

                        var message = new StopMovieMessage(userId);
                        system.ActorSelection($"/user/{PlaybackActorName}/{UserCoordinatorActorName}").Tell(message);
                    }

                    if (command.StartsWith("exit", StringComparison.InvariantCultureIgnoreCase))
                    {
                        running = false;
                    }
                } while (running);

                system.Terminate().GetAwaiter().GetResult();
                Logger.WriteDebug("Actor system terminated");
            }

            Console.WriteLine("Press any key to exit...");
            Console.ReadKey();
        }
예제 #15
0
        static void Main(string[] args)
        {
            var system = ContainerOperations.Instance.Container.Resolve <ActorSystem>();
            IDependencyResolver resolver = new AutoFacDependencyResolver(ContainerOperations.Instance.Container, system);
            var myBinaryAlgorithmActor   = system.ActorOf(system.DI().Props <BinaryAlgorithm>(), "Algorithm");

            myBinaryAlgorithmActor.Tell(new Run <BinaryChromosome>(new AlgorithmConfig <BinaryChromosome>(2, 1, 10000, 5000, 5, new RankingSelection <BinaryChromosome>(), new BinaryCrossover(), new CrossoverConfig(80, 2))));

            Console.ReadKey();
        }
        /// <summary>
        /// Creates a new instance of the <see cref="AutoFacDependencyResolver"/> class
        /// associated with the <see cref="ActorSystem"/>
        /// </summary>
        /// <param name="system">The actor system to plug into</param>
        /// <param name="container">The container used to resolve references</param>
        /// <param name="dependencyResolver">The Autofac dependency resolver instance created</param>
        /// <exception cref="ArgumentNullException">
        /// If the <paramref name="container"/> parameter is null.
        /// </exception>
        public static ActorSystem UseAutofac(this ActorSystem system, ILifetimeScope container, out IDependencyResolver dependencyResolver)
        {
            if (container == null)
            {
                throw new ArgumentNullException(nameof(container));
            }

            dependencyResolver = new AutoFacDependencyResolver(container, system);
            return(system);
        }
예제 #17
0
        private static void SetupActorSystem()
        {
            var _actorSystem = Akka.Actor.ActorSystem.Create("MainActorSystem");

            var propsResolver = new AutoFacDependencyResolver(_container, _actorSystem);

            var _coordinatorActor = _actorSystem.ActorOf(_actorSystem.DI().Props <BrokerCoordinatorActor>(), "brooker-coordinator");

            _actorSystem.Scheduler.ScheduleTellRepeatedly(TimeSpan.FromSeconds(0), TimeSpan.FromSeconds(5), _coordinatorActor, new SendAliveMessage(), _coordinatorActor);
        }
예제 #18
0
        /// <summary>
        /// Starts the service.
        /// </summary>
        public void Start()
        {
            _seekerLogger.Info("Seeker service is starting.");
            _system = ActorSystem.Create("seeker-system");
            SeekerContext.ActorSystem = _system;
            var resolver = new AutoFacDependencyResolver(AutofacContext.Container, _system);

            InitializeActors();
            _seekerLogger.Info("Seeker service started.");
        }
예제 #19
0
        static void Main(string[] args)
        {
            var system = ContainerOperations.Instance.Container.Resolve <ActorSystem>();
            IDependencyResolver resolver = new AutoFacDependencyResolver(ContainerOperations.Instance.Container, system);
            var mySupervisorActor        = system.ActorOf(system.DI().Props <MySupervisorActor>(), "MySupervisorActor");

            mySupervisorActor.Tell(new StartMessage());

            Console.ReadLine();
        }
        public void Start()
        {
            _system = Akka.Actor.ActorSystem.Create(_settings.SystemName);

            // Create the dependency resolver
            IDependencyResolver resolver = new AutoFacDependencyResolver(IoC.Container, _system);

            PingActor = _system.ActorOf(_system.DI().Props <PingActor>(), ActorNames.PingActor);

            Console.WriteLine($"Starting actor system: {_settings.SystemName}");
        }
예제 #21
0
        public Bootstrapper()
        {
            ActorSystem = ActorSystem.Create("AkkaSample");
            var builder = new ContainerBuilder();

            ConfigureActors(builder);

            Container = builder.Build();

            Resolver = new AutoFacDependencyResolver(Container, ActorSystem);
        }
예제 #22
0
 public void Start()
 {
     if (!_initialised)
     {
         var hoconConfig = ConfigurationFactory.ParseString(AkkaHoconConfig.Hocon);
         Container          = _containerBuilder.Build();
         ActorSystem        = ActorSystem.Create("Win10NoUpActorSystem", hoconConfig);
         DependencyResolver = new AutoFacDependencyResolver(Container, ActorSystem);
         RootActor          = ActorSystem.ActorOf(DependencyResolver.Create <TRootActor>(), $"rootActor-{nameof(TRootActor)}");
         _initialised       = true;
     }
 }
예제 #23
0
        private static void CreateActorSystem()
        {
            var builder = new ContainerBuilder();

            builder.RegisterType <DemoPaymentGateway>().As <IPaymentGateway>();
            builder.RegisterType <PaymentWorkerActor>();
            var container = builder.Build();

            ActorSystem = ActorSystem.Create("PaymentProcessing");

            IDependencyResolver resolver = new AutoFacDependencyResolver(container, ActorSystem);
        }
예제 #24
0
        private static void ScheduleBackEndJobCoordinator(AutoFacDependencyResolver propsResolver)
        {
            Log.Information("ScheduleBackEndJobCoordinator {0}", propsResolver.ToString());

            var trackerRouter = system.ActorOf(Props.Create(() => new EmptyRemoteJobActor()).WithRouter(FromConfig.Instance), "trackerroute");

            var backEndJobCoordinationActor = system.ActorOf(Props.Create(() => new BackEndJobCoordinationActor(trackerRouter)),
                "BackEndJobCoordinationActor");

            system.Scheduler
                .ScheduleTellRepeatedly(100, 3000, backEndJobCoordinationActor,
                new JobConfigLoadOrUpdateMessage(), backEndJobCoordinationActor);
        }
예제 #25
0
        private static void Main(string[] args)
        {
            using (var system = ActorSystem.Create("Sample"))
            {
                var resolver = new AutoFacDependencyResolver(CompositeRoot(), system);

                var rootActor = system.ActorOf(system.DI().Props <RootActor>(), "RootActor");

                rootActor.Tell(new Start {
                });

                Console.ReadLine();
            }
        }
        public void It_should_be_delivered()
        {
            //Arrange
            var fromEmailAddress = "*****@*****.**";
            var toEmailAddress   = "*****@*****.**";
            var emailSender      = Container.Resolve <IEmailSender>();
            var system           = ActorSystem.Create("MyActorSystem");
            var propsResolver    = new AutoFacDependencyResolver(Container, system);

            //Act
            emailSender.SendEmail(fromEmailAddress);

            //Assert
            A.CallTo(() => FakeEmailSender.SendEmail(null)).WithAnyArguments().MustHaveHappened();
        }
예제 #27
0
        private static void CreateAndRegisterActors(IContainer container, ActorSystem system)
        {
            var propsResolver = new AutoFacDependencyResolver(container, system);
            system.AddDependencyResolver(propsResolver);

            var builder = new ContainerBuilder();

            var actorSystemAdapter = container.Resolve<IActorSystemAdapter>(new TypedParameter(typeof(ActorSystem), system));
            builder.RegisterInstance(actorSystemAdapter).AsImplementedInterfaces().SingleInstance();
            builder.RegisterInstance(system).AsSelf().SingleInstance();

            builder.Update(container);

            ResolveSingletonActors(actorSystemAdapter);
        }
        public void Start()
        {
            _actorSystem = ActorSystem.Create(ParseActorSystemName(), Logging.GetAkkaLoggingConfig());
            var resolver = new AutoFacDependencyResolver(_iocContainer, _actorSystem);

            _rootActor = _actorSystem.ActorOf(resolver.Create <SourceActor>(), "source");

            string ParseActorSystemName()
            {
                var hyphonated = Regex.Replace(_hostSettings.ServiceName, @"[\s|_]+", "-");
                var filtered   = Regex.Replace(hyphonated, "[^A-z0-9]", string.Empty);

                return(filtered.ToLower());
            }
        }
예제 #29
0
        public void Start()
        {
            Log.Information("Starting System bankka");
            _system = ActorSystem.Create("bankka", GetConfig());

            var options = new DbContextOptionsBuilder <BankkaContext>()
                          .UseInMemoryDatabase("bankka")
                          .Options;

            var container = CreateContainer(options);

            _resolver = new AutoFacDependencyResolver(container, _system);

            _customerClerkActor = _system.ActorOf(_system.DI().Props <CustomerClerkActor>().WithRouter(FromConfig.Instance), "customerClerks");
            _accountClerkRouter = _system.ActorOf(_system.DI().Props <AccountClerkActor>().WithRouter(FromConfig.Instance), "accountClerks");
        }
예제 #30
0
        public void It_should_be_delivered()
        {
            //Arrange
            var fromEmailAddress = "*****@*****.**";
            var toEmailAddress   = "*****@*****.**";

            var system              = ActorSystem.Create("MyActorSystem");
            var propsResolver       = new AutoFacDependencyResolver(Container, system);
            var emailSenderActorRef = system.ActorOf(system.DI().Props <EmailSenderActor>(), "EmailSenderActor");

            //Act
            emailSenderActorRef.Ask(new SendEmailMessage(toEmailAddress), TimeSpan.FromSeconds(3)).Wait();

            //Assert
            A.CallTo(() => FakeEmailSender.SendEmail(null)).WithAnyArguments().MustHaveHappened();
        }
예제 #31
0
        private static void Main(string[] args)
        {
            var builder = new ContainerBuilder();

            builder.RegisterType <SimpleTrendingMovieAnalyzer>().As <ITrendingMovieAnalyzer>();
            builder.RegisterType <TrendingMoviesActor>();
            var container = builder.Build();

            var logger = new LoggerConfiguration()
                         .WriteTo.Seq("http://localhost:5341")
                         .CreateLogger();

            Serilog.Log.Logger = logger;

            MovieStreamingActorSystem = ActorSystem.Create("MovieStreamingActorSystem");
            var resolver = new AutoFacDependencyResolver(container, MovieStreamingActorSystem);

            MovieStreamingActorSystem.ActorOf(Props.Create <PlaybackActor>(), "Playback");


            do
            {
                ShortPause();

                Console.WriteLine();
                Console.WriteLine("enter a command and hit enter");

                var command = Console.ReadLine();

                if (command.StartsWith("play"))
                {
                    int    userId     = int.Parse(command.Split(',')[1]);
                    string movieTitle = command.Split(',')[2];

                    var message = new PlayMovieMessage(movieTitle, userId);
                    MovieStreamingActorSystem.ActorSelection("/user/Playback/UserCoordinator").Tell(message);
                }

                if (command.StartsWith("stop"))
                {
                    int userId = int.Parse(command.Split(',')[1]);

                    var message = new StopMovieMessage(userId);
                    MovieStreamingActorSystem.ActorSelection("/user/Playback/UserCoordinator").Tell(message);
                }
            } while (true);
        }
예제 #32
0
        private static void Main(string[] args)
        {
            var builder = new ContainerBuilder();
            builder.RegisterType<SimpleTrendingMovieAnalyzer>().As<ITrendingMovieAnalyzer>();
            builder.RegisterType<TrendingMoviesActor>();
            var container = builder.Build();

            var logger = new LoggerConfiguration()
                .WriteTo.Seq("http://localhost:5341")
                .CreateLogger();

            Serilog.Log.Logger = logger;

            MovieStreamingActorSystem = ActorSystem.Create("MovieStreamingActorSystem");
            var resolver = new AutoFacDependencyResolver(container, MovieStreamingActorSystem);

            MovieStreamingActorSystem.ActorOf(Props.Create<PlaybackActor>(), "Playback");

            do
            {
                ShortPause();

                Console.WriteLine();
                Console.WriteLine("enter a command and hit enter");

                var command = Console.ReadLine();

                if (command.StartsWith("play"))
                {
                    int userId = int.Parse(command.Split(',')[1]);
                    string movieTitle = command.Split(',')[2];

                    var message = new PlayMovieMessage(movieTitle, userId);
                    MovieStreamingActorSystem.ActorSelection("/user/Playback/UserCoordinator").Tell(message);
                }

                if (command.StartsWith("stop"))
                {
                    int userId = int.Parse(command.Split(',')[1]);

                    var message = new StopMovieMessage(userId);
                    MovieStreamingActorSystem.ActorSelection("/user/Playback/UserCoordinator").Tell(message);
                }

            } while (true);
        }
        static void Main(string[] args)
        {
            var builder = new ContainerBuilder();

            builder.RegisterType <SimpleTrendingMovieAnalyzer>().As <ITrendingMovieAnalyzer>();
            builder.RegisterType <TrendingMoviesActor>();

            var container = builder.Build();

            MovieStreamingActorSystem = ActorSystem.Create("MovieStreamingActorSystem");

            IDependencyResolver resolver = new AutoFacDependencyResolver(container, MovieStreamingActorSystem);

            MovieStreamingActorSystem.ActorOf(Props.Create <PlaybackActor>(), "Playback");

            do
            {
                ShortPause();

                Console.WriteLine();
                Console.ForegroundColor = ConsoleColor.DarkGray;
                ColorConsole.WriteLineGray("enter a command and hit enter");

                var command = Console.ReadLine();

                if (command.StartsWith("play"))
                {
                    int    userId     = int.Parse(command.Split(',')[1]);
                    string movieTitle = command.Split(',')[2];

                    var message = new PlayMovieMessage(movieTitle, userId);
                    MovieStreamingActorSystem.ActorSelection("/user/Playback/UserCoordinator").Tell(message);
                }
                else if (command.StartsWith("stop"))
                {
                    int userId = int.Parse(command.Split(',')[1]);

                    var message = new StopMovieMessage(userId);
                    MovieStreamingActorSystem.ActorSelection("/user/Playback/UserCoordinator").Tell(message);
                }
                else if (command == "exit")
                {
                    Terminate();
                }
            } while (true);
        }
예제 #34
0
        private static void CreateAndRegisterActors(IContainer container, ActorSystem system)
        {
            var propsResolver = new AutoFacDependencyResolver(container, system);

            system.AddDependencyResolver(propsResolver);

            var builder = new ContainerBuilder();

            var actorSystemAdapter = container.Resolve <IActorSystemAdapter>(new TypedParameter(typeof(ActorSystem), system));

            builder.RegisterInstance(actorSystemAdapter).AsImplementedInterfaces().SingleInstance();
            builder.RegisterInstance(system).AsSelf().SingleInstance();

            builder.Update(container);

            ResolveSingletonActors(actorSystemAdapter);
        }
예제 #35
0
        public void It_should_be_delivered()
        {
            //Arrange
            const string fromEmailAddress = "*****@*****.**";
            const string toEmailAddress   = "*****@*****.**";
            const string subject          = "Hello";
            const string body             = "hello";

            var system              = ActorSystem.Create("MyActorSystem");
            var propsResolver       = new AutoFacDependencyResolver(Container, system);
            var emailSenderActorRef = system.ActorOf(system.DI().Props <EmailSenderActor>(), "EmailSenderActor");

            //Act
            emailSenderActorRef.Ask(new SendEmailMessage(toEmailAddress, fromEmailAddress, subject, body), TimeSpan.FromSeconds(3)).Wait();

            //Assert
            A.CallTo(() => FakeEmailSender.SendEmail(toEmailAddress, fromEmailAddress, subject, body)).MustHaveHappened();
        }
예제 #36
0
        static void Main(string[] args)
        {
            // Create and build your container
            var builder = new Autofac.ContainerBuilder();

            //builder.RegisterType<WorkerService>().As<IWorkerService>();
            builder.RegisterType <Worker>();
            var container = builder.Build();

            // Create the ActorSystem and Dependency Resolver
            var system        = ActorSystem.Create("MySystem");
            var propsResolver = new AutoFacDependencyResolver(container, system);

            var worker1Ref = system.ActorOf(system.DI().Props <Worker>(), "Worker1");

            worker1Ref.Tell("参数");

            Console.ReadLine();
        }
예제 #37
0
        private static void WithHashPool()
        {
            var builder = new ContainerBuilder();
            builder.RegisterType<TypedWorker>();

            var container = builder.Build();


            using (var system = ActorSystem.Create("MySystem"))
            {
                var propsResolver =
                    new AutoFacDependencyResolver(container, system);

                var router = system.ActorOf(system.DI().Props<TypedWorker>().WithRouter(FromConfig.Instance), "router1");

                Task.Delay(500).Wait();
                Console.WriteLine("Sending Messages");

                for (var i = 0; i < 5; i++)
                {
                    for (var j = 0; j < 7; j++)
                    {

                        var msg = new TypedActorMessage { Id = j, Name = Guid.NewGuid().ToString() };
                        var ms = new AnotherMessage { Id = j, Name = msg.Name };

                        var envelope = new ConsistentHashableEnvelope(ms, msg.Id);

                        router.Tell(msg);
                        router.Tell(envelope);

                    }
                }
                Console.WriteLine("Hit Enter to close");
                Console.ReadLine();
            }

            
        }
예제 #38
0
        public void Start()
        {
            ServerMetadata.Hostname = Dns.GetHostName();
            ServerMetadata.Port = Port;

            string hocon = File.ReadAllText("YakkaServer.hocon");
            string configHocon = string.Format(hocon, ServerMetadata.Hostname, ServerMetadata.Port);
            var config = ConfigurationFactory.ParseString(configHocon);

            _system = ActorSystem.Create("YakkaServer", config);

            var container = ConfigureAutofacContainer();
            var resolver = new AutoFacDependencyResolver(container, _system);

            //Create root level actors
            _system.ActorOf(Props.Create(() => new ConsoleWriterActor()), ServerActorPaths.ConsoleActor.Name);
            _system.ActorOf(Props.Create(() => new MessagingActor()), ServerActorPaths.MessagingActor.Name);
            _system.ActorOf(Props.Create(() => new ConnectionActor()), ServerActorPaths.ConnectionActor.Name);
            _system.ActorOf(Props.Create(() => new ClientsActor()), ServerActorPaths.ClientsActor.Name);
        }
예제 #39
0
 public ActorSystem Create(string name)
 {
     ActorSystem statsActorSystem = ActorSystem.Create(name);
     IDependencyResolver resolver = new AutoFacDependencyResolver(_lifetimeScope, statsActorSystem);
     return statsActorSystem;
 }