Beispiel #1
0
 static void Main(string[] args)
 {
     if (_createTablesOnStartup)
     {
         try
         {
             TrackerDBContext          db        = new TrackerDBContext();
             RelationalDatabaseCreator dbCreator = (RelationalDatabaseCreator)db.Database.GetService <IDatabaseCreator>();
             dbCreator.CreateTables();
         }
         catch (Exception ex)
         {
             Console.WriteLine("Some of the tables already exist, consider changing CreateTablesOnStartup to false from App.config");
         }
     }
     ResultsTask.Start();
     ImagesTask.Start();
     PreliveTask.Start();
     TeamsTask.Start();
     if (ConfigurationManager.AppSettings["TrackLive"] == "true")
     {
         LiveTask.Start();
     }
     while (true)
     {
     }
 }
Beispiel #2
0
        public static List <T> FilterAlreadySentEvents <T>(TrackerDBContext db, List <T> rows)
        {
            if (rows is List <Results> )
            {
                List <Results> results = new List <Results>();
                rows.ForEach(ev => results.Add(ev as Results));
                List <Results> filteredResults = new List <Results>();
                var            dbResults       = db.Results.ToList();
                foreach (var result in results)
                {
                    bool eligableEvent = true;
                    foreach (var dbResult in dbResults)
                    {
                        if (result.LeagueName == dbResult.LeagueName &&
                            result.HomeTeam == dbResult.HomeTeam &&
                            result.AwayTeam == dbResult.AwayTeam &&
                            result.GameDate.ToString() == dbResult.GameDate.ToString())
                        {
                            eligableEvent = false;
                            break;
                        }
                    }
                    if (eligableEvent)
                    {
                        filteredResults.Add(result);
                    }
                }
                return(filteredResults as List <T>);
            }

            else if (rows is List <Prelive> )
            {
                List <Prelive> preliveEvents = new List <Prelive>();
                rows.ForEach(ev => preliveEvents.Add(ev as Prelive));
                List <Prelive> filteredPreliveEvents = new List <Prelive>();
                var            dbPreliveEvents       = db.Prelive.ToList();
                foreach (var prelive in preliveEvents)
                {
                    bool eligableEvent = true;
                    foreach (var dbPrelive in dbPreliveEvents)
                    {
                        if (prelive.LeagueName == dbPrelive.LeagueName &&
                            prelive.HomeTeam == dbPrelive.HomeTeam &&
                            prelive.AwayTeam == dbPrelive.AwayTeam &&
                            prelive.GameDate.ToString() == dbPrelive.GameDate.ToString())
                        {
                            eligableEvent = false;
                            break;
                        }
                    }
                    if (eligableEvent)
                    {
                        filteredPreliveEvents.Add(prelive);
                    }
                }
                return(filteredPreliveEvents as List <T>);
            }
            return(rows);
        }
        public static void TeamsWorkerInit(TimeSpan TeamsSamplePeriodInMinutes)
        {
            while (true)
            {
                TrackerDBContext dbContext   = new TrackerDBContext();
                var            teamsFromDb   = dbContext.Team.ToList();
                var            playersFromDb = dbContext.Player.ToList();
                GamesOfLegends lol           = new GamesOfLegends();
                List <Player>  players       = new List <Player>();
                lol.GetLinks();
                var teams = lol.GetTeams();
                if (teams.Count > 0)
                {
                    dbContext.Team.RemoveRange(teamsFromDb);
                    dbContext.Team.AddRange(teams);
                    var champsStatsFromDb = dbContext.ChampionStat.ToList();
                    dbContext.RemoveRange(champsStatsFromDb);

                    Console.WriteLine($"Finished Getting Teams at {DateTime.Now.ToShortTimeString()}." +
                                      $" {teams.Count} teams added to Db.");

                    players = lol.GetPlayers(teams);
                    dbContext.Player.RemoveRange(playersFromDb);
                    dbContext.Player.AddRange(players);

                    dbContext.SaveChanges();

                    var champStats            = lol.GetChampionStats();
                    List <ChampionStat> stats = new List <ChampionStat>();
                    dbContext.SaveChanges();
                    foreach (var champ in champStats)
                    {
                        foreach (var stat in champ.Value)
                        {
                            foreach (var player in players)
                            {
                                if (champ.Key == player.Nickname)
                                {
                                    stat.PlayerId = player.PlayerId;
                                    stats.Add(stat);
                                }
                            }
                        }
                    }
                    dbContext.AddRange(stats);
                    dbContext.SaveChanges();


                    Console.WriteLine($"Finished Getting Players and Champion stats at {DateTime.Now.ToShortTimeString()}." +
                                      $" {players.Count} players added to Db.");
                }
                Console.WriteLine($"Sampling Teams and Players again in {TeamsSamplePeriodInMinutes.Hours} hours and {TeamsSamplePeriodInMinutes.Minutes} minutes");
                Thread.Sleep(TeamsSamplePeriodInMinutes);
            }
        }
 public static void ResultsWorkerInit(TimeSpan ResultsSamplePeriod)
 {
     while (true)
     {
         TrackerDBContext dbContext = new TrackerDBContext();
         EsportsLiveScore.GetNewLinks();
         var results         = EsportsLiveScore.GetResultEvents();
         var filteredResults = Utilities.FilterAlreadySentEvents(dbContext, results);
         dbContext.Results.AddRange(filteredResults);
         Utilities.RemoveUnwatedEventsFromDb(ref dbContext);
         dbContext.SaveChanges();
         Console.WriteLine($"Finished Getting Results at {DateTime.Now.ToShortTimeString()}. New Results Added to db: {filteredResults.Count}. Sampling Results again in {ResultsSamplePeriod.Hours} hours and {ResultsSamplePeriod.Minutes} minutes");
         Thread.Sleep(ResultsSamplePeriod);
     }
 }
