예제 #1
0
 public FullReactorEvent(IReactorEvent ev, IReactorReference source, long eventID, long replyID)
 {
     Event   = ev;
     Source  = source;
     EventID = eventID;
     ReplyID = replyID;
 }
예제 #2
0
 protected override void OnEvent(IReactorEvent ev)
 {
     if (ev is SendEvent)
     {
         Reply(new ResponseEvent());
     }
 }
예제 #3
0
 protected override void OnEvent(IReactorEvent ev)
 {
     switch (ev)
     {
     case SimpleEvent sev:
         State.EventsProcessed++;
         break;
     }
 }
예제 #4
0
 protected override void OnEvent(IReactorEvent ev)
 {
     switch (ev)
     {
     case SimpleEvent sev:
         Execute(new ResponseCoroutine());
         break;
     }
 }
예제 #5
0
        protected internal RPCWait ReplyRPC(IReactorEvent ev, long replyID)
        {
            var data = new FullReactorEvent(ev, Reference, GetNextEventID(), replyID);
            var wait = new RPCWait(data, EventSource);

            pendingRPCWaits.Add(data.EventID, wait);

            EventSource.Send(data.Source, data.Event, data.EventID, replyID);
            return(wait);
        }
예제 #6
0
        protected internal RPCWait RPC(IReactorReference dest, IReactorEvent ev)
        {
            var data = new FullReactorEvent(ev, Reference, GetNextEventID(), 0);
            var wait = new RPCWait(data, dest);

            pendingRPCWaits.Add(data.EventID, wait);

            dest.Send(data.Source, data.Event, data.EventID, data.ReplyID);

            return(wait);
        }
예제 #7
0
            protected override void OnEvent(IReactorEvent ev)
            {
                switch (ev)
                {
                case Event1 ev1:
                    State.Data = ev1.Data;
                    break;

                default:
                    throw new Exception("Invalid event");
                }
            }
예제 #8
0
            protected override void OnEvent(IReactorEvent ev)
            {
                switch (ev)
                {
                case Event1 ev1:
                    Execute(new Coroutine1(this));
                    break;

                case Event2 ev2:
                    State.ReceivedEvent2 = true;
                    break;

                default:
                    throw new Exception("Invalid event");
                }
            }
예제 #9
0
        protected override void OnEvent(IReactorEvent ev)
        {
            switch (ev)
            {
            case PlayerLogin loginEv:
                OnPlayerLogin(loginEv);
                break;

            case CreatePlayer createPlayer:
                OnCreatePlayer(createPlayer);
                break;

            default:
                throw new ChatException("Invalid event");
            }
        }
예제 #10
0
        protected override void OnEvent(IReactorEvent ev)
        {
            switch (ev)
            {
            case RenamePlayer rev:
                OnRenamePlayer(rev);
                break;

            case InvitePlayerToRoom iev:
                Execute(new InviteCoroutine());
                break;

            case PlayerInternalInvite iiv:
                Reply(new OK());
                break;

            default:
                throw new Exception("Invalid event");
            }
        }
예제 #11
0
 public void Send(IReactorReference source, IReactorEvent ev, long eventID, long replyID)
 {
     reactor.Enqueue(source, ev, eventID, replyID);
 }
예제 #12
0
 protected void Reply(IReactorEvent ev)
 {
     Source.Send(Reactor.Reference, ev, Reactor.GetNextEventID(), ReplyID);
 }
예제 #13
0
 protected override void OnEvent(IReactorEvent ev)
 {
 }
예제 #14
0
 protected RPCWait ReplyRPC(IReactorEvent ev, long replyID)
 {
     return(Reactor.ReplyRPC(ev, replyID));
 }
예제 #15
0
 public void Enqueue(IReactorReference source, IReactorEvent ev, long eventID = 0, long replyID = 0)
 {
     eventQueue.Enqueue(new FullReactorEvent(ev, source, eventID, replyID));
 }
예제 #16
0
 protected RPCWait RPC(IReactorReference dest, IReactorEvent ev)
 {
     return(Reactor.RPC(dest, ev));
 }
예제 #17
0
 protected void Reply(IReactorEvent ev, long replyID)
 {
     EventSource.Send(Reference, ev, GetNextEventID(), replyID);
 }
예제 #18
0
 protected abstract void OnEvent(IReactorEvent ev);
예제 #19
0
 protected override void OnEvent(IReactorEvent ev)
 {
     replyEvents.Enqueue(ev);
 }
예제 #20
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;
            }
        }