Exemplo n.º 1
0
        public void EndRace(Guid raceId, DateTime time)
        {
            var race = this._raceRepository.Get(raceId);

            race.EndRace(time);

            Parallel.ForEach(race.Events, (domainEvent) =>
            {
                var sender = new DomainEventSender();
                sender.Send(domainEvent);
            });
        }
Exemplo n.º 2
0
        public void AddTeam(
            string name,
            Guid raceId,
            string chipId)
        {
            // TODO chipId must be in allowed in race

            var team = new Team(name, raceId, chipId);

            this._teamRepository.Create(team);

            Parallel.ForEach(team.Events, (domainEvent) =>
            {
                var sender = new DomainEventSender();
                sender.Send(domainEvent);
            });
        }
Exemplo n.º 3
0
        public void LapCompleted(string chipId, DateTime time)
        {
            var activeTeam = this._activeTeamRepository.Find(chipId);
            var team       = this._teamRepository.Get(activeTeam.TeamId);

            var laplength = team.LapCompleted(time);

            var sender = new DomainEventSender();

            sender.Send(new LapCompleted
            {
                CompletedOn = time,
                LapLength   = laplength,
                RaceId      = team.RaceId,
                TeamId      = team.Id,
                TeamName    = team.Name
            });
        }
Exemplo n.º 4
0
        private void FireTeamRaceFinishedEvents(Race race, DateTime raceFinished)
        {
            var teamLapStarted = new List <DomainEvent>();

            foreach (var teamId in race.TeamIds)
            {
                teamLapStarted.Add(
                    new TeamRaceFinished
                {
                    Date   = raceFinished.Date,
                    TeamId = teamId
                });
            }

            Parallel.ForEach(teamLapStarted, (domainEvent) =>
            {
                var sender = new DomainEventSender();
                sender.Send(domainEvent);
            });
        }
Exemplo n.º 5
0
        static void Main(string[] args)
        {
            const bool   UseMongo      = true;
            const string DatabaseaName = "relayrace";

            StatsPrinter.Configure(UseMongo);

            var container = new Container(x =>
                                          x.IncludeRegistry(
                                              new CmdletRegistry(
                                                  Connection.MongoDbConnectionString,
                                                  Connection.SqlConnectionString,
                                                  DatabaseaName,
                                                  UseMongo)));

            var eventDispatcher = container.GetInstance <EventDispatcher>();

            while (true)
            {
                var fetcher = new DomainEventFetcher();
                var result  = fetcher.Fetch();

                if (result != null)
                {
                    try
                    {
                        eventDispatcher.DispatchEvents(new List <DomainEvent> {
                            result
                        });
                    }
                    catch (Exception e)
                    {
                        var sender = new DomainEventSender();
                        sender.Send(result);
                    }
                }

                Thread.Sleep(200);
            }
        }