Beispiel #5
0
 public static void PreliveWorkerInit(TimeSpan PreliveSamplePeriod)
 {
     while (true)
     {
         while (EsportsLiveScore.LinksForLeagues == null || EsportsLiveScore.LinksForLeagues.Count == 0)
         {
             Thread.Sleep(30000);
         }
         TrackerDBContext dbContext = new TrackerDBContext();
         var preliveEvents          = EsportsLiveScore.GetPreliveEvents();
         var filteredEvents         = Utilities.FilterAlreadySentEvents(dbContext, preliveEvents);
         dbContext.Prelive.AddRange(filteredEvents);
         dbContext.SaveChanges();
         Console.WriteLine($"Finished Getting Prelive Events at {DateTime.Now.ToShortTimeString()}." +
                           $" {filteredEvents.Count} events added to Db. " +
                           $"Sampling Prelive again in {PreliveSamplePeriod.Hours} hours and {PreliveSamplePeriod.Minutes} minutes");
         Thread.Sleep(PreliveSamplePeriod);
     }
 }
Beispiel #6
0
        public static void RemoveUnwatedEventsFromDb(ref TrackerDBContext dbContext)
        {
            var resultsToRemove = new List <Results>();

            foreach (var res in dbContext.Results)
            {
                if (res.GameDate < DateTime.UtcNow.AddDays(-30))
                {
                    resultsToRemove.Add(res);
                }
            }
            dbContext.RemoveRange(resultsToRemove);
            var preliveEventsToRemove = new List <Prelive>();

            foreach (var pre in dbContext.Prelive)
            {
                if (pre.GameDate < DateTime.UtcNow)
                {
                    preliveEventsToRemove.Add(pre);
                }
            }
            dbContext.RemoveRange(preliveEventsToRemove);
        }
Beispiel #7
0
 public Mapping(TrackerDBContext context)
 {
     Context = context;
 }
