Exemple #1
0
        public void A_loopback_registry()
        {
            Address   = new Uri("loopback://localhost/");
            ReceivedA = new Future <A>();

            Registry = ActorRegistryFactory.New(x =>
            {
                x.Remote(r =>
                {
                    r.ListenTo(Address);
                });
            });

            ActorId = Guid.NewGuid();
            Actor   = AnonymousActor.New(inbox =>
            {
                inbox.Loop(loop =>
                {
                    loop.Receive <Message <A> >(message =>
                    {
                        ReceivedA.Complete(message.Body);

                        loop.Continue();
                    });
                });
            });

            Registry.Register(ActorId, Actor);
        }
		public void A_loopback_registry()
		{
			Address = new Uri("loopback://localhost/");
			ReceivedA = new Future<A>();

			Registry = ActorRegistryFactory.New(x =>
			{
				x.Remote(r =>
				{
					r.ListenTo(Address);
				});
			});

			ActorId = Guid.NewGuid();
			Actor = AnonymousActor.New(inbox =>
			{
				inbox.Loop(loop =>
				{
					loop.Receive<Message<A>>(message =>
					{
						ReceivedA.Complete(message.Body);

						loop.Continue();
					});
				});
			});

			Registry.Register(ActorId, Actor);
		}
Exemple #3
0
        public override void Initialize()
        {
            _gameInfo      = Game.Services.GetService <GameInfo>();
            _actorRegistry = Game.Services.GetService <ActorRegistry>();

            _gameInfo.StateChanged += GameInfoOnStateChanged;
        }
Exemple #4
0
        public unsafe void Actors()
        {
            using (var buffer =
                       new ManyToOneRingBuffer(new UnsafeBuffer(1024.Megabytes() + RingBufferDescriptor.TrailerLength)))
            {
                var someBytes = stackalloc byte[1];
                buffer.Write(5, new ByteChunk(someBytes, 1));
                buffer.Read((a, b) => { }, 1);

                var module = AppDomain.CurrentDomain.DefineDynamicAssembly(new AssemblyName("ActorsTestsDynAssembly"),
                                                                           AssemblyBuilderAccess.Run).DefineDynamicModule("main");
                var counter  = new StructSizeCounter();
                var registry =
                    new ActorRegistry(new[]
                                      { Tuple.Create(new ActorDescriptor(new Handler()), (IRingBuffer)buffer, new ActorId(1)) });
                var writer = MessageWriterBuilder.Build(counter, registry.GetMessageTypeId, new[] { typeof(A) }, module);

                var bus = new Bus(new ActorId(2), registry, 20, writer);

                var msg = new A();
                bus.Publish(ref msg);

                // publication is prepared do it

                var howMany    = 200000000;
                var oneMiliion = 1000000;

                using (var scheduler = new RoundRobinThreadAffinedTaskScheduler(4))
                {
                    var wait = new ManualResetEventSlim();
                    var t    = new CancellationToken();

                    var p1                = CreateProducer(wait, t, howMany, bus, scheduler);
                    var p2                = CreateProducer(wait, t, howMany, bus, scheduler);
                    var producentCount    = 2;
                    var totalMessageCount = howMany * producentCount;

                    var worker   = new Worker(totalMessageCount, wait, buffer, t);
                    var consumer = Task.Factory.StartNew(worker.DoWhile, t, TaskCreationOptions.LongRunning, scheduler);

                    GC.Collect(2, GCCollectionMode.Forced);

                    var sw = Stopwatch.StartNew();
                    wait.Set();

                    Task.WaitAll(p1, p2, consumer);

                    sw.Stop();
                    Console.WriteLine(
                        $"{howMany} messages written by each of {producentCount} producers and consumed in {sw.Elapsed}");
                    Console.WriteLine(
                        $"One million in {TimeSpan.FromMilliseconds(sw.Elapsed.TotalMilliseconds*oneMiliion/totalMessageCount)}");
                }
            }
        }
Exemple #5
0
        public void SetUp()
        {
            NopBuffer = Substitute.For <IRingBuffer>();
            ABuffer   = Substitute.For <IRingBuffer>();
            AbBuffer  = Substitute.For <IRingBuffer>();

            Registry = new ActorRegistry(new[]
            {
                Tuple.Create(new ActorDescriptor(new NopHandler()), NopBuffer, NoopId),
                Tuple.Create(new ActorDescriptor(new AHandler()), ABuffer, AId),
                Tuple.Create(new ActorDescriptor(new ABHandler()), AbBuffer, ABId)
            });
        }
Exemple #6
0
        /// <summary>
        /// Initializes a new instance of <see cref="PaddleFactory"/> using the specified services.
        /// </summary>
        /// <param name="services">The services to use when creating new paddles.</param>
        public PaddleFactory(GameServiceContainer services)
        {
            // Get services
            _gameInfo        = services.GetService <GameInfo>();
            _settingsManager = services.GetService <SettingsManager>();
            _inputManager    = services.GetService <InputManager>();
            _actorRegistry   = services.GetService <ActorRegistry>();

            GraphicsDeviceManager graphics = services.GetService <GraphicsDeviceManager>();

            _paddlePixel = new Texture2D(graphics.GraphicsDevice, 1, 1);
            _paddlePixel.FillColor(Color.White);
        }
Exemple #7
0
        public ActorRegistry Build()
        {
            ActorRegistry registry = _builder.Build();

            Serializer serializer = _serializerFactory();

            Scheduler scheduler = _builder.Scheduler;

            var registryNode = new RemoteRegistryNode(registry, _listenUri, _fiberFactory, scheduler, serializer);

            registry.AddNode(registryNode);

            return(registry);
        }
