Minor code cleanup

This commit is contained in:
UnknownShadow200 2018-06-06 17:41:27 +10:00
parent f24fbe0250
commit 53751c4a8d
16 changed files with 74 additions and 108 deletions

View File

@ -189,53 +189,43 @@ namespace MCGalaxy.Gui {
void Main_UpdateMapList() { void Main_UpdateMapList() {
Level[] loaded = LevelInfo.Loaded.Items; Level[] loaded = LevelInfo.Loaded.Items;
string selected = GetSelected(main_Maps);
// Try to keep the same selection on update // Always new data source, avoids "-1 does not have a value" when clicking a row
string selected = null; LevelCollection lc = new LevelCollection();
var selectedRows = main_Maps.SelectedRows;
if (selectedRows.Count > 0) {
selected = (string)selectedRows[0].Cells[0].Value;
}
// Update the data source and control
lc = new LevelCollection();
foreach (Level lvl in loaded) { lc.Add(lvl); } foreach (Level lvl in loaded) { lc.Add(lvl); }
main_Maps.DataSource = lc; main_Maps.DataSource = lc;
// Reselect map Reselect(main_Maps, selected);
if (selected != null) {
foreach (DataGridViewRow row in main_Maps.Rows) {
string name = (string)row.Cells[0].Value;
if (name.CaselessEq(selected)) row.Selected = true;
}
}
main_Maps.Refresh(); main_Maps.Refresh();
} }
void Main_UpdatePlayersList() { void Main_UpdatePlayersList() {
UpdateNotifyIconText(); UpdateNotifyIconText();
Player[] players = PlayerInfo.Online.Items; Player[] players = PlayerInfo.Online.Items;
string selected = GetSelected(main_Players);
// Try to keep the same selection on update PlayerCollection pc = new PlayerCollection();
string selected = null;
var selectedRows = main_Players.SelectedRows;
if (selectedRows.Count > 0) {
selected = (string)selectedRows[0].Cells[0].Value;
}
// Update the data source and control
pc = new PlayerCollection();
foreach (Player pl in players) { pc.Add(pl); } foreach (Player pl in players) { pc.Add(pl); }
main_Players.DataSource = pc; main_Players.DataSource = pc;
// Reselect player Reselect(main_Players, selected);
if (selected != null) { main_Players.Refresh();
foreach (DataGridViewRow row in main_Players.Rows) { }
static string GetSelected(DataGridView view) {
DataGridViewSelectedRowCollection selected = view.SelectedRows;
if (selected.Count == 0) return null;
return (string)selected[0].Cells[0].Value;
}
static void Reselect(DataGridView view, string selected) {
if (selected == null) return;
foreach (DataGridViewRow row in view.Rows) {
string name = (string)row.Cells[0].Value; string name = (string)row.Cells[0].Value;
if (name.CaselessEq(selected)) row.Selected = true; if (name.CaselessEq(selected)) row.Selected = true;
} }
} }
main_Players.Refresh();
}
} }
} }

View File

@ -34,8 +34,6 @@ namespace MCGalaxy.Gui {
delegate void VoidDelegate(); delegate void VoidDelegate();
bool mapgen = false; bool mapgen = false;
PlayerCollection pc;
LevelCollection lc;
public NotifyIcon notifyIcon = new NotifyIcon(); public NotifyIcon notifyIcon = new NotifyIcon();
Player curPlayer; Player curPlayer;
@ -59,11 +57,9 @@ namespace MCGalaxy.Gui {
Text = ServerConfig.Name + " - " + Server.SoftwareNameVersioned; Text = ServerConfig.Name + " - " + Server.SoftwareNameVersioned;
MakeNotifyIcon(); MakeNotifyIcon();
// Bind player list main_Players.DataSource = new PlayerCollection();
main_Players.DataSource = pc;
main_Players.Font = new Font("Calibri", 8.25f); main_Players.Font = new Font("Calibri", 8.25f);
main_Maps.DataSource = new LevelCollection();
main_Maps.DataSource = new LevelCollection(); // Otherwise "-1 does not have a value" exception when clicking a row
main_Maps.Font = new Font("Calibri", 8.25f); main_Maps.Font = new Font("Calibri", 8.25f);
} }

View File

