예제 #1
0
        static void Main(string[] args)
        {
            Address address = new Address(args[0]);

            ActorSystem system = new ActorSystem();
            TcpServer   host   = new TcpServer(address.HostName, address.Port, system);

            host.Start();

            Resolver  resolver  = new Resolver();
            Harvester harvester = new Harvester();

            RouterActor router = new RouterActor();

            ActorRef resolverref   = system.ActorOf(resolver, "resolver");
            ActorRef downloaderref = system.ActorOf(router, "downloader");
            ActorRef harvesterref  = system.ActorOf(harvester, "harvester");

            for (int k = 1; k <= 10; k++)
            {
                Downloader downloader = new Downloader();
                downloader.Harvester = harvesterref;
                ActorRef dlref = system.ActorOf(downloader);
                router.Register(dlref);
            }

            resolver.Downloader = downloaderref;
            harvester.Resolver  = resolverref;

            foreach (var arg in args.Skip(1))
            {
                resolverref.Tell(arg);
            }
        }
예제 #2
0
        static void Main(string[] args)
        {
            ActorSystem system = new ActorSystem();

            Resolver resolver = new Resolver();
            //Downloader downloader = new Downloader();
            Harvester harvester = new Harvester();

            RouterActor router = new RouterActor();

            ActorRef resolverref = system.ActorOf(resolver, "resolver");
            //ActorRef downloaderref = system.ActorOf(downloader, "downloader");
            ActorRef downloaderref = system.ActorOf(router, "downloader");
            ActorRef harvesterref  = system.ActorOf(harvester, "harvester");

            for (int k = 1; k <= 10; k++)
            {
                Downloader downloader = new Downloader();
                downloader.Harvester = harvesterref;
                ActorRef dlref = system.ActorOf(downloader);
                router.Register(dlref);
            }

            resolver.Downloader = downloaderref;
            //downloader.Harvester = harvesterref;
            harvester.Resolver = resolverref;

            foreach (var arg in args)
            {
                resolverref.Tell(arg);
            }
        }
예제 #3
0
        static void Main(string[] args)
        {
            Address address      = new Address(args[0]);
            string  localaddress = address.ToString();

            ActorSystem system = new ActorSystem();
            TcpServer   host   = new TcpServer(address.HostName, address.Port, system);

            host.Start();

            Address serveraddress = new Address(args[1]);
            string  remoteaddress = serveraddress.ToString();

            Harvester   harvester = new Harvester();
            RouterActor router    = new RouterActor();

            ActorRef resolverref         = system.ActorSelect(remoteaddress + "/resolver");
            ActorRef remotedownloaderref = system.ActorSelect(remoteaddress + "/downloader");
            ActorRef harvesterref        = system.ActorOf(harvester, "harvester");

            harvester.Resolver = resolverref;

            for (int k = 1; k <= 10; k++)
            {
                Downloader downloader = new Downloader();
                downloader.Harvester = harvesterref;
                ActorRef dlref = system.ActorOf(downloader);
                remotedownloaderref.Tell(new RegisterActorMessage()
                {
                    ActorPath = localaddress + dlref.Path.ToString()
                });
            }
        }
예제 #4
0
        public void CreateRouterAndSendMessageToActor()
        {
            ActorSystem system = new ActorSystem();

            int             total    = 0;
            EventWaitHandle wait     = new AutoResetEvent(false);
            Actor           actor    = new LambdaActor(c => { total += (int)c; wait.Set(); });
            var             actorref = system.ActorOf(actor, "myactor");

            var router = new RouterActor();

            router.Register(actorref);
            var routerref = system.ActorOf(router, "myrouter");

            routerref.Tell(3);

            Assert.IsTrue(wait.WaitOne(1000));
            Assert.AreEqual(3, total);

            system.Shutdown();
        }
예제 #5
0
        public void CreateRouterAndSendMessageToActors()
        {
            ActorSystem system = new ActorSystem();

            int             total = 0;
            EventWaitHandle wait  = new AutoResetEvent(false);

            var router    = new RouterActor();
            var routerref = system.ActorOf(router, "myrouter");

            for (int k = 0; k < 100; k++)
            {
                Actor actor = new LambdaActor(c =>
                {
                    lock (system)
                    {
                        total += (int)c;
                    }

                    if (total >= 10)
                    {
                        wait.Set();
                    }
                });

                var actorref = system.ActorOf(actor);
                router.Register(actorref);
            }

            routerref.Tell(1);
            routerref.Tell(2);
            routerref.Tell(3);
            routerref.Tell(4);

            Assert.IsTrue(wait.WaitOne(1000));
            Assert.AreEqual(10, total);

            system.Shutdown();
        }