From d16b674f4638e2440d3ca6e85680f858fb929ce6 Mon Sep 17 00:00:00 2001 From: Jonathan Williams Date: Tue, 3 Sep 2013 08:51:44 -0700 Subject: [PATCH] Memory cleanup (Recharge, ClassCombatShop) Implemented Tasks. --- .../src/mineplex/core/recharge/Recharge.java | 7 + .../src/mineplex/core/task/TaskClient.java | 14 + .../src/mineplex/core/task/TaskManager.java | 54 ++++ .../core/task/repository/TaskRepository.java | 22 ++ .../core/task/repository/TaskToken.java | 10 + .../core/task/repository/UpdateTaskToken.java | 7 + .../classcombat/shop/ClassCombatShop.java | 3 + Website/LOC.Core/LOC.Core.csproj | 2 + Website/LOC.Core/Model/Account/Account.cs | 3 + .../Model/Server/GameServer/GameTask.cs | 11 + Website/LOC.Core/Tokens/Client/ClientToken.cs | 19 +- .../LOC.Core/Tokens/Client/UpdateTaskToken.cs | 9 + .../Models/AccountAdministrator.cs | 29 +- .../Models/IAccountAdministrator.cs | 1 + .../Controllers/PlayerAccountController.cs | 7 +- .../LOC.Website.Web.Publish.xml | 252 +++++++++--------- 16 files changed, 318 insertions(+), 132 deletions(-) create mode 100644 Plugins/Mineplex.Core/src/mineplex/core/task/TaskClient.java create mode 100644 Plugins/Mineplex.Core/src/mineplex/core/task/TaskManager.java create mode 100644 Plugins/Mineplex.Core/src/mineplex/core/task/repository/TaskRepository.java create mode 100644 Plugins/Mineplex.Core/src/mineplex/core/task/repository/TaskToken.java create mode 100644 Plugins/Mineplex.Core/src/mineplex/core/task/repository/UpdateTaskToken.java create mode 100644 Website/LOC.Core/Model/Server/GameServer/GameTask.cs create mode 100644 Website/LOC.Core/Tokens/Client/UpdateTaskToken.cs diff --git a/Plugins/Mineplex.Core/src/mineplex/core/recharge/Recharge.java b/Plugins/Mineplex.Core/src/mineplex/core/recharge/Recharge.java index 2280882b5..7ccf35882 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/recharge/Recharge.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/recharge/Recharge.java @@ -6,6 +6,7 @@ import java.util.LinkedList; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.plugin.java.JavaPlugin; import mineplex.core.MiniPlugin; @@ -143,6 +144,12 @@ public class Recharge extends MiniPlugin Get(player).put(ability, System.currentTimeMillis()+rechargeEvent.GetRecharge()); } + @EventHandler + public void clearPlayer(PlayerQuitEvent event) + { + _recharge.remove(event.getPlayer().getName()); + } + public void Reset(Player player) { _recharge.put(player.getName(), new NautHashMap()); diff --git a/Plugins/Mineplex.Core/src/mineplex/core/task/TaskClient.java b/Plugins/Mineplex.Core/src/mineplex/core/task/TaskClient.java new file mode 100644 index 000000000..de809078a --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/task/TaskClient.java @@ -0,0 +1,14 @@ +package mineplex.core.task; + +import java.util.List; + +public class TaskClient +{ + public String Name; + public List TasksCompleted; + + public TaskClient(String name) + { + Name = name; + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/task/TaskManager.java b/Plugins/Mineplex.Core/src/mineplex/core/task/TaskManager.java new file mode 100644 index 000000000..297409df4 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/task/TaskManager.java @@ -0,0 +1,54 @@ +package mineplex.core.task; + +import org.bukkit.craftbukkit.libs.com.google.gson.Gson; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.plugin.java.JavaPlugin; + +import mineplex.core.MiniClientPlugin; +import mineplex.core.account.event.ClientWebResponseEvent; +import mineplex.core.task.repository.TaskRepository; +import mineplex.core.task.repository.TaskToken; + +public class TaskManager extends MiniClientPlugin +{ + private TaskRepository _repository; + + public TaskManager(JavaPlugin plugin, String webServerAddress) + { + super("Task Manager", plugin); + + _repository = new TaskRepository(webServerAddress); + } + + @Override + protected TaskClient AddPlayer(String playerName) + { + return new TaskClient(playerName); + } + + @EventHandler + public void OnClientWebResponse(ClientWebResponseEvent event) + { + TaskToken token = new Gson().fromJson(event.GetResponse(), TaskToken.class); + TaskClient client = new TaskClient(token.Name); + + if (token.TasksCompleted != null) + client.TasksCompleted = token.TasksCompleted; + + Set(token.Name, client); + } + + public boolean hasCompletedTask(Player player, String taskName) + { + return Get(player.getName()).TasksCompleted.contains(taskName); + } + + public void completedTask(Player player, String taskName) + { + TaskClient client = Get(player.getName()); + client.TasksCompleted.add(taskName); + + _repository.AddTask(client.Name, 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 new file mode 100644 index 000000000..0d79ba3f0 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/task/repository/TaskRepository.java @@ -0,0 +1,22 @@ +package mineplex.core.task.repository; + +import mineplex.core.server.remotecall.AsyncJsonWebCall; + +public class TaskRepository +{ + private String _webAddress; + + public TaskRepository(String webServerAddress) + { + _webAddress = webServerAddress; + } + + public void AddTask(String name, String newTask) + { + UpdateTaskToken token = new UpdateTaskToken(); + token.Name = name; + token.NewTaskCompleted = newTask; + + new AsyncJsonWebCall(_webAddress + "PlayerAccount/AddTask").Execute(token); + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/task/repository/TaskToken.java b/Plugins/Mineplex.Core/src/mineplex/core/task/repository/TaskToken.java new file mode 100644 index 000000000..550402339 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/task/repository/TaskToken.java @@ -0,0 +1,10 @@ +package mineplex.core.task.repository; + +import java.util.List; + +public class TaskToken +{ + public String Name; + + public List TasksCompleted; +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/task/repository/UpdateTaskToken.java b/Plugins/Mineplex.Core/src/mineplex/core/task/repository/UpdateTaskToken.java new file mode 100644 index 000000000..63e06fce0 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/task/repository/UpdateTaskToken.java @@ -0,0 +1,7 @@ +package mineplex.core.task.repository; + +public class UpdateTaskToken +{ + public String Name; + public String NewTaskCompleted; +} diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/shop/ClassCombatShop.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/shop/ClassCombatShop.java index 190c49ae1..e8c0e9046 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/shop/ClassCombatShop.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/shop/ClassCombatShop.java @@ -73,5 +73,8 @@ public class ClassCombatShop extends ShopBase ((CraftPlayer)player).getHandle().updateInventory(((CraftPlayer)player).getHandle().defaultContainer); } + + _inventoryStorage.remove(player.getName()); + _armorStorage.remove(player.getName()); } } diff --git a/Website/LOC.Core/LOC.Core.csproj b/Website/LOC.Core/LOC.Core.csproj index 61e9e435c..19f704d83 100644 --- a/Website/LOC.Core/LOC.Core.csproj +++ b/Website/LOC.Core/LOC.Core.csproj @@ -73,6 +73,7 @@ + @@ -146,6 +147,7 @@ + diff --git a/Website/LOC.Core/Model/Account/Account.cs b/Website/LOC.Core/Model/Account/Account.cs index 74c9080f7..d885b58cc 100644 --- a/Website/LOC.Core/Model/Account/Account.cs +++ b/Website/LOC.Core/Model/Account/Account.cs @@ -5,6 +5,7 @@ using System.ComponentModel.DataAnnotations; using Sales; using Server; + using Server.GameServer; using Server.GameServer.CaptureThePig.Stats; using Server.GameServer.Dominate.Stats; using Server.PvpServer; @@ -50,6 +51,8 @@ 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 new file mode 100644 index 000000000..e296bf4fb --- /dev/null +++ b/Website/LOC.Core/Model/Server/GameServer/GameTask.cs @@ -0,0 +1,11 @@ +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 de3ba31ab..60dd89135 100644 --- a/Website/LOC.Core/Tokens/Client/ClientToken.cs +++ b/Website/LOC.Core/Tokens/Client/ClientToken.cs @@ -1,6 +1,4 @@ -using System.Collections.ObjectModel; - -namespace LOC.Core.Tokens.Client +namespace LOC.Core.Tokens.Client { using System; using System.Collections.Generic; @@ -46,6 +44,17 @@ namespace LOC.Core.Tokens.Client 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 @@ -107,7 +116,9 @@ namespace LOC.Core.Tokens.Client public int EconomyBalance { get; set; } - public List Punishments { get; set; } + public List Punishments { get; set; } + + public List TasksCompleted { get; set; } public List FishTokens; diff --git a/Website/LOC.Core/Tokens/Client/UpdateTaskToken.cs b/Website/LOC.Core/Tokens/Client/UpdateTaskToken.cs new file mode 100644 index 000000000..406b69de7 --- /dev/null +++ b/Website/LOC.Core/Tokens/Client/UpdateTaskToken.cs @@ -0,0 +1,9 @@ +namespace LOC.Core.Tokens.Client +{ + public class UpdateTaskToken + { + public string Name { get; set; } + + public string NewTaskCompleted { get; set; } + } +} diff --git a/Website/LOC.Website.Common/Models/AccountAdministrator.cs b/Website/LOC.Website.Common/Models/AccountAdministrator.cs index db0f55885..84b0f0939 100644 --- a/Website/LOC.Website.Common/Models/AccountAdministrator.cs +++ b/Website/LOC.Website.Common/Models/AccountAdministrator.cs @@ -8,6 +8,7 @@ using Core.Data; using Core.Model.Account; using Core.Model.Sales; + using Core.Model.Server.GameServer; using Core.Model.Server.PvpServer; using Core.Tokens; using Core.Tokens.Client; @@ -74,6 +75,7 @@ .Include(x => x.AccountTransactions) .Include(x => x.Pets) .Include(x => x.Punishments) + .Include(x => x.Tasks) .FirstOrDefault() ?? CreateAccount(loginToken, repository); // Expire punishments @@ -86,7 +88,7 @@ } // Expire ranks - if ((account.Rank.Name == "DIAMOND" || account.Rank.Name == "EMERALD") && !account.RankPerm && DateTime.Now.CompareTo(account.RankExpire) >= 0) + if ((account.Rank.Name == "ULTRA") && !account.RankPerm && DateTime.Now.CompareTo(account.RankExpire) >= 0) { account.Rank = repository.Where(x => x.Name == "ALL").First(); repository.Attach(account.Rank); @@ -171,6 +173,31 @@ return account; } + public void AddTask(UpdateTaskToken token) + { + using (var repository = _repositoryFactory.CreateRepository()) + { + var account = repository.Where(x => x.Name == token.Name).Include(x => x.Tasks).FirstOrDefault(); + + if (account != null) + { + if (account.Tasks == null) + account.Tasks = new List(); + + var task = new GameTask + { + Account = account, + TaskName = token.Name, + }; + + 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 561286953..bcdb3d36d 100644 --- a/Website/LOC.Website.Common/Models/IAccountAdministrator.cs +++ b/Website/LOC.Website.Common/Models/IAccountAdministrator.cs @@ -32,5 +32,6 @@ string PurchaseUnknownSalesPackage(UnknownPurchaseToken token); string UpdateRank(RankUpdateToken token); void RemoveBan(RemovePunishmentToken token); + void AddTask(UpdateTaskToken token); } } diff --git a/Website/LOC.Website.Web/Controllers/PlayerAccountController.cs b/Website/LOC.Website.Web/Controllers/PlayerAccountController.cs index 8a89e7bf4..f857effa2 100644 --- a/Website/LOC.Website.Web/Controllers/PlayerAccountController.cs +++ b/Website/LOC.Website.Web/Controllers/PlayerAccountController.cs @@ -4,7 +4,6 @@ using System.Web.Mvc; using Common; using Common.Models; - using Core.Model.Account; using Core.Tokens; using Core.Tokens.Client; using Newtonsoft.Json; @@ -70,6 +69,12 @@ return Content(json, "application/json"); } + [HttpPost] + public void AddTask(UpdateTaskToken token) + { + _accountAdministrator.AddTask(token); + } + [HttpPost] public void Logout(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 9fb4f2f65..f4dc0146e 100644 --- a/Website/LOC.Website.Web/LOC.Website.Web.Publish.xml +++ b/Website/LOC.Website.Web/LOC.Website.Web.Publish.xml @@ -1,6 +1,7 @@  + @@ -16,49 +17,54 @@ - + + + + + - - + - + - + + + + + - - - - + + @@ -69,76 +75,72 @@ - + + - - - + + - - - - + + - + + - + + - - - + - - + - + + - - + - - + @@ -149,52 +151,47 @@ - + - - - - + - - - + - - - + + + - + - - + + @@ -204,24 +201,23 @@ - - + + - - + + - + - - - - + + + @@ -229,48 +225,52 @@ - + - + + - - + + + + - - + + - + - - + + - - + + - - + + + + - @@ -281,18 +281,17 @@ - + - - + - + - + @@ -306,15 +305,16 @@ + - + + - @@ -324,6 +324,7 @@ + @@ -334,22 +335,20 @@ - - + + - - - + @@ -357,21 +356,21 @@ - + - - + + - + - - + + @@ -379,29 +378,30 @@ + + + - + - + - - - + @@ -412,118 +412,118 @@ - + - + + + + + + - - + - + - - + - + - - + + - - + - - + - + - - + + - - + + - - + + + - - + - + - + - - + - + - + - - + + - + - - + + - - + + - + \ No newline at end of file