mirror of
https://github.com/AppleDash/SaneEconomy.git
synced 2024-09-27 14:12:58 +02:00
Experimental async MySQL implementation. Closes #2.
This commit is contained in:
parent
eaca555fe4
commit
1f980b9fc8
@ -1,5 +1,5 @@
|
||||
group 'org.appledash'
|
||||
version '0.2.1-SNAPSHOT'
|
||||
version '0.3.0-SNAPSHOT'
|
||||
|
||||
apply plugin: 'java'
|
||||
|
||||
|
@ -99,6 +99,9 @@ public class SaneEconomy extends JavaPlugin {
|
||||
}
|
||||
|
||||
getLogger().info("Connection successful!");
|
||||
getLogger().info("Performing initial data load...");
|
||||
mySQLBackend.reloadData();
|
||||
getLogger().info("Data loaded!");
|
||||
} else {
|
||||
getLogger().severe("Unknown storage backend " + backendType + "!");
|
||||
return false;
|
||||
|
@ -1,9 +1,13 @@
|
||||
package org.appledash.saneeconomy.economy.backend.type;
|
||||
|
||||
import org.appledash.saneeconomy.SaneEconomy;
|
||||
import org.appledash.saneeconomy.economy.backend.EconomyStorageBackend;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.sql.*;
|
||||
import java.util.HashMap;
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* Created by AppleDash on 6/14/2016.
|
||||
@ -14,6 +18,8 @@ public class EconomyStorageBackendMySQL implements EconomyStorageBackend {
|
||||
private final String dbUser;
|
||||
private final String dbPassword;
|
||||
|
||||
private final HashMap<UUID, Double> playerBalances = new HashMap<>();
|
||||
|
||||
public EconomyStorageBackendMySQL(String dbUrl, String dbUser, String dbPassword) {
|
||||
this.dbUrl = dbUrl;
|
||||
this.dbUser = dbUser;
|
||||
@ -55,47 +61,58 @@ public class EconomyStorageBackendMySQL implements EconomyStorageBackend {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized boolean accountExists(Player player) {
|
||||
return accountExists(player, openConnection());
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized double getBalance(Player player) {
|
||||
public void reloadData() {
|
||||
Connection conn = openConnection();
|
||||
try {
|
||||
PreparedStatement statement = conn.prepareStatement("SELECT balance FROM `player_balances` WHERE `player_uuid` = ?");
|
||||
statement.setString(1, player.getUniqueId().toString());
|
||||
PreparedStatement ps = conn.prepareStatement("SELECT * FROM `player_balances`");
|
||||
ResultSet rs = ps.executeQuery();
|
||||
|
||||
ResultSet rs = statement.executeQuery();
|
||||
playerBalances.clear();
|
||||
|
||||
if (rs.next()) {
|
||||
double bal = rs.getDouble("balance");
|
||||
conn.close();
|
||||
return bal;
|
||||
while (rs.next()) {
|
||||
playerBalances.put(UUID.fromString(rs.getString("player_uuid")), rs.getDouble("balance"));
|
||||
}
|
||||
|
||||
conn.close();
|
||||
} catch (SQLException e) {
|
||||
throw new RuntimeException("SQL error has occurred.", e);
|
||||
throw new RuntimeException("Failed to reload data from SQL.", e);
|
||||
}
|
||||
|
||||
return 0.0D;
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized void setBalance(Player player, double newBalance) {
|
||||
Connection conn = openConnection();
|
||||
ensureAccountExists(player, conn);
|
||||
try {
|
||||
PreparedStatement statement = conn.prepareStatement("UPDATE `player_balances` SET balance = ? WHERE `player_uuid` = ?");
|
||||
statement.setDouble(1, newBalance);
|
||||
statement.setString(2, player.getUniqueId().toString());
|
||||
statement.executeUpdate();
|
||||
conn.close();
|
||||
} catch (SQLException e) {
|
||||
throw new RuntimeException("SQL error has occurred.", e);
|
||||
public synchronized boolean accountExists(Player player) {
|
||||
return playerBalances.containsKey(player.getUniqueId());
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized double getBalance(Player player) {
|
||||
if (!accountExists(player)) {
|
||||
return 0.0D;
|
||||
}
|
||||
|
||||
return playerBalances.get(player.getUniqueId());
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized void setBalance(final Player player, final double newBalance) {
|
||||
final double oldBalance = playerBalances.get(player.getUniqueId());
|
||||
playerBalances.put(player.getUniqueId(), newBalance);
|
||||
|
||||
Bukkit.getServer().getScheduler().scheduleAsyncDelayedTask(SaneEconomy.getInstance(), () -> {
|
||||
Connection conn = openConnection();
|
||||
ensureAccountExists(player, conn);
|
||||
try {
|
||||
PreparedStatement statement = conn.prepareStatement("UPDATE `player_balances` SET balance = ? WHERE `player_uuid` = ?");
|
||||
statement.setDouble(1, newBalance);
|
||||
statement.setString(2, player.getUniqueId().toString());
|
||||
statement.executeUpdate();
|
||||
conn.close();
|
||||
} catch (SQLException e) {
|
||||
/* Roll it back */
|
||||
playerBalances.put(player.getUniqueId(), oldBalance);
|
||||
throw new RuntimeException("SQL error has occurred.", e);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -1,6 +1,6 @@
|
||||
name: SaneEconomy
|
||||
main: org.appledash.saneeconomy.SaneEconomy
|
||||
version: 0.2.1
|
||||
version: 0.3.0
|
||||
commands:
|
||||
balance:
|
||||
aliases: [bal]
|
||||
|
Loading…
Reference in New Issue
Block a user