diff --git a/CHANGELOG.md b/CHANGELOG.md index 35263cf4..ec5032c9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,8 @@ This is the rolling changelog for TShock for Terraria. Use past tense when addin ## Upcoming changes (TShock 5.0.0) * Reduced load/save console spam. (@SignatureBeef, @YehnBeep) +* Replaced SQLite library with Microsoft.Data.Sqlite for arm64 support. (@SignatureBeef) +* Initial support for MonoMod hooks on Raspberry Pi (arm64). (@kevzhao2) ## Upcoming changes diff --git a/TShockAPI/Extensions/DbExt.cs b/TShockAPI/Extensions/DbExt.cs index b4fc7c31..6d52aec2 100644 --- a/TShockAPI/Extensions/DbExt.cs +++ b/TShockAPI/Extensions/DbExt.cs @@ -65,13 +65,13 @@ namespace TShockAPI.DB try { db.Open(); - using (var com = db.CreateCommand()) + var com = db.CreateCommand(); // this will be disposed via the QueryResult instance { com.CommandText = query; for (int i = 0; i < args.Length; i++) com.AddParameter("@" + i, args[i]); - return new QueryResult(db, com.ExecuteReader()); + return new QueryResult(db, com.ExecuteReader(), com); } } catch (Exception ex) @@ -117,13 +117,13 @@ namespace TShockAPI.DB { var db = olddb.CloneEx(); db.Open(); - using (var com = db.CreateCommand()) + var com = db.CreateCommand(); // this will be disposed via the QueryResult instance { com.CommandText = query; foreach (var kv in values) com.AddParameter("@" + kv.Key, kv.Value); - return new QueryResult(db, com.ExecuteReader()); + return new QueryResult(db, com.ExecuteReader(), com); } } @@ -274,11 +274,13 @@ namespace TShockAPI.DB { public IDbConnection Connection { get; protected set; } public IDataReader Reader { get; protected set; } + public IDbCommand Command { get; protected set; } - public QueryResult(IDbConnection conn, IDataReader reader) + public QueryResult(IDbConnection conn, IDataReader reader, IDbCommand command) { Connection = conn; Reader = reader; + Command = command; } ~QueryResult() @@ -301,6 +303,11 @@ namespace TShockAPI.DB Reader.Dispose(); Reader = null; } + if (Command != null) + { + Command.Dispose(); + Command = null; + } if (Connection != null) { Connection.Dispose(); diff --git a/TShockAPI/TShock.cs b/TShockAPI/TShock.cs index 798b5a5b..81c429ec 100644 --- a/TShockAPI/TShock.cs +++ b/TShockAPI/TShock.cs @@ -28,7 +28,6 @@ using System.Linq; using System.Net; using System.Reflection; using MaxMind; -using System.Data.SQLite; using MySql.Data.MySqlClient; using Newtonsoft.Json; using Rests; @@ -259,9 +258,6 @@ namespace TShockAPI //TShock handles this args.Result = OTAPI.Hooks.NetMessage.PlayerAnnounceResult.None; }; - // if sqlite.interop cannot be found, try and search the runtimes folder. this usually happens when debugging tsapi - // since it does not have the dependency installed directly - NativeLibrary.SetDllImportResolver(typeof(SQLiteConnection).Assembly, ResolveNativeDep); Main.SettingsUnlock_WorldEvil = true; @@ -322,7 +318,7 @@ namespace TShockAPI { string sql = Path.Combine(SavePath, Config.Settings.SqliteDBPath); Directory.CreateDirectory(Path.GetDirectoryName(sql)); - DB = new SQLiteConnection(string.Format("Data Source={0},Version=3", sql)); + DB = new Microsoft.Data.Sqlite.SqliteConnection(string.Format("Data Source={0}", sql)); } else if (Config.Settings.StorageType.ToLower() == "mysql") { @@ -441,8 +437,16 @@ namespace TShockAPI } catch (Exception ex) { - Log.ConsoleError("Fatal Startup Exception"); - Log.ConsoleError(ex.ToString()); + if (Log is not null) + { + Log.ConsoleError("Fatal Startup Exception"); + Log.ConsoleError(ex.ToString()); + } + else + { + Console.WriteLine("Fatal Startup Exception"); + Console.WriteLine(ex.ToString()); + } Environment.Exit(1); } } diff --git a/TShockAPI/TShockAPI.csproj b/TShockAPI/TShockAPI.csproj index 1e55a7b4..ffb1afb4 100644 --- a/TShockAPI/TShockAPI.csproj +++ b/TShockAPI/TShockAPI.csproj @@ -28,10 +28,9 @@ - - - - + + + diff --git a/TShockLauncher.Tests/TShockLauncher.Tests.csproj b/TShockLauncher.Tests/TShockLauncher.Tests.csproj index 9f321340..18e0cc78 100644 --- a/TShockLauncher.Tests/TShockLauncher.Tests.csproj +++ b/TShockLauncher.Tests/TShockLauncher.Tests.csproj @@ -7,10 +7,12 @@ - - - - + + + + runtime; build; native; contentfiles; analyzers; buildtransitive +all + diff --git a/TShockLauncher/TShockLauncher.csproj b/TShockLauncher/TShockLauncher.csproj index 26a462d3..fa29a381 100644 --- a/TShockLauncher/TShockLauncher.csproj +++ b/TShockLauncher/TShockLauncher.csproj @@ -16,17 +16,16 @@ - + ..\prebuilts\HttpServer.dll - - - - + + + diff --git a/TerrariaServerAPI b/TerrariaServerAPI index f386f7a0..047baef3 160000 --- a/TerrariaServerAPI +++ b/TerrariaServerAPI @@ -1 +1 @@ -Subproject commit f386f7a09b488bb6363cd704ddf9b7359415218f +Subproject commit 047baef38969ac1b8bc4b5c23a9f2fc7836f3751