diff --git a/core/command/CommandUnban.java b/core/command/CommandUnban.java index 110ee22e..743a6c78 100644 --- a/core/command/CommandUnban.java +++ b/core/command/CommandUnban.java @@ -4,8 +4,10 @@ import com.coloryr.allmusic.server.core.AllMusic; import com.coloryr.allmusic.server.core.sql.DataSql; import com.coloryr.allmusic.server.core.utils.Function; +import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.stream.Collectors; public class CommandUnban extends ACommand { @Override @@ -25,7 +27,7 @@ public class CommandUnban extends ACommand { @Override public List tab(Object player, String name, String[] args, int index) { if (args.length == index || (args.length == index + 1 )) { - return DataSql.getBanMusicList(); + return new ArrayList<>(DataSql.Cache.banMusic); } return Collections.emptyList(); diff --git a/core/command/CommandUnbanPlayer.java b/core/command/CommandUnbanPlayer.java index 0fc937ba..2c7812e1 100644 --- a/core/command/CommandUnbanPlayer.java +++ b/core/command/CommandUnbanPlayer.java @@ -3,6 +3,7 @@ package com.coloryr.allmusic.server.core.command; import com.coloryr.allmusic.server.core.AllMusic; import com.coloryr.allmusic.server.core.sql.DataSql; +import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -20,7 +21,7 @@ public class CommandUnbanPlayer implements ICommand { @Override public List tab(Object player, String name, String[] args, int index) { if (args.length == index || (args.length == index + 1 )) { - return DataSql.getBanPlayerList(); + return new ArrayList<>(DataSql.Cache.banPlayers); } return Collections.emptyList(); diff --git a/core/sql/DataSql.java b/core/sql/DataSql.java index e4a96849..35827afd 100644 --- a/core/sql/DataSql.java +++ b/core/sql/DataSql.java @@ -12,10 +12,12 @@ import java.util.List; import java.util.Locale; import java.util.Queue; import java.util.concurrent.ConcurrentLinkedQueue; +import java.util.concurrent.CopyOnWriteArraySet; +import java.util.concurrent.LinkedBlockingDeque; import java.util.concurrent.Semaphore; public class DataSql { - private static final Queue tasks = new ConcurrentLinkedQueue<>(); + private static final Queue tasks = new LinkedBlockingDeque<>(); private static final Semaphore semaphore = new Semaphore(0); /** * 创建表用 @@ -75,6 +77,11 @@ public class DataSql { " \"sid\" TEXT(60)\n" + ");"; + /** + * 缓存器 + */ + public static Cache cache = new Cache(); + /** * 数据库文件 */ @@ -103,6 +110,8 @@ public class DataSql { stat.execute(table4); stat.execute(table5); stat.close(); + + cache.updateData(); } catch (Exception e) { e.printStackTrace(); } @@ -423,6 +432,8 @@ public class DataSql { pstmt.close(); } catch (Exception e) { e.printStackTrace(); + } finally { + cache.updateMusic(); } }); } @@ -439,6 +450,8 @@ public class DataSql { pstmt.close(); } catch (Exception e) { e.printStackTrace(); + } finally { + cache.updateMusic(); } }); } @@ -450,24 +463,7 @@ public class DataSql { * @return 结果 */ public static boolean checkBanMusic(String name) { - try { - name = name.toLowerCase(Locale.ROOT); - boolean have = false; - if (connection.isReadOnly() || connection.isClosed()) { - init(); - } - Statement stat = connection.createStatement(); - ResultSet set = stat.executeQuery("SELECT id FROM allmusic_banlist WHERE sid ='" + name + "'"); - if (set.next()) { - have = true; - } - set.close(); - stat.close(); - return have; - } catch (Exception e) { - e.printStackTrace(); - } - return false; + return Cache.banMusic.contains(name); } @@ -509,6 +505,8 @@ public class DataSql { stat.close(); } catch (Exception e) { e.printStackTrace(); + } finally { + cache.updateMusic(); } }); } @@ -526,6 +524,8 @@ public class DataSql { pstmt.close(); } catch (Exception e) { e.printStackTrace(); + } finally { + cache.updatePlayer(); } }); } @@ -543,6 +543,8 @@ public class DataSql { pstmt.close(); } catch (Exception e) { e.printStackTrace(); + } finally { + cache.updatePlayer(); } }); } @@ -554,24 +556,7 @@ public class DataSql { * @return 结果 */ public static boolean checkBanPlayer(String name) { - try { - name = name.toLowerCase(Locale.ROOT); - boolean have = false; - if (connection.isReadOnly() || connection.isClosed()) { - init(); - } - Statement stat = connection.createStatement(); - ResultSet set = stat.executeQuery("SELECT id FROM allmusic_banplayer WHERE sid ='" + name + "'"); - if (set.next()) { - have = true; - } - set.close(); - stat.close(); - return have; - } catch (Exception e) { - e.printStackTrace(); - } - return false; + return Cache.banPlayers.contains(name); } /*** @@ -611,6 +596,8 @@ public class DataSql { stat.close(); } catch (Exception e) { e.printStackTrace(); + } finally { + cache.updatePlayer(); } }); } @@ -779,4 +766,25 @@ public class DataSql { } } } + + public static class Cache{ + public static CopyOnWriteArraySet banPlayers = new CopyOnWriteArraySet<>(); + public static CopyOnWriteArraySet banMusic = new CopyOnWriteArraySet<>(); + + + public void updateData(){ + updatePlayer(); + updateMusic(); + } + + public void updatePlayer(){ + banPlayers.clear(); + banPlayers.addAll(getBanPlayerList()); + } + + public void updateMusic(){ + banMusic.clear(); + banMusic.addAll(getBanMusicList()); + } + } }