Beispiel #8
0
 public LeagueOfLegendsController(TrackerDBContext db, IConfiguration config, IMemoryCache memoryCache)
 {
     this.db       = db;
     Configuration = config;
     _cache        = memoryCache;
 }
Beispiel #9
0
 public TicketsController(TrackerDBContext db)
 {
     _db = db;
 }
 public CounterStrikeController(IMemoryCache memoryCache, TrackerDBContext db, IConfiguration config)
 {
     this.db       = db;
     Configuration = config;
     _cache        = memoryCache;
 }
 public UsersController(TrackerDBContext db)
 {
     _db = db;
 }
Beispiel #12
0
        public static Sport CreateSportCacheById(int sportId, TrackerDBContext db, IConfiguration Configuration)
        {
            MappingServiceUrl = Configuration.GetSection("MappingServiceUrl").Value;
            Sport sport = new Sport();
            ConcurrentDictionary <string, HashSet <Results> > ResultEvents  = new ConcurrentDictionary <string, HashSet <Results> >();
            ConcurrentDictionary <string, HashSet <Prelive> > PreliveEvents = new ConcurrentDictionary <string, HashSet <Prelive> >();
            var results = db.Results.ToList();

            Parallel.ForEach(results, (result) =>
            {
                if (result.SportId == sportId)
                {
                    if (ResultEvents.ContainsKey(result.LeagueName))
                    {
                        lock (_lock)
                        {
                            ResultEvents[result.LeagueName].Add(result);
                        }
                    }
                    else
                    {
                        lock (_lock)
                        {
                            ResultEvents.TryAdd(result.LeagueName, new HashSet <Results>()
                            {
                                result
                            });
                        }
                    }
                }
            });
            sport.ResultsEvents = ResultEvents;

            var preliveEventsFromDb = db.Prelive.ToList();

            Parallel.ForEach(preliveEventsFromDb, (preliveEvent) =>
            {
                if (preliveEvent.SportId == sportId)
                {
                    if (PreliveEvents.ContainsKey(preliveEvent.LeagueName))
                    {
                        lock (_lock)
                        {
                            PreliveEvents[preliveEvent.LeagueName].Add(preliveEvent);
                        }
                    }
                    else
                    {
                        lock (_lock)
                        {
                            PreliveEvents.TryAdd(preliveEvent.LeagueName, new HashSet <Prelive>()
                            {
                                preliveEvent
                            });
                        }
                    }
                }
            });
            sport.PreliveEvents = PreliveEvents;
            sport.LastUpdate    = DateTime.UtcNow;

            var teamsFromDb  = db.Team.ToList();
            var players      = db.Player.ToList();
            var playersToAdd = new List <Player>();

            foreach (var player in players)
            {
                if (player.SportId != sportId)
                {
                    continue;
                }
                bool shouldAddPlayer = true;
                foreach (var playerToAdd in playersToAdd)
                {
                    if (player.Nickname == playerToAdd.Nickname)
                    {
                        shouldAddPlayer = false;
                        break;
                    }
                }
                if (shouldAddPlayer)
                {
                    playersToAdd.Add(player);
                }
            }
            sport.Players = playersToAdd;
            ConcurrentDictionary <string, HashSet <Team> > teams = new ConcurrentDictionary <string, HashSet <Team> >();

            Parallel.ForEach(teamsFromDb, (team) =>
            {
                if (team.SportId == sportId)
                {
                    if (teams.ContainsKey(team.Region))
                    {
                        lock (_lock)
                        {
                            teams[team.Region].Add(team);
                        }
                    }
                    else
                    {
                        lock (_lock)
                        {
                            var masterLeague = GetMasterLeagueFromMappingService
                                                   ($"{MappingServiceUrl}/Mapping/GetLeague", sportId, team.Name.ToLowerInvariant().Contains("academy") ?
                                                   $"{team.Region}Academy" : team.Region).Result;
                            if (masterLeague == null || masterLeague.Equals("Bad POST params") || masterLeague.Equals("Could Not Locate League"))
                            {
                                teams.TryAdd(team.Region, new HashSet <Team>()
                                {
                                    team
                                });
                            }
                            else
                            {
                                team.Region = masterLeague;
                                if (teams.ContainsKey(masterLeague))
                                {
                                    teams[team.Region].Add(team);
                                }
                                else
                                {
                                    teams.TryAdd(team.Region, new HashSet <Team>()
                                    {
                                        team
                                    });
                                }
                            }
                        }
                    }
                }
            });
            sport.TeamsInLeague = teams;
            ConcurrentDictionary <string, string> images = new ConcurrentDictionary <string, string>();
            DirectoryInfo d = new DirectoryInfo(Configuration.GetSection("ImagePathReader").Value);

            FileInfo[] files = d.GetFiles("*.png");
            var        defaultImageByteArray = System.IO.File.ReadAllBytes
                                                   (Configuration.GetSection("ImagePathReader").Value + DefaultImagesById[sportId] + ".png");
            var defaultImageString = Convert.ToBase64String(defaultImageByteArray);

            images.TryAdd("default", defaultImageString);
            foreach (var image in files)
            {
                var byteArray = System.IO.File.ReadAllBytes
                                    (image.FullName);
                var imageString = Convert.ToBase64String(byteArray);
                images.TryAdd(image.Name.Replace(image.Extension, "").ToLowerInvariant(), imageString);
                sport.TeamLogos = images;
            }
            sport.TeamLogos = images;
            if (sportId == 1)
            {
                sport.ChampionStats = db.ChampionStat.ToList();
            }
            return(sport);
        }
