private void StartJob()
 {
     _job = new Timer(state => {
         if (!_jobRunning)
         {
             _jobRunning = true;
             try {
                 if (Variables.OverlayWindow != null)
                 {
                     lock (Variables.LobbyPlayers) {
                         LobbyUtils.CalculateLobbyPlayerFieldColors();
                         Variables.OverlayWindow.UpdatePlayers(Variables.LobbyPlayers, Variables.Teams, Variables.Lobby.Ranked == 2);
                     }
                 }
             } catch (Exception e) {
                 Console.WriteLine("Error while running overlay updater job");
                 Console.WriteLine(e.ToString());
             } finally {
                 _jobRunning = false;
             }
         }
     }, null, 0, 500);
 }
 public Lobby Get(string id)
 {
     if (id == "0")
     {
         if (Variables.Lobby != null)
         {
             lock (Variables.LobbyPlayers) {
                 LobbyUtils.CalculateLobbyPlayerFieldColors();
                 Variables.Lobby.Players  = Variables.LobbyPlayers.OrderBy(lp => lp.Position);
                 Variables.Lobby.SLobbyId = Variables.Lobby.LobbyId.ToString();
                 foreach (var player in Variables.Lobby.Players)
                 {
                     player.SSteamId = player.SteamId.ToString();
                 }
                 return(Variables.Lobby);
             }
         }
         else
         {
             return(null);
         }
     }
     else
     {
         var longLobbyId  = ulong.Parse(id);
         var runningLobby = _repository.Lobbies.Include(l => l.Players).ThenInclude(ls => ls.User).FirstOrDefault(l => l.LobbyId == longLobbyId);
         var lobby        = new Commons.Models.Lobby {
             LobbyId  = runningLobby.LobbyId,
             SLobbyId = runningLobby.LobbyId.ToString(),
             GameType = runningLobby.GameType,
             Name     = runningLobby.Name,
             Ranked   = runningLobby.Ranked,
             Players  = runningLobby.Players.Where(p => p.Position > 0).OrderBy(p => p.Position).Select(p => new Player {
                 Name        = p.Name,
                 SteamId     = p.User != null ? p.User.SteamId : 0,
                 SSteamId    = p.User?.SteamId.ToString(),
                 LobbySlotId = p.Id,
                 Position    = p.Position,
                 Rank        = runningLobby.Ranked == 2 ? p.RankDM : p.RankRM,
                 RankRM      = p.RankRM,
                 RankDM      = p.RankDM,
                 Profile     = p.User != null ? new PlayerProfile {
                     Location           = p.User.Location,
                     ProfileDataFetched = p.User.ProfileDataFetched,
                     ProfilePrivate     = p.User.ProfilePrivate
                 } : null,
                 ReputationStats = p.User != null ? new PlayerReputationStats {
                     Games = p.User.Games,
                     PositiveReputation = p.User.PositiveReputation,
                     NegativeReputation = p.User.NegativeReputation
                 } : null,
                 GameStats = p.User != null ? UserUtils.GetGameStats(p.GamesStartedRM, p.GamesStartedDM, p.GamesWonRM, p.GamesWonDM, p.GamesEndedRM, p.GamesEndedDM) : null,
             }).ToList()
         };
         foreach (var player in lobby.Players)
         {
             LobbyUtils.CalculateUserFieldColors(player, lobby.Ranked);
         }
         return(lobby);
     }
 }