Exemplo n.º 1
0
        public async Task RPC()
        {
            var reactorRepo     = ReactorRepository.CreateLocal(1);
            var responseReactor = new ResponseReactor();

            reactorRepo.Add(responseReactor);
            var requestReactor = new RPCReactor(reactorRepo.Resolve(responseReactor));

            reactorRepo.Add(requestReactor);

            await Task.Delay(100);

            Assert.True(requestReactor.State.ResponseGained);
        }
Exemplo n.º 2
0
        public async Task TwoReactors_Threads()
        {
            var repo     = ReactorRepository.CreateLocal(1, 0.01f, useTasks: false);
            var reactors = new ReactorBase[] { new Reactor1("1"),
                                               new Reactor1("2") };

            repo.Add(reactors[0]);
            repo.Add(reactors[1]);

            for (int i = 0; i < 20; i++)
            {
                reactors[i % 2].Enqueue(null, new Event1(i.ToString()));
                await Task.Delay(10);
            }

            await Task.Delay(30);

            Assert.Equal("18", ((Reactor1)reactors[0]).State.Data);
            Assert.Equal("19", ((Reactor1)reactors[1]).State.Data);
        }
Exemplo n.º 3
0
        static void Main(string[] args)
        {
            // Createa a global reactor repository
            ReactorRepository.CreateGlobal(2, useTasks: false);
            ReactorRepository.Global.Add(new PlayerDiscoveryReactor());

            // Reactor event sink is useful for handling events outside reactor (test cases)
            var source = new ReactorEventSink("");

            ReactorRepository.AddToGlobal(source);

            var discoveryReference = ReactorRepository.Global.Resolve <PlayerDiscoveryReactor>("");
            var sourceReference    = ReactorRepository.Global.Resolve <ReactorEventSink>("");

            discoveryReference.Send(sourceReference,
                                    new CreatePlayer(
                                        username: "******",
                                        firstName: "Ziga",
                                        lastName: "Osolin",
                                        password: "******")
                                    );

            Thread.Sleep(100);

            IReactorEvent ev = source.Dequeue();

            switch (ev)
            {
            case CreatePlayerResponse resp:
                Console.WriteLine("Created player " + resp.PlayerReactor.Reference);
                break;

            default:
                Console.WriteLine("Error");
                return;
            }

            // We do a login
            discoveryReference.Send(sourceReference,
                                    new PlayerLogin("nihum", "mypassword")
                                    );

            Thread.Sleep(100);

            ev = source.Dequeue();
            IReactorReference playerReference;

            switch (ev)
            {
            case PlayerLoginResponse resp:
                Console.WriteLine("Login player " + resp.PlayerReactor.Reference);
                playerReference = resp.PlayerReactor;
                break;

            default:
                Console.WriteLine("Error");
                return;
            }

            playerReference.Send(sourceReference,
                                 new RenamePlayer("Ziga2", "Osolin", "Nihum")
                                 );

            Thread.Sleep(100);

            ev = source.Dequeue();
            switch (ev)
            {
            case OK resp:
                Console.WriteLine("Renamed player");
                break;

            default:
                Console.WriteLine("Error");
                return;
            }

            // We create one more player
            discoveryReference.Send(sourceReference,
                                    new CreatePlayer(
                                        username: "******",
                                        firstName: "Ziga2",
                                        lastName: "Osolin",
                                        password: "******")
                                    );

            Thread.Sleep(100);

            ev = source.Dequeue();
            IReactorReference otherPlayerReference;

            switch (ev)
            {
            case CreatePlayerResponse resp:
                Console.WriteLine("Created player " + resp.PlayerReactor.Reference);
                otherPlayerReference = resp.PlayerReactor;
                break;

            default:
                Console.WriteLine("Error");
                return;
            }

            playerReference.Send(sourceReference,
                                 new InvitePlayerToRoom(
                                     otherPlayerReference,
                                     null)
                                 );

            Thread.Sleep(1000);

            ev = source.Dequeue();
            switch (ev)
            {
            case OK resp:
                Console.WriteLine("Invited player");
                break;

            default:
                Console.WriteLine("Error");
                return;
            }
        }