From 5a57c5f37283d8f2833fd3e4327663afd818245d Mon Sep 17 00:00:00 2001 From: Jonathan Williams Date: Mon, 29 Dec 2014 06:42:20 -0500 Subject: [PATCH] Added Gold saving/retrieval from mysql. Converted DonationManager to MiniDbClientPlugin. Fixed bug in DonationRepository with gold. --- .../core/donation/DonationManager.java | 71 +++++++++---------- .../src/mineplex/core/donation/Donor.java | 32 ++------- .../repository/DonationRepository.java | 25 +++++-- 3 files changed, 60 insertions(+), 68 deletions(-) diff --git a/Plugins/Mineplex.Core/src/mineplex/core/donation/DonationManager.java b/Plugins/Mineplex.Core/src/mineplex/core/donation/DonationManager.java index e4fa23b99..f9afd04de 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/donation/DonationManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/donation/DonationManager.java @@ -1,5 +1,7 @@ package mineplex.core.donation; +import java.sql.ResultSet; +import java.sql.SQLException; import java.util.UUID; import org.bukkit.Bukkit; @@ -8,38 +10,31 @@ import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.plugin.java.JavaPlugin; -import mineplex.core.MiniPlugin; -import mineplex.core.account.event.ClientUnloadEvent; +import mineplex.core.MiniDbClientPlugin; +import mineplex.core.account.CoreClientManager; import mineplex.core.account.event.ClientWebResponseEvent; import mineplex.core.common.CurrencyType; import mineplex.core.common.util.Callback; import mineplex.core.common.util.NautHashMap; import mineplex.core.donation.repository.DonationRepository; import mineplex.core.donation.repository.token.DonorTokenWrapper; -import mineplex.core.server.remotecall.JsonWebCall; import mineplex.core.server.util.TransactionResponse; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; -public class DonationManager extends MiniPlugin +public class DonationManager extends MiniDbClientPlugin { private DonationRepository _repository; - private NautHashMap _donors; - - private Object _donorLock = new Object(); - private NautHashMap> _gemQueue = new NautHashMap>(); private NautHashMap> _coinQueue = new NautHashMap>(); private NautHashMap> _goldQueue = new NautHashMap>(); - public DonationManager(JavaPlugin plugin, String webAddress) + public DonationManager(JavaPlugin plugin, CoreClientManager clientManager, String webAddress) { - super("Donation", plugin); + super("Donation", plugin, clientManager); _repository = new DonationRepository(plugin, webAddress); - - _donors = new NautHashMap(); } @Override @@ -55,31 +50,11 @@ public class DonationManager extends MiniPlugin DonorTokenWrapper token = new Gson().fromJson(event.GetResponse(), DonorTokenWrapper.class); LoadDonor(token, event.getUniqueId()); } - - @EventHandler - public void UnloadDonor(ClientUnloadEvent event) - { - synchronized (_donorLock) - { - _donors.remove(event.GetName()); - } - } private void LoadDonor(DonorTokenWrapper token, UUID uuid) { - synchronized (_donorLock) - { - _donors.put(token.Name, new Donor(token.DonorToken)); - //_repository.updateGemsAndCoins(uuid, Get(token.Name).GetGems(), Get(token.Name).getCoins()); - } - } - - public Donor Get(String name) - { - synchronized (_donorLock) - { - return _donors.get(name); - } + Get(token.Name).loadToken(token.DonorToken); + //_repository.updateGemsAndCoins(uuid, Get(token.Name).GetGems(), Get(token.Name).getCoins()); } public void PurchaseUnknownSalesPackage(final Callback callback, final String name, final UUID uuid, final String packageName, final boolean coinPurchase, final int cost, boolean oneTimePurchase) @@ -324,10 +299,14 @@ public class DonationManager extends MiniPlugin donor.addGold(amount); } } - - if (callback != null) - callback.run(true); } + else + { + System.out.println("REWARD GOLD FAILED..."); + } + + if (callback != null) + callback.run(true); } }, caller, name, uuid.toString(), amount); } @@ -388,4 +367,22 @@ public class DonationManager extends MiniPlugin { _repository.applyKits(playerName); } + + @Override + public void processLoginResultSet(String playerName, ResultSet resultSet) throws SQLException + { + Get(playerName).addGold(_repository.retrieveDonorInfo(resultSet).getGold()); + } + + @Override + public String getQuery(String uuid, String name) + { + return "SELECT gold FROM accounts WHERE uuid = '" + uuid + "';"; + } + + @Override + protected Donor AddPlayer(String player) + { + return new Donor(); + } } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/donation/Donor.java b/Plugins/Mineplex.Core/src/mineplex/core/donation/Donor.java index af5dcd692..e984d3432 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/donation/Donor.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/donation/Donor.java @@ -14,14 +14,16 @@ public class Donor private int _coins; private int _gold; private boolean _donated; - private List _salesPackagesOwned; - private List _unknownSalesPackagesOwned; - private List _transactions; - private List _coinTransactions; + private List _salesPackagesOwned = new ArrayList(); + private List _unknownSalesPackagesOwned = new ArrayList(); + private List _transactions = new ArrayList(); + private List _coinTransactions = new ArrayList(); private boolean _update = true; - public Donor(DonorToken token) + public Donor() { } + + public void loadToken(DonorToken token) { _gems = token.Gems; _coins = token.Coins; @@ -31,26 +33,6 @@ public class Donor _unknownSalesPackagesOwned = token.UnknownSalesPackages; _transactions = token.Transactions; _coinTransactions = token.CoinRewards; - - if (_salesPackagesOwned == null) - { - _salesPackagesOwned = new ArrayList(); - } - - if (_unknownSalesPackagesOwned == null) - { - _unknownSalesPackagesOwned = new ArrayList(); - } - - if (_transactions == null) - { - _transactions = new ArrayList(); - } - - if (_coinTransactions == null) - { - _coinTransactions = new ArrayList(); - } } public int GetGems() diff --git a/Plugins/Mineplex.Core/src/mineplex/core/donation/repository/DonationRepository.java b/Plugins/Mineplex.Core/src/mineplex/core/donation/repository/DonationRepository.java index 755c35f28..ef37cfaaa 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/donation/repository/DonationRepository.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/donation/repository/DonationRepository.java @@ -1,5 +1,7 @@ package mineplex.core.donation.repository; +import java.sql.ResultSet; +import java.sql.SQLException; import java.util.UUID; import org.bukkit.Bukkit; @@ -10,6 +12,7 @@ import mineplex.core.database.DatabaseRunnable; import mineplex.core.database.RepositoryBase; import mineplex.core.database.column.ColumnInt; import mineplex.core.database.column.ColumnVarChar; +import mineplex.core.donation.Donor; import mineplex.core.donation.repository.token.GemRewardToken; import mineplex.core.donation.repository.token.PurchaseToken; import mineplex.core.donation.repository.token.UnknownPurchaseToken; @@ -178,12 +181,7 @@ public class DonationRepository extends RepositoryBase } public void rewardGold(final Callback callback, final String giver, final String name, final String uuid, final int gold) - { - final GemRewardToken token = new GemRewardToken(); - token.Source = giver; - token.Name = name; - token.Amount = gold; - + { handleDatabaseCall(new DatabaseRunnable(new Runnable() { public void run() @@ -191,7 +189,10 @@ public class DonationRepository extends RepositoryBase if (executeUpdate(UPDATE_ACCOUNT_GOLD, new ColumnInt("gold", gold), new ColumnVarChar("uuid", 100, uuid)) < 1) { Logger.Instance.log("Account gold wasn't updated for " + name); + callback.run(false); } + else + callback.run(true); } }), "Error updating player gold amount in DonationRepository : "); } @@ -223,4 +224,16 @@ public class DonationRepository extends RepositoryBase { new AsyncJsonWebCall(_webAddress + "PlayerAccount/ApplyKits").Execute(playerName); } + + public Donor retrieveDonorInfo(ResultSet resultSet) throws SQLException + { + Donor donor = new Donor(); + + while (resultSet.next()) + { + donor.addGold(resultSet.getInt(1)); + } + + return donor; + } } \ No newline at end of file