Exemple #8
0
        public MainGame()
        {
            Window.Title = string.Format("{0} v{1}", StringResources.GameTitle, Program.AssemblyName.Version.ToString(3));

            _graphicsDeviceManager = new GraphicsDeviceManager(this);

            _settingsManager = new SettingsManager(this, new JsonFileSettingsStorage(SettingsConstants.SettingsFilePath));
            _settingsManager.SettingsApplied += SettingsManagerOnSettingsApplied;

            _audioManager = new AudioManager(_settingsManager, Content);
            _gameInfo     = new GameInfo();

            _inputManager  = new InputManager();
            _actorRegistry = new ActorRegistry();

            Content.RootDirectory = "Content";

            CreateComponents();
        }
Exemple #9
0
        public unsafe void Setup()
        {
            _buffer = new ManyToOneRingBuffer(new UnsafeBuffer(1024.Megabytes() + RingBufferDescriptor.TrailerLength));
            var someBytes = stackalloc byte[1];

            _buffer.Write(5, new ByteChunk(someBytes, 1));
            _buffer.Read((a, b) => { }, 1);

            var module = AppDomain.CurrentDomain.DefineDynamicAssembly(
                new AssemblyName("ActorsTestsDynAssembly"),
                AssemblyBuilderAccess.Run).DefineDynamicModule("main");
            var counter  = new StructSizeCounter();
            var registry =
                new ActorRegistry(
                    new[]
                    { Tuple.Create(new ActorDescriptor(new Handler()), (IRingBuffer)_buffer, new ActorId(1)) });
            var writer = MessageWriterBuilder.Build(counter, registry.GetMessageTypeId, new[] { typeof(A) }, module);

            _bus = new Bus(new ActorId(2), registry, 20, writer);
        }
Exemple #10
0
        public void Run()
        {
            Trace.Listeners.Add(new ConsoleTraceListener());

            const string remoteAddress = "rm://234.0.0.7:40001/";

            Guid id = CombGuid.Generate();

            ActorRegistry registry = ActorRegistryFactory.New(x =>
            {
                x.Remote(r => r.ListenTo(remoteAddress));
            });

            ActorRef server = AnonymousActor.New(inbox =>
            {
                inbox.Receive <Response <Hello> >(message =>
                {
                    Console.WriteLine("Hi!");
                    Console.WriteLine("Request ID: " + message.RequestId);
                });
            });


            registry.Register(id, server);

            var actorAddress = new ActorUrn(remoteAddress, id);

            registry.Select(actorAddress, actor =>
            {
                actor.Send <Response <Hello> >(new ResponseImpl <Hello>(new Hello
                {
                    MyNameIs = "Joe",
                }, "27"));
            }, () => {});

            ThreadUtil.Sleep(5.Seconds());

            registry.Shutdown();
        }
        public void Adding_an_actor_to_a_registry()
        {
            _auctionFactory = ActorFactory.Create(inbox => new Auction(inbox));

            _auctionId = CombGuid.Generate();

            ActorRef auction = _auctionFactory.GetActor();

            ActorRegistry registry = ActorRegistryFactory.New(x =>
            {
                //x.Remote(r => r.ListenTo("rm://234.0.0.7:40001"));
            });

            registry.Register(_auctionId, auction);

            _response = new Future <Response <Bid> >();

            AnonymousActor.New(inbox =>
            {
                registry.Request <Bid>(new BidImpl(27.42m),
                                       header => { header.DestinationAddress = new ActorUrn(_auctionId); }, inbox)
                .Receive <Response <Bid> >(x => _response.Complete);
            });

            _response.WaitUntilCompleted(5.Seconds()).ShouldBeTrue();

            // need to proxy the channel with headers somehow...

            // untyped channel => channel mapper -> actor instance

            // DestinationAddress -> set by outbound channel proxy on message<>
            // SourceAddress -> set by outbound channel proxy when available (not likely)
            // ResponseAddress -> set by outbound channel for ResponseChannel on Request to map to channel
            // Id -> system assigned id
            // DestinationAddress = urn:actor:554FC958-4661-4FE9-94F5-21D190417BCC
        }
Exemple #12
0
		public ActorRegisteredImpl(ActorRegistry registry, ActorRef actor, Guid key)
		{
			Registry = registry;
			Instance = actor;
			Key = key;
		}
Exemple #13
0
 public ActorRegistryHeaderChannel(ActorRegistry registry)
 {
     _registry = registry;
     _match    = new ThreadSingleton <MatchHeaderCallback, MatchHeader>(() => new MatchHeaderImpl());
 }
Exemple #14
0
		public RemoteRegistryNode(ActorRegistry registry, Uri listenUri, FiberFactory fiberFactory, Scheduler scheduler,
		                          Serializer serializer)
		{
			_nodes = new RemoteNodeCollection(listenUri, registry, fiberFactory, scheduler, serializer);
			_actors = new Dictionary<string, RemoteActor>();
		}
Exemple #15
0
 public RemoteRegistryNode(ActorRegistry registry, Uri listenUri, FiberFactory fiberFactory, Scheduler scheduler,
                           Serializer serializer)
 {
     _nodes  = new RemoteNodeCollection(listenUri, registry, fiberFactory, scheduler, serializer);
     _actors = new Dictionary <string, RemoteActor>();
 }
Exemple #16
0
 public ActorUnregisteredImpl(ActorRegistry registry, ActorRef actor, Guid key)
 {
     Registry = registry;
     Instance = actor;
     Key      = key;
 }
Exemple #17
0
 public BasicAiPaddle(GameInfo gameInfo, Texture2D texture, ActorRegistry actorRegistry, PaddleSide paddleSide, Vector2 size, Vector2 boundsPadding, float speed)
     : base(gameInfo, texture, paddleSide, size, boundsPadding, speed)
 {
     _actorRegistry = actorRegistry;
 }