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