public FullReactorEvent(IReactorEvent ev, IReactorReference source, long eventID, long replyID) { Event = ev; Source = source; EventID = eventID; ReplyID = replyID; }
protected override void OnEvent(IReactorEvent ev) { if (ev is SendEvent) { Reply(new ResponseEvent()); } }
protected override void OnEvent(IReactorEvent ev) { switch (ev) { case SimpleEvent sev: State.EventsProcessed++; break; } }
protected override void OnEvent(IReactorEvent ev) { switch (ev) { case SimpleEvent sev: Execute(new ResponseCoroutine()); break; } }
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); }
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); }
protected override void OnEvent(IReactorEvent ev) { switch (ev) { case Event1 ev1: State.Data = ev1.Data; break; default: throw new Exception("Invalid event"); } }
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"); } }
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"); } }
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"); } }
public void Send(IReactorReference source, IReactorEvent ev, long eventID, long replyID) { reactor.Enqueue(source, ev, eventID, replyID); }
protected void Reply(IReactorEvent ev) { Source.Send(Reactor.Reference, ev, Reactor.GetNextEventID(), ReplyID); }
protected override void OnEvent(IReactorEvent ev) { }
protected RPCWait ReplyRPC(IReactorEvent ev, long replyID) { return(Reactor.ReplyRPC(ev, replyID)); }
public void Enqueue(IReactorReference source, IReactorEvent ev, long eventID = 0, long replyID = 0) { eventQueue.Enqueue(new FullReactorEvent(ev, source, eventID, replyID)); }
protected RPCWait RPC(IReactorReference dest, IReactorEvent ev) { return(Reactor.RPC(dest, ev)); }
protected void Reply(IReactorEvent ev, long replyID) { EventSource.Send(Reference, ev, GetNextEventID(), replyID); }
protected abstract void OnEvent(IReactorEvent ev);
protected override void OnEvent(IReactorEvent ev) { replyEvents.Enqueue(ev); }
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; } }