Esempio n. 1
0
        public void HandleEvent(RaceFinished raceFinished)
        {
            var xxx  = Stopwatch.StartNew();
            var race = this._raceRepository.Get(raceFinished.RaceId);

            this.FireTeamRaceFinishedEvents(race, raceFinished.Date);
            StatsPrinter.Print("RaceFinished", xxx.ElapsedMilliseconds);
        }
    public void StartEcoSim()
    {
        statsPrinter = statsPrinterObj.GetComponent <StatsPrinter>();
        statsPrinter.printFirstLine(unityEco);

        // create a copy, and set simulationEco to set the copy, then use the copy for the simulation
        Ecosystem simulationEco = Copier.getEcosystemCopy(unityEco);
        int       localSteps    = steps; // just in case next line causes threading error

        StartThreadedFunction(() => { runSystem(simulationEco, localSteps, Thread.CurrentThread); });
    }
Esempio n. 3
0
        public void HandleEvent(TeamCreated teamCreated)
        {
            var xxx  = Stopwatch.StartNew();
            var race = _raceRepository.Get(teamCreated.RaceId);

            race.RegisterTeam(teamCreated.TeamId);

            _raceRepository.Update(race);

            StatsPrinter.Print("TeamCreated", xxx.ElapsedMilliseconds);
        }
        public void HandleEvent(TeamRaceFinished teamRaceFinished)
        {
            var xxx  = Stopwatch.StartNew();
            var team = this._teamRepository.Get(teamRaceFinished.TeamId);

            team.FinishRace();

            var activeTeam = this._activeTeamRepository.Find(team.Id);

            this._activeTeamRepository.Remove(activeTeam);

            StatsPrinter.Print("TeamRaceFinished", xxx.ElapsedMilliseconds);
        }
Esempio n. 5
0
        public List <TeamStatistics> GetRaceStatistics(Guid raceId)
        {
            var stopWatch = new Stopwatch();

            stopWatch.Start();
            var race = this._raceRepository.Get(raceId);

            stopWatch.Stop();
            //StatsPrinter.Print("GetRace", stopWatch.ElapsedMilliseconds);
            StatsPrinter.AddGetRace(stopWatch.ElapsedMilliseconds);

            stopWatch.Reset();
            stopWatch.Start();
            var lapStatistics = this._lapStatisticRepository.Find(raceId);

            stopWatch.Stop();
            //StatsPrinter.Print("FindLapStatistic", stopWatch.ElapsedMilliseconds);
            StatsPrinter.AddFindLapStatistics(stopWatch.ElapsedMilliseconds);

            var teamsLapStatistics = lapStatistics.GroupBy(x => x.TeamId);

            var teamsStatistics = new List <TeamStatistics>();

            foreach (var teamLapStatistics in teamsLapStatistics)
            {
                var teamId   = teamLapStatistics.Key;
                var teamName = teamLapStatistics.First().TeamName;
                var totalDistanceInMeters = 0;
                var numberOfLaps          = teamLapStatistics.Count();

                foreach (var teamLapStatistic in teamLapStatistics)
                {
                    totalDistanceInMeters += teamLapStatistic.DistanceInMeters;
                }

                var teamStatistics = new TeamStatistics(
                    teamId,
                    teamName,
                    totalDistanceInMeters,
                    numberOfLaps,
                    race.Elapsed());

                teamsStatistics.Add(teamStatistics);
            }

            return(teamsStatistics);
        }
        public void HandleEvent(LapCompleted lapCompleted)
        {
            var xxx  = Stopwatch.StartNew();
            var race = this._raceRepository.Get(lapCompleted.RaceId);

            var lapStatistic = new LapStatistic(
                lapCompleted.RaceId,
                lapCompleted.TeamId,
                lapCompleted.TeamName,
                race.LapDistanceInMeters,
                lapCompleted.LapLength,
                lapCompleted.CompletedOn);

            this._lapStatisticRepository.AddLapStatistic(lapStatistic);

            StatsPrinter.Print("LapCompleted", xxx.ElapsedMilliseconds);
        }
        public void HandleEvent(TeamRaceStarted teamRaceStarted)
        {
            var xxx  = Stopwatch.StartNew();
            var team = this._teamRepository.Get(teamRaceStarted.TeamId);

            team.StartRace(teamRaceStarted.StartDate);

            this._teamRepository.Update(team);

            var activeTeam = new ActiveTeam
            {
                ChipId = team.ChipId,
                TeamId = team.Id
            };

            this._activeTeamRepository.Add(activeTeam);

            StatsPrinter.Print("TeamRaceStarted", xxx.ElapsedMilliseconds);
        }
Esempio n. 8
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);
            }
        }