@ -87,7 +87,7 @@ namespace MCGalaxy.Commands.Fun {
who.SetPrefix(); who.SetPrefix();
} }
team.RemoveIfEmpty(); team.DeleteIfEmpty();
Team.SaveList(); Team.SaveList();
} else { } else {
Player.Message(p, "The given player was not found. You need to use their full account name."); Player.Message(p, "The given player was not found. You need to use their full account name.");
@ -182,7 +182,7 @@ namespace MCGalaxy.Commands.Fun {
team.Remove(p.name); team.Remove(p.name);
p.Game.Team = null; p.Game.Team = null;
team.RemoveIfEmpty(); team.DeleteIfEmpty();
p.SetPrefix(); p.SetPrefix();
Team.SaveList(); Team.SaveList();
} }

View File

@ -40,7 +40,7 @@ namespace MCGalaxy.Commands.Maintenance {
if (args[0] == null) return; if (args[0] == null) return;
Player who = PlayerInfo.FindExact(args[0]); Player who = PlayerInfo.FindExact(args[0]);
if (args.Length == 1) { if (args.Length == 1) {
Player.Message(p, Colors.red + "You must specify a type to modify."); Player.Message(p, "&cYou must specify a type to modify.");
MessageValidTypes(p); return; MessageValidTypes(p); return;
} }
@ -98,7 +98,7 @@ namespace MCGalaxy.Commands.Maintenance {
} else if (opt == "titlecolor") { } else if (opt == "titlecolor") {
SetColor(p, args, PlayerData.ColumnTColor, who, v => who.titlecolor = v); SetColor(p, args, PlayerData.ColumnTColor, who, v => who.titlecolor = v);
} else { } else {
Player.Message(p, Colors.red + "Invalid type."); Player.Message(p, "&cInvalid type");
MessageValidTypes(p); MessageValidTypes(p);
} }
} }

View File

@ -45,7 +45,7 @@ namespace MCGalaxy.Commands.Moderation {
} }
if (HttpUtil.IsPrivateIP(ip)) { if (HttpUtil.IsPrivateIP(ip)) {
Player.Message(p, Colors.red + "Player has an internal IP, cannot trace"); return; Player.Message(p, "&cPlayer has an internal IP, cannot trace"); return;
} }
string country = null; string country = null;

View File