Beispiel #13
0
        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IHostingEnvironment env, IMemoryCache cache, TrackerDBContext db, IConfiguration config, IHubContext <LiveEventHub> hubContext)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseExceptionHandler("/Error");
                app.UseHsts();
            }
            app.UseSignalR(routes =>
            {
                routes.MapHub <LiveEventHub>("/live");
            });

            app.UseHttpsRedirection();
            app.UseStaticFiles();
            app.UseSpaStaticFiles();

            app.UseMvc(routes =>
            {
                routes.MapRoute(
                    "default",
                    "{controller}/{action=Index}/{id?}");
            });

            app.UseSpa(spa =>
            {
                spa.Options.SourcePath = "ClientApp";

                if (env.IsDevelopment())
                {
                    spa.UseReactDevelopmentServer(npmScript: "start");
                }
            });

            //app.UseCors("CorsPolicy");


            cache.Set("LeagueOfLegends", CacheCreator.CreateSportCacheById(1, db, Configuration));
            cache.Set("CSGO", CacheCreator.CreateSportCacheById(2, db, Configuration));
            cache.Set("Dota2", CacheCreator.CreateSportCacheById(3, db, Configuration));
            cache.Set("Live", new Live());
            RabbitMQMessageReceiver r   = new RabbitMQMessageReceiver();
            LiveEventHub            hub = new LiveEventHub(hubContext, cache);

            r.LiveEventReached += hub.SendEvent;

            //clean up old live events from cache
            LiveEvent dummy = new LiveEvent();

            Task.Factory.StartNew(async delegate
            {
                while (true)
                {
                    var live = cache.Get("Live") as Live;
                    foreach (var ev in live.LiveEvents)
                    {
                        if (DateTime.UtcNow > ev.Value.UpdateDate.AddSeconds(180))
                        {
                            live.LiveEvents.TryRemove(hub.CreateLiveGameKey(ev.Value), out dummy);
                            hub.RemoveLiveEvent(ev.Value);
                        }
                    }
                    cache.Set("Live", live);
                    await Task.Delay(5000);
                }
            });
        }
Beispiel #14
0
 public ProjectsController(TrackerDBContext db)
 {
     _db = db;
 }