From 96b1df4ee05223c1f8c3c0a3c232c08c8f1054ef Mon Sep 17 00:00:00 2001 From: Jonathan Williams Date: Fri, 22 May 2015 14:33:25 -0700 Subject: [PATCH] Fixed global player count. Fixed tasks. --- Plugins/BuildFiles/common.xml | 5 +- .../bungee/playerCount/PlayerCount.java | 15 +- .../src/mineplex/bungee/BungeeRotator.java | 26 +- .../chestConverter/ChestConverter.java | 2 +- .../src/mineplex/core/task/TaskClient.java | 4 +- .../src/mineplex/core/task/TaskManager.java | 25 +- .../core/task/repository/TaskRepository.java | 2 +- Website/LOC.Core/LOC.Core.csproj | 1 - Website/LOC.Core/Model/Account/Account.cs | 2 - .../Model/Server/GameServer/GameTask.cs | 11 - Website/LOC.Core/Tokens/Client/ClientToken.cs | 13 - .../Models/AccountAdministrator.cs | 27 +- .../Models/IAccountAdministrator.cs | 3 - .../Controllers/PlayerAccountController.cs | 8 +- .../LOC.Website.Web.Publish.xml | 438 +++++++++--------- Website/LOCWebsite.suo | Bin 474624 -> 474624 bytes 16 files changed, 276 insertions(+), 306 deletions(-) delete mode 100644 Website/LOC.Core/Model/Server/GameServer/GameTask.cs diff --git a/Plugins/BuildFiles/common.xml b/Plugins/BuildFiles/common.xml index 51870c86b..4c3d6b432 100644 --- a/Plugins/BuildFiles/common.xml +++ b/Plugins/BuildFiles/common.xml @@ -377,10 +377,7 @@ - - - - + diff --git a/Plugins/Mineplex.Bungee.Mineplexer/src/mineplex/bungee/playerCount/PlayerCount.java b/Plugins/Mineplex.Bungee.Mineplexer/src/mineplex/bungee/playerCount/PlayerCount.java index 9a5f2fb5e..d5c950a23 100644 --- a/Plugins/Mineplex.Bungee.Mineplexer/src/mineplex/bungee/playerCount/PlayerCount.java +++ b/Plugins/Mineplex.Bungee.Mineplexer/src/mineplex/bungee/playerCount/PlayerCount.java @@ -9,6 +9,7 @@ import mineplex.serverdata.Region; import mineplex.serverdata.data.BungeeServer; import mineplex.serverdata.data.DataRepository; import mineplex.serverdata.redis.RedisDataRepository; +import mineplex.serverdata.servers.ConnectionData; import mineplex.serverdata.servers.ServerManager; import mineplex.serverdata.servers.ServerRepository; import net.md_5.bungee.api.ServerPing.Players; @@ -21,6 +22,7 @@ import net.md_5.bungee.event.EventHandler; public class PlayerCount implements Listener, Runnable { private DataRepository _repository; + private DataRepository _secondRepository; private UUID _uuid; private Region _region; @@ -42,11 +44,17 @@ public class PlayerCount implements Listener, Runnable _repository = new RedisDataRepository(ServerManager.getMasterConnection(), ServerManager.getSlaveConnection(), Region.ALL, BungeeServer.class, "bungeeServers"); + + if (_region == Region.US) + _secondRepository = new RedisDataRepository(new ConnectionData("10.81.1.156", 6379), new ConnectionData("10.81.1.156", 6377), + Region.ALL, BungeeServer.class, "bungeeServers"); + else + _secondRepository = new RedisDataRepository(new ConnectionData("10.33.53.16", 6379), new ConnectionData("10.33.53.16", 6377), + Region.ALL, BungeeServer.class, "bungeeServers"); } public void run() { - BungeeServer snapshot = generateSnapshot(); _repository.addElement(snapshot, 15); // Update with a 15 second expiry on session @@ -64,6 +72,11 @@ public class PlayerCount implements Listener, Runnable totalPlayers += server.getPlayerCount(); } + for (BungeeServer server : _secondRepository.getElements()) + { + totalPlayers += server.getPlayerCount(); + } + return totalPlayers; } diff --git a/Plugins/Mineplex.BungeeRotator/src/mineplex/bungee/BungeeRotator.java b/Plugins/Mineplex.BungeeRotator/src/mineplex/bungee/BungeeRotator.java index add5fd42b..b37cdf486 100644 --- a/Plugins/Mineplex.BungeeRotator/src/mineplex/bungee/BungeeRotator.java +++ b/Plugins/Mineplex.BungeeRotator/src/mineplex/bungee/BungeeRotator.java @@ -4,7 +4,6 @@ import java.io.File; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.Date; import java.util.HashSet; @@ -14,14 +13,6 @@ import java.util.logging.Formatter; import java.util.logging.LogRecord; import java.util.logging.Logger; -import org.apache.commons.lang.RandomStringUtils; - -import biz.neustar.ultra.client.UltraAPIClient; -import biz.neustar.ultra.client.UltraAPIClientImpl; -import biz.neustar.ultra.client.UltraAPIException; - -import com.neustar.ultraservice.schema.v01.AccountDetailsList; - import mineplex.bungee.api.ApiDeleteCall; import mineplex.bungee.api.ApiGetCall; import mineplex.bungee.api.ApiPostCall; @@ -33,11 +24,13 @@ import mineplex.serverdata.Region; import mineplex.serverdata.data.BungeeServer; import mineplex.serverdata.data.DataRepository; import mineplex.serverdata.redis.RedisDataRepository; +import mineplex.serverdata.servers.ConnectionData; import mineplex.serverdata.servers.ServerManager; public class BungeeRotator { private static DataRepository _repository; + private static DataRepository _secondRepository; private static PlayerStatsRepository _ipRepository; //private static ServerRepository _repository = null; @@ -76,6 +69,7 @@ public class BungeeRotator } + /* String username = "mineplex"; String password = "gjxcVf%nk."; String accountId = null; @@ -105,13 +99,16 @@ public class BungeeRotator e.printStackTrace(); } - /* + */ _debug = new File("debug.dat").exists(); _repository = new RedisDataRepository(ServerManager.getMasterConnection(), ServerManager.getSlaveConnection(), Region.ALL, BungeeServer.class, "bungeeServers"); - _ipRepository = new PlayerStatsRepository(); + _secondRepository = new RedisDataRepository(new ConnectionData("10.81.1.156", 6379), new ConnectionData("10.81.1.156", 6377), + Region.ALL, BungeeServer.class, "bungeeServers"); + + //_ipRepository = new PlayerStatsRepository(); BungeeSorter bungeeSorter = new BungeeSorter(); int maxRecordCount = 10; @@ -121,6 +118,8 @@ public class BungeeRotator try { List bungeeServers = new ArrayList(_repository.getElements()); + bungeeServers.addAll(_secondRepository.getElements()); + Collections.sort(bungeeServers, bungeeSorter); if (_debug) @@ -249,6 +248,7 @@ public class BungeeRotator } } + /* List updatedAddresses = new ArrayList(1000); for (IpInfo ipInfo : _ipRepository.getIpAddresses()) @@ -269,7 +269,7 @@ public class BungeeRotator } _ipRepository.updateIps(updatedAddresses); - + */ try { Thread.sleep(15000); @@ -279,6 +279,7 @@ public class BungeeRotator { e.printStackTrace(); } + } catch (Exception ex) { @@ -295,7 +296,6 @@ public class BungeeRotator } } } - */ } private static void log(String message) diff --git a/Plugins/Mineplex.ChestConverter/src/mineplex/chestConverter/ChestConverter.java b/Plugins/Mineplex.ChestConverter/src/mineplex/chestConverter/ChestConverter.java index ed9388f45..5d7c5d23e 100644 --- a/Plugins/Mineplex.ChestConverter/src/mineplex/chestConverter/ChestConverter.java +++ b/Plugins/Mineplex.ChestConverter/src/mineplex/chestConverter/ChestConverter.java @@ -40,7 +40,7 @@ public class ChestConverter } _repository = new ChestConverterRepository(); - int lastId = 11056929; + int lastId = 18279475; int count = 50000; int numOfRowsProcessed = lastId; diff --git a/Plugins/Mineplex.Core/src/mineplex/core/task/TaskClient.java b/Plugins/Mineplex.Core/src/mineplex/core/task/TaskClient.java index 22f565d58..9d4d4cdaa 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/task/TaskClient.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/task/TaskClient.java @@ -5,10 +5,10 @@ import java.util.List; public class TaskClient { - public List TasksCompleted; + public List TasksCompleted; public TaskClient() { - TasksCompleted = new ArrayList(); + TasksCompleted = new ArrayList(); } } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/task/TaskManager.java b/Plugins/Mineplex.Core/src/mineplex/core/task/TaskManager.java index 75f7bbe52..05e07535e 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/task/TaskManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/task/TaskManager.java @@ -87,12 +87,26 @@ public class TaskManager extends MiniDbClientPlugin public boolean hasCompletedTask(Player player, String taskName) { - return Get(player.getName()).TasksCompleted.contains(taskName); + synchronized (_taskLock) + { + if (!_tasks.containsKey(taskName)) + { + return false; + } + + return Get(player.getName()).TasksCompleted.contains(_tasks.get(taskName)); + } } public void completedTask(final Callback callback, final Player player, final String taskName) { - Get(player.getName()).TasksCompleted.add(taskName); + synchronized (_taskLock) + { + if (_tasks.containsKey(taskName)) + { + Get(player.getName()).TasksCompleted.add(_tasks.get(taskName)); + } + } addTaskForOfflinePlayer(new Callback() { @@ -102,9 +116,12 @@ public class TaskManager extends MiniDbClientPlugin { System.out.println("Add task FAILED for " + player.getName()); - if (_tasks.containsKey(taskName)) + synchronized (_taskLock) { - Get(player.getName()).TasksCompleted.remove(taskName); + if (_tasks.containsKey(taskName)) + { + Get(player.getName()).TasksCompleted.remove(_tasks.get(taskName)); + } } } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/task/repository/TaskRepository.java b/Plugins/Mineplex.Core/src/mineplex/core/task/repository/TaskRepository.java index 82d7d6d22..95a427d11 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/task/repository/TaskRepository.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/task/repository/TaskRepository.java @@ -48,7 +48,7 @@ public class TaskRepository extends RepositoryBase while (resultSet.next()) { - taskClient.TasksCompleted.add(resultSet.getString(1)); + taskClient.TasksCompleted.add(resultSet.getInt(1)); } return taskClient; diff --git a/Website/LOC.Core/LOC.Core.csproj b/Website/LOC.Core/LOC.Core.csproj index c4601f0a9..e10c5ac35 100644 --- a/Website/LOC.Core/LOC.Core.csproj +++ b/Website/LOC.Core/LOC.Core.csproj @@ -71,7 +71,6 @@ - diff --git a/Website/LOC.Core/Model/Account/Account.cs b/Website/LOC.Core/Model/Account/Account.cs index 8662a770e..6375dbd94 100644 --- a/Website/LOC.Core/Model/Account/Account.cs +++ b/Website/LOC.Core/Model/Account/Account.cs @@ -55,8 +55,6 @@ public virtual List CustomBuilds { get; set; } - public virtual List Tasks { get; set; } - public virtual List IpAddresses { get; set; } public virtual List MacAddresses { get; set; } diff --git a/Website/LOC.Core/Model/Server/GameServer/GameTask.cs b/Website/LOC.Core/Model/Server/GameServer/GameTask.cs deleted file mode 100644 index e296bf4fb..000000000 --- a/Website/LOC.Core/Model/Server/GameServer/GameTask.cs +++ /dev/null @@ -1,11 +0,0 @@ -namespace LOC.Core.Model.Server.GameServer -{ - public class GameTask - { - public int GameTaskId { get; set; } - - public Account.Account Account { get; set; } - - public string TaskName { get; set; } - } -} diff --git a/Website/LOC.Core/Tokens/Client/ClientToken.cs b/Website/LOC.Core/Tokens/Client/ClientToken.cs index 4a1c02ff1..50dd6ef51 100644 --- a/Website/LOC.Core/Tokens/Client/ClientToken.cs +++ b/Website/LOC.Core/Tokens/Client/ClientToken.cs @@ -52,17 +52,6 @@ PetNameTagCount = account.PetNameTagCount }; - - TasksCompleted = new List(); - - if (account.Tasks != null) - { - foreach (var task in account.Tasks) - { - TasksCompleted.Add(task.TaskName); - } - } - if (account.Clan != null) { ClanToken = new ClientClanToken @@ -136,8 +125,6 @@ public List Punishments { get; set; } - public List TasksCompleted { get; set; } - public List FishTokens; public List IgnoredPlayers { get; set; } diff --git a/Website/LOC.Website.Common/Models/AccountAdministrator.cs b/Website/LOC.Website.Common/Models/AccountAdministrator.cs index e7912bfd2..3c19dedff 100644 --- a/Website/LOC.Website.Common/Models/AccountAdministrator.cs +++ b/Website/LOC.Website.Common/Models/AccountAdministrator.cs @@ -72,6 +72,7 @@ return accounts; } + /* public List GetTasksByCount(SearchConf searchConf) { var tasks = new List(); @@ -100,6 +101,7 @@ return tasks; } + */ private object getAccountLock(string name) { @@ -353,31 +355,6 @@ return true; } - public void AddTask(UpdateTaskToken token) - { - using (var repository = _repositoryFactory.CreateRepository()) - { - var account = repository.Where(x => x.Name == token.Name).OrderByDescending(x => x.LastLogin).Include(x => x.Tasks).FirstOrDefault(); - - if (account != null) - { - if (account.Tasks == null) - account.Tasks = new List(); - - var task = new GameTask - { - Account = account, - TaskName = token.NewTaskCompleted, - }; - - account.Tasks.Add(task); - - repository.Edit(account); - repository.CommitChanges(); - } - } - } - public PunishmentResponse Punish(PunishToken punish) { using (var repository = _repositoryFactory.CreateRepository()) diff --git a/Website/LOC.Website.Common/Models/IAccountAdministrator.cs b/Website/LOC.Website.Common/Models/IAccountAdministrator.cs index 1e6a1522f..89778c258 100644 --- a/Website/LOC.Website.Common/Models/IAccountAdministrator.cs +++ b/Website/LOC.Website.Common/Models/IAccountAdministrator.cs @@ -35,14 +35,11 @@ string PurchaseUnknownSalesPackage(UnknownPurchaseToken token); string UpdateRank(RankUpdateToken token); void RemoveBan(RemovePunishmentToken token); - void AddTask(UpdateTaskToken token); void UpdateAccountUUIDs(List tokens); bool CoinReward(GemRewardToken token); ClientToken GetAccountByUUID(string uuid); - - List GetTasksByCount(SearchConf searchConf); } } diff --git a/Website/LOC.Website.Web/Controllers/PlayerAccountController.cs b/Website/LOC.Website.Web/Controllers/PlayerAccountController.cs index fe4efc6a9..111ad720d 100644 --- a/Website/LOC.Website.Web/Controllers/PlayerAccountController.cs +++ b/Website/LOC.Website.Web/Controllers/PlayerAccountController.cs @@ -40,6 +40,7 @@ return Content(json, "application/json"); } + /* [HttpPost] public ActionResult GetTasksByCount(SearchConf searchConf) { @@ -48,6 +49,7 @@ var json = JsonConvert.SerializeObject(tasks); return Content(json, "application/json"); } + */ [HttpPost] public ActionResult GetAccountByUUID(string uuid) @@ -86,12 +88,6 @@ return Content(json, "application/json"); } - [HttpPost] - public void AddTask(UpdateTaskToken token) - { - _accountAdministrator.AddTask(token); - } - [HttpPost] public void ApplyKits(string name) { diff --git a/Website/LOC.Website.Web/LOC.Website.Web.Publish.xml b/Website/LOC.Website.Web/LOC.Website.Web.Publish.xml index a57f4f271..360c78f15 100644 --- a/Website/LOC.Website.Web/LOC.Website.Web.Publish.xml +++ b/Website/LOC.Website.Web/LOC.Website.Web.Publish.xml @@ -1,13 +1,11 @@  - - @@ -20,17 +18,14 @@ - - + - - @@ -44,26 +39,26 @@ - + + - - - - + + + @@ -74,24 +69,25 @@ - - + - + + + - + + - @@ -99,7 +95,7 @@ - + @@ -107,42 +103,40 @@ - + + + - - + - - + + - - - + + - - @@ -153,27 +147,33 @@ - + - + + + + + + - + + @@ -184,92 +184,92 @@ - + - + + + - - + - + - - + + - + - + + - + - + - - + - + - - + - - + + - + - - + + - - + + - + - + @@ -280,22 +280,26 @@ - + - + + - + + + + @@ -303,16 +307,16 @@ + - - + @@ -322,7 +326,6 @@ - @@ -333,21 +336,21 @@ + - - + + + - - @@ -355,8 +358,6 @@ - - @@ -364,11 +365,12 @@ - - + + + @@ -382,28 +384,29 @@ - - + + + - + + + - - + - @@ -412,61 +415,56 @@ - - - - + - - + - + - - - + - + - + - + - - + + + - + - + @@ -474,65 +472,67 @@ - + - + - - + + + - + - + + - - + + - - + + - + - - - - - + + + + + - + - + @@ -545,14 +545,16 @@ - + + - + + @@ -566,27 +568,24 @@ - - - + - + - @@ -597,47 +596,48 @@ + - - + + - + - - + - - + + - - + + + @@ -645,22 +645,23 @@ - - + - + - + + + - + @@ -675,61 +676,57 @@ - - - - + - - + - - - + + + + - - - + - + - + - - + + + - + @@ -737,65 +734,68 @@ - - + + - + - + + - + + - + - + - + + - - + + - - + + - + - - - - - + + + + + - + - + @@ -808,14 +808,16 @@ - + + - + + @@ -829,17 +831,15 @@ - - - + @@ -849,7 +849,6 @@ - @@ -860,29 +859,29 @@ + - - + + - + - - + @@ -890,17 +889,18 @@ - - + + + @@ -908,22 +908,23 @@ - - + - + - + + + - + @@ -938,61 +939,57 @@ - - - - + - - + - + + - - - + - + - + - - + + + - + @@ -1000,56 +997,59 @@ - - + + - + - + + - + + - + - + + - - + + - - + + - + - - - - - + + + + + - + \ No newline at end of file diff --git a/Website/LOCWebsite.suo b/Website/LOCWebsite.suo index 933119909849f609174782de9c4efc849fdfb493..acbad218b76832e6a0696d54581fd2c54204d13b 100644 GIT binary patch delta 14424 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 A761SM delta 14488 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