@ -32,7 +32,7 @@ namespace MCGalaxy.Commands.Misc {
if (message.Length == 0) { Help(p); return; } if (message.Length == 0) { Help(p); return; }
if (p.hackrank) { if (p.hackrank) {
Player.Message(p, Colors.red + "You have already hacked a rank!"); return; Player.Message(p, "&cYou have already hacked a rank!"); return;
} }
Group grp = Matcher.FindRanks(p, message); Group grp = Matcher.FindRanks(p, message);

View File

@ -48,7 +48,7 @@ namespace MCGalaxy.DB {
if (!p.level.Props[block].IsMessageBlock) return; if (!p.level.Props[block].IsMessageBlock) return;
try { try {
if (!Database.Backend.TableExists("Messages" + p.level.name)) return; if (!Database.TableExists("Messages" + p.level.name)) return;
DataTable messages = Database.Backend.GetRows("Messages" + p.level.name, "*", DataTable messages = Database.Backend.GetRows("Messages" + p.level.name, "*",
"WHERE X=@0 AND Y=@1 AND Z=@2", x, y, z); "WHERE X=@0 AND Y=@1 AND Z=@2", x, y, z);
int last = messages.Rows.Count - 1; int last = messages.Rows.Count - 1;
@ -65,7 +65,7 @@ namespace MCGalaxy.DB {
if (!p.level.Props[block].IsPortal) return; if (!p.level.Props[block].IsPortal) return;
try { try {
if (!Database.Backend.TableExists("Portals" + p.level.name)) return; if (!Database.TableExists("Portals" + p.level.name)) return;
DataTable portals = Database.Backend.GetRows("Portals" + p.level.name, "*", DataTable portals = Database.Backend.GetRows("Portals" + p.level.name, "*",
"WHERE EntryX=@0 AND EntryY=@1 AND EntryZ=@2", x, y, z); "WHERE EntryX=@0 AND EntryY=@1 AND EntryZ=@2", x, y, z);
int last = portals.Rows.Count - 1; int last = portals.Rows.Count - 1;

View File

@ -25,9 +25,7 @@ namespace MCGalaxy.SQL {
public static IDatabaseBackend Backend; public static IDatabaseBackend Backend;
/// <summary> Returns whether the given table exists in the database. </summary> /// <summary> Returns whether the given table exists in the database. </summary>
public static bool TableExists(string table) { public static bool TableExists(string table) { return Backend.TableExists(table); }
return Backend.TableExists(table);
}
/// <summary> Executes an SQL command that does not return any results. </summary> /// <summary> Executes an SQL command that does not return any results. </summary>
@ -74,7 +72,7 @@ namespace MCGalaxy.SQL {
static void DoDatabaseCall(ParameterisedQuery query, string sql, bool createDB, static void DoDatabaseCall(ParameterisedQuery query, string sql, bool createDB,
DataTable results, ReaderCallback callback, params object[] args) { DataTable results, ReaderCallback callback, params object[] args) {
BindParams(query, args); query.parameters = args;
string connString = Backend.ConnectionString; string connString = Backend.ConnectionString;
Exception e = null; Exception e = null;
@ -88,38 +86,27 @@ namespace MCGalaxy.SQL {
query.Fill(sql, connString, results); query.Fill(sql, connString, results);
} }
query.ClearParams(); query.parameters = null;
return; return;
} catch (Exception ex) { } catch (Exception ex) {
e = ex; // try yet again e = ex; // try yet again
} }
} }
query.parameters = null;
File.AppendAllText("MySQL_error.log", DateTime.Now + " " + sql + "\r\n"); File.AppendAllText("MySQL_error.log", DateTime.Now + " " + sql + "\r\n");
Logger.LogError(e); Logger.LogError(e);
} }
static readonly object idsLock = new object(); volatile static string[] ids;
static string[] ids = null;
static void BindParams(ParameterisedQuery query, object[] args) {
if (args == null || args.Length == 0) return;
string[] names = GetParamNames(args.Length);
for (int i = 0; i < args.Length; i++)
query.AddParam(names[i], args[i]);
}
internal static string[] GetParamNames(int count) { internal static string[] GetParamNames(int count) {
// Avoid allocation overhead from string concat every query by caching // Avoid allocation overhead from string concat every query by caching
string[] names = null; string[] names = ids;
lock (idsLock) { if (names == null || count > names.Length) {
names = ids; names = new string[count];
if (ids == null || count > ids.Length) { for (int i = 0; i < names.Length; i++) { names[i] = "@" + i; }
ids = new string[count]; ids = names;
for (int i = 0; i < count; i++)
ids[i] = "@" + i;
names = ids;
}
} }
return names; return names;
} }

View File

@ -28,23 +28,12 @@ namespace MCGalaxy.SQL {
/// <summary> Represents an SQL command or query, that takes named parameters/arguments. </summary> /// <summary> Represents an SQL command or query, that takes named parameters/arguments. </summary>
public abstract class ParameterisedQuery { public abstract class ParameterisedQuery {
protected Dictionary<string, object> parameters = new Dictionary<string, object>(); internal object[] parameters;
/// <summary> Adds a named parameter/argument to this query. </summary>
public void AddParam(string name, object param) { parameters.Add(name, param); }
/// <summary> Clears the cached named parameters/arguments. </summary>
public void ClearParams() { parameters.Clear(); }
protected abstract bool MultipleSchema { get; } protected abstract bool MultipleSchema { get; }
protected abstract IDbConnection CreateConnection(string connString); protected abstract IDbConnection CreateConnection(string connString);
protected abstract IDbCommand CreateCommand(string query, IDbConnection conn); protected abstract IDbCommand CreateCommand(string query, IDbConnection conn);
protected abstract DbDataAdapter CreateDataAdapter(string query, IDbConnection conn); protected abstract DbDataAdapter CreateDataAdapter(string query, IDbConnection conn);
protected abstract IDbDataParameter CreateParameter(); protected abstract IDbDataParameter CreateParameter();
@ -97,11 +86,15 @@ namespace MCGalaxy.SQL {
} }
void FillParams(IDbCommand cmd) { void FillParams(IDbCommand cmd) {
foreach (var param in parameters) { object[] args = parameters;
IDbDataParameter dParam = CreateParameter(); if (args == null || args.Length == 0) return;
dParam.ParameterName = param.Key;
dParam.Value = param.Value; string[] names = Database.GetParamNames(args.Length);
cmd.Parameters.Add(dParam); for (int i = 0; i < args.Length; i++) {
IDbDataParameter dbParam = CreateParameter();
dbParam.ParameterName = names[i];
dbParam.Value = args[i];
cmd.Parameters.Add(dbParam);
} }
} }
} }

View File

@ -42,8 +42,10 @@ namespace MCGalaxy.Games {
if (Status != CountdownGameStatus.RoundInProgress || !FreezeMode) return; if (Status != CountdownGameStatus.RoundInProgress || !FreezeMode) return;
if (!Remaining.Contains(p)) return; if (!Remaining.Contains(p)) return;
if (next.X != p.CountdownFreezeX || next.Z != p.CountdownFreezeZ) { int freezeX = p.Extras.GetInt("MCG_CD_X");
next.X = p.CountdownFreezeX; next.Z = p.CountdownFreezeZ; int freezeZ = p.Extras.GetInt("MCG_CD_Z");
if (next.X != freezeX || next.Z != freezeZ) {
next.X = freezeX; next.Z = freezeZ;
p.SendPos(Entities.SelfID, next, new Orientation(yaw, pitch)); p.SendPos(Entities.SelfID, next, new Orientation(yaw, pitch));
} }

View File

@ -104,8 +104,8 @@ namespace MCGalaxy.Games {
Player[] players = Players.Items; Player[] players = Players.Items;
foreach (Player pl in players) { foreach (Player pl in players) {
Position pos = pl.Pos; Position pos = pl.Pos;
pl.CountdownFreezeX = pos.X; pl.Extras.PutInt("MCG_CD_X", pos.X);
pl.CountdownFreezeZ = pos.Z; pl.Extras.PutInt("MCG_CD_Z", pos.Z);
} }
RemoveAllSquareBorders(); RemoveAllSquareBorders();
} }

View File

@ -50,7 +50,7 @@ namespace MCGalaxy.Games {
return Members.CaselessRemove(name); return Members.CaselessRemove(name);
} }
public void RemoveIfEmpty() { public void DeleteIfEmpty() {
if (Members.Count > 0) return; if (Members.Count > 0) return;
Teams.Remove(this); Teams.Remove(this);
} }

View File

@ -63,8 +63,9 @@ namespace MCGalaxy {
} }
static void RenameDatabaseTables(string src, string dst) { static void RenameDatabaseTables(string src, string dst) {
if (Database.Backend.TableExists("Block" + src)) if (Database.TableExists("Block" + src)) {
Database.Backend.RenameTable("Block" + src, "Block" + dst); Database.Backend.RenameTable("Block" + src, "Block" + dst);
}
object srcLocker = ThreadSafeCache.DBCache.GetLocker(src); object srcLocker = ThreadSafeCache.DBCache.GetLocker(src);
object dstLockder = ThreadSafeCache.DBCache.GetLocker(dst); object dstLockder = ThreadSafeCache.DBCache.GetLocker(dst);
@ -132,8 +133,9 @@ namespace MCGalaxy {
} }
static void DeleteDatabaseTables(string map) { static void DeleteDatabaseTables(string map) {
if (Database.Backend.TableExists("Block" + map)) if (Database.TableExists("Block" + map)) {
Database.Backend.DeleteTable("Block" + map); Database.Backend.DeleteTable("Block" + map);
}
object locker = ThreadSafeCache.DBCache.GetLocker(map); object locker = ThreadSafeCache.DBCache.GetLocker(map);
lock (locker) { lock (locker) {

View File

@ -143,10 +143,6 @@ namespace MCGalaxy {
/// <summary> Temp unique ID for this session only. </summary> /// <summary> Temp unique ID for this session only. </summary>
public int SessionID; public int SessionID;
//Countdown
public int CountdownFreezeX;
public int CountdownFreezeZ;
//Tnt Wars //Tnt Wars
public bool PlayingTntWars; public bool PlayingTntWars;
public int CurrentAmountOfTnt; public int CurrentAmountOfTnt;