Esempio n. 9
0
        protected override void ProcessRecord()
        {
            const string DatabaseaName = "relayrace";

            StatsPrinter.Configure(this.UseMongo);

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

            var statisticsManager = container.GetInstance <StatisticManager>();


            for (int i = 0; i < 200; i++)
            {
                var stopWatch = new Stopwatch();
                stopWatch.Start();
                statisticsManager.GetRaceStatistics(this.RaceId);
                stopWatch.Stop();
                //StatsPrinter.Print("GetRaceStatistics", stopWatch.ElapsedMilliseconds);
                StatsPrinter.AddGetRaceStatistics(stopWatch.ElapsedMilliseconds);
            }
            StatsPrinter.DisplaySummary();



            container.Dispose();
            container.EjectAllInstancesOf <IMongoClient>();
            container.EjectAllInstancesOf <IRaceRepository>();
            container.EjectAllInstancesOf <ITeamRepository>();
            container.EjectAllInstancesOf <IActiveTeamRepository>();
            container.EjectAllInstancesOf <ILapStatisticRepository>();
            container.EjectAllInstancesOf <RelayRaceDbContext>();
        }
Esempio n. 10
0
        protected override void ProcessRecord()
        {
            const string DatabaseaName = "relayrace";

            StatsPrinter.Configure(this.UseMongo);

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

            var raceRepository         = container.GetInstance <IRaceRepository>();
            var activeTeamRepository   = container.GetInstance <IActiveTeamRepository>();
            var teamRepository         = container.GetInstance <ITeamRepository>();
            var lapStatisticRepository = container.GetInstance <ILapStatisticRepository>();

            if (this.CleanupDB)
            {
                raceRepository.Cleanup();
                activeTeamRepository.Cleanup();
                teamRepository.Cleanup();
                lapStatisticRepository.Cleanup();
            }

            var random = new Random();

            var races         = new List <Race>();
            var teams         = new List <Team>();
            var activeTeams   = new List <ActiveTeam>();
            var lapStatistics = new List <LapStatistic>();

            this.WriteVerbose("Begin generating data in memory");
            for (var i = 0; i < this.RaceQuantity; i++)
            {
                var chipIds = new List <string>();

                for (var j = 0; j < this.TeamPerRace; j++)
                {
                    chipIds.Add(Guid.NewGuid().ToString());
                }

                var race = new Race(Guid.NewGuid().ToString(), random.Next(3000, 5000), chipIds);

                var raceTeams = new List <Team>();
                foreach (var chipId in chipIds)
                {
                    var team = new Team(Guid.NewGuid().ToString(), race.Id, chipId);
                    raceTeams.Add(team);
                    race.RegisterTeam(team.Id);
                }

                races.Add(race);
                race.StartRace(DateTime.UtcNow);

                foreach (var raceTeam in raceTeams)
                {
                    raceTeam.StartRace(race.Start.Value);
                    var activeTeam = new ActiveTeam {
                        TeamId = raceTeam.Id, ChipId = raceTeam.ChipId
                    };
                    activeTeams.Add(activeTeam);

                    var lastComplete = race.Start.Value;
                    for (var k = 0; k < this.CompletedLapPerTeam; k++)
                    {
                        var secondsToCompleteLap = random.Next(15, 25) * 60;

                        lastComplete = lastComplete.AddSeconds(secondsToCompleteLap);
                        raceTeam.LapCompleted(lastComplete);

                        var lapStatistic = new LapStatistic(
                            raceTeam.RaceId,
                            raceTeam.Id,
                            raceTeam.Name,
                            race.LapDistanceInMeters,
                            new TimeSpan(0, 0, secondsToCompleteLap),
                            lastComplete);

                        lapStatistics.Add(lapStatistic);
                    }

                    teams.Add(raceTeam);
                }
            }

            this.WriteVerbose("End generating data in memory");

            this.WriteVerbose("Begin race persistence");
            raceRepository.BulkCreate(races);
            this.WriteVerbose("End race persistence");
            this.WriteVerbose("Begin team persistence");
            teamRepository.BulkCreate(teams);
            this.WriteVerbose("End team persistence");
            this.WriteVerbose("Begin activeTeam persistence");
            activeTeamRepository.BulkAdd(activeTeams);
            this.WriteVerbose("End activeTeam persistence");
            this.WriteVerbose("Begin lapStatistic persistence");
            lapStatisticRepository.BulkAddLapStatistic(lapStatistics);
            this.WriteVerbose("End lapStatistic persistence");

            Console.WriteLine($"Random Race Id: '{races.Last().Id}'");

            container.Dispose();
            container.EjectAllInstancesOf <IMongoClient>();
            container.EjectAllInstancesOf <IRaceRepository>();
            container.EjectAllInstancesOf <ITeamRepository>();
            container.EjectAllInstancesOf <IActiveTeamRepository>();
            container.EjectAllInstancesOf <ILapStatisticRepository>();
            container.EjectAllInstancesOf <RelayRaceDbContext>();
        }