Skip to content

Commit 1dbddf4

Browse files
committed
update(managed): Latest Version
1 parent ae6ff5a commit 1dbddf4

File tree

12 files changed

+6547
-445
lines changed

12 files changed

+6547
-445
lines changed

src/managed/API/Events/Listener.cs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,15 @@ private static unsafe EventResult CallEventHandlers(ref List<Scripting.EventHand
2727
if (functionParams.Length == j + 1) break;
2828
Type t = functionParams[j + 1].ParameterType;
2929
byte* arg = (byte*)args[j];
30-
a.Add(Internal_API.CallContext.ReadValue(ref t, ref arg));
30+
if(Cacher.ConsiderTypeAPointer(ref t))
31+
{
32+
byte* marg = (byte*)&arg;
33+
a.Add(Internal_API.CallContext.ReadValue(ref t, ref marg));
34+
}
35+
else
36+
{
37+
a.Add(Internal_API.CallContext.ReadValue(ref t, ref arg));
38+
}
3139
}
3240
returnValue = eventInfo.Callback(eventInfo.TargetInstance, a.ToArray()) ?? EventResult.Continue;
3341
}

src/managed/API/Plugin.cs

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using System.Reflection;
33
using System.Linq.Expressions;
44
using SwiftlyS2.Internal_API;
5+
using SwiftlyS2.API.Scripting;
56

67
namespace SwiftlyS2.API
78
{
@@ -27,7 +28,10 @@ public void Initialize(IntPtr ctx)
2728
Cacher.PrepareCache();
2829
Console.SetOut(new Scripting.ConsoleWriter(Console.Out));
2930
Events.Listener.StartListening();
31+
3032
RegisterEventAttribute();
33+
RegisterCommandAttribute();
34+
RegisterExportAttribute();
3135
}
3236

3337
private void RegisterEventAttribute()
@@ -43,6 +47,32 @@ private void RegisterEventAttribute()
4347
}
4448
}
4549

50+
private void RegisterCommandAttribute()
51+
{
52+
var methods = this.GetType().GetMethods(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public);
53+
foreach (var method in methods)
54+
{
55+
var attr = method.GetCustomAttribute<Commands.RegisterAttribute>();
56+
if (attr != null)
57+
{
58+
Commands.Register(attr.CommandName, (Action<int, string[], int, bool, string>)Delegate.CreateDelegate(GetMethodType(method), this, method));
59+
}
60+
}
61+
}
62+
63+
private void RegisterExportAttribute()
64+
{
65+
var methods = this.GetType().GetMethods(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public);
66+
foreach (var method in methods)
67+
{
68+
var attr = method.GetCustomAttribute<Exports.RegisterAttribute>();
69+
if (attr != null)
70+
{
71+
Exports.Register(attr.ExportName, Delegate.CreateDelegate(GetMethodType(method), this, method));
72+
}
73+
}
74+
}
75+
4676
private static Type GetMethodType(MethodInfo info)
4777
{
4878
var args = info.GetParameters();

src/managed/API/SDK/CS2/Classes.cs

Lines changed: 6112 additions & 4 deletions
Large diffs are not rendered by default.

src/managed/API/SDK/CoreClasses.cs

Lines changed: 221 additions & 221 deletions
Large diffs are not rendered by default.

src/managed/API/Scripting/Commands.cs

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,18 @@ namespace SwiftlyS2.API.Scripting
55
public class Commands
66
{
77
private static IntPtr _ctx = IntPtr.Zero;
8-
8+
9+
[AttributeUsage(AttributeTargets.Method, Inherited = false, AllowMultiple = true)]
10+
public sealed class RegisterAttribute : Attribute
11+
{
12+
public string CommandName { get; }
13+
14+
public RegisterAttribute(string CommandName)
15+
{
16+
this.CommandName = CommandName;
17+
}
18+
}
19+
920
private static void InitializeContext()
1021
{
1122
if (_ctx != IntPtr.Zero) return;
Lines changed: 12 additions & 94 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System.Text.Json;
2+
using SwiftlyS2.API.Extensions;
23
using SwiftlyS2.Internal_API;
34

45
namespace SwiftlyS2.API.Scripting
@@ -18,11 +19,11 @@ private static void InitializeContext()
1819
Action<string?, Dictionary<string, object>[]>? callback;
1920
if (!_callbacks.TryGetValue(reqID, out callback)) return EventResult.Continue;
2021
if(callback == null) return EventResult.Continue;
21-
22+
2223
ulong id = Generic.RegisterCallstack(Generic.GetCurrentPluginName(), "DatabaseCallback");
2324
callback(error, JsonSerializer.Deserialize<Dictionary<string, object>[]>(output) ?? []);
2425
Generic.UnregisterCallstack(Generic.GetCurrentPluginName(), id);
25-
26+
2627
return EventResult.Stop;
2728
});
2829
}
@@ -35,15 +36,19 @@ public DB(string connection_name): base(Internal_API.Invoker.CallNative<IntPtr>(
3536
}
3637
public bool IsConnected()
3738
{
38-
return Internal_API.Invoker.CallNative<bool>("Database", "IsConnected", Internal_API.CallKind.CoreClassFunction, m_classData);
39+
return Internal_API.Invoker.CallNative<bool>("DB", "IsConnected", Internal_API.CallKind.CoreClassFunction, m_classData);
40+
}
41+
public string GetVersion()
42+
{
43+
return Internal_API.Invoker.CallNative<string>("DB", "GetVersion", Internal_API.CallKind.CoreClassFunction, m_classData);
3944
}
40-
public QueryBuilder QueryBuilder()
45+
public QueryBuilderMySQL QueryBuilder()
4146
{
42-
return Internal_API.Invoker.CallNative<QueryBuilder>("Database", "QueryBuilder", Internal_API.CallKind.CoreClassFunction, m_classData);
47+
return new(this);
4348
}
4449
public string EscapeString(string value)
4550
{
46-
return Internal_API.Invoker.CallNative<string>("Database", "EscapeString", Internal_API.CallKind.CoreClassFunction, m_classData, value) ?? "";
51+
return Internal_API.Invoker.CallNative<string>("DB", "EscapeString", Internal_API.CallKind.CoreClassFunction, m_classData, value) ?? "";
4752
}
4853
public void Query(string query, Action<string?, Dictionary<string, object>[]> callback)
4954
{
@@ -54,7 +59,7 @@ public void Query(string query, Action<string?, Dictionary<string, object>[]> ca
5459
}
5560

5661
_callbacks.Add(callbackUUID, callback);
57-
Internal_API.Invoker.CallNative("Database", "Query", Internal_API.CallKind.CoreClassFunction, m_classData, query, callbackUUID);
62+
Internal_API.Invoker.CallNative("DB", "Query", Internal_API.CallKind.CoreClassFunction, m_classData, query, callbackUUID);
5863
}
5964
public void QueryParams(string query, Dictionary<string, object> param, Action<string?, Dictionary<string, object>[]> callback)
6065
{
@@ -75,92 +80,5 @@ public void QueryParams(string query, Dictionary<string, object> param, Action<s
7580
Query(query, callback);
7681
}
7782
}
78-
79-
public class QueryBuilder : ClassData
80-
{
81-
public QueryBuilder(): base(Internal_API.Invoker.CallNative<IntPtr>("QueryBuilder", "QueryBuilder", CallKind.ClassFunction))
82-
{
83-
}
84-
public QueryBuilder Table(string table_name)
85-
{
86-
return Internal_API.Invoker.CallNative<QueryBuilder>("QueryBuilder", "Table", Internal_API.CallKind.ClassFunction, m_classData, table_name);
87-
}
88-
public QueryBuilder Select(string[] columns)
89-
{
90-
return Internal_API.Invoker.CallNative<QueryBuilder>("QueryBuilder", "Select", Internal_API.CallKind.ClassFunction, m_classData, (object)columns);
91-
}
92-
public QueryBuilder Insert(Dictionary<string, object> values)
93-
{
94-
return Internal_API.Invoker.CallNative<QueryBuilder>("QueryBuilder", "Insert", Internal_API.CallKind.ClassFunction, m_classData, values);
95-
}
96-
public QueryBuilder Update(Dictionary<string, object> values)
97-
{
98-
return Internal_API.Invoker.CallNative<QueryBuilder>("QueryBuilder", "Update", Internal_API.CallKind.ClassFunction, m_classData, values);
99-
}
100-
public QueryBuilder Delete()
101-
{
102-
return Internal_API.Invoker.CallNative<QueryBuilder>("QueryBuilder", "Delete", Internal_API.CallKind.ClassFunction, m_classData);
103-
}
104-
public QueryBuilder Where(string column, string oper, object value)
105-
{
106-
return Internal_API.Invoker.CallNative<QueryBuilder>("QueryBuilder", "Where", Internal_API.CallKind.ClassFunction, m_classData, column, oper, value);
107-
}
108-
public QueryBuilder OrWhere(string column, string oper, object value)
109-
{
110-
return Internal_API.Invoker.CallNative<QueryBuilder>("QueryBuilder", "OrWhere", Internal_API.CallKind.ClassFunction, m_classData, column, oper, value);
111-
}
112-
public QueryBuilder Join(string table_name, string condition, string join_type)
113-
{
114-
return Internal_API.Invoker.CallNative<QueryBuilder>("QueryBuilder", "Join", Internal_API.CallKind.ClassFunction, m_classData, table_name, condition, join_type);
115-
}
116-
public QueryBuilder OrderBy(Dictionary<string, string> columns)
117-
{
118-
return Internal_API.Invoker.CallNative<QueryBuilder>("QueryBuilder", "OrderBy", Internal_API.CallKind.ClassFunction, m_classData, columns);
119-
}
120-
public QueryBuilder Limit(int count)
121-
{
122-
return Internal_API.Invoker.CallNative<QueryBuilder>("QueryBuilder", "Limit", Internal_API.CallKind.ClassFunction, m_classData, count);
123-
}
124-
public QueryBuilder GroupBy(string[] columns)
125-
{
126-
return Internal_API.Invoker.CallNative<QueryBuilder>("QueryBuilder", "GroupBy", Internal_API.CallKind.ClassFunction, m_classData, (object)columns);
127-
}
128-
public QueryBuilder Create(Dictionary<string, string> values)
129-
{
130-
return Internal_API.Invoker.CallNative<QueryBuilder>("QueryBuilder", "Create", Internal_API.CallKind.ClassFunction, m_classData, values);
131-
}
132-
public QueryBuilder Alter(Dictionary<string, string> add_columns, Dictionary<string, string> remove_columns, Dictionary<string, string> modify_columns)
133-
{
134-
return Internal_API.Invoker.CallNative<QueryBuilder>("QueryBuilder", "Alter", Internal_API.CallKind.ClassFunction, m_classData, add_columns, remove_columns, modify_columns);
135-
}
136-
public QueryBuilder Drop()
137-
{
138-
return Internal_API.Invoker.CallNative<QueryBuilder>("QueryBuilder", "Drop", Internal_API.CallKind.ClassFunction, m_classData);
139-
}
140-
public QueryBuilder OnDuplicate(Dictionary<string, object> update_value)
141-
{
142-
return Internal_API.Invoker.CallNative<QueryBuilder>("QueryBuilder", "OnDuplicate", Internal_API.CallKind.ClassFunction, m_classData, update_value);
143-
}
144-
public QueryBuilder Having(string condition)
145-
{
146-
return Internal_API.Invoker.CallNative<QueryBuilder>("QueryBuilder", "Having", Internal_API.CallKind.ClassFunction, m_classData, condition);
147-
}
148-
public QueryBuilder Distinct()
149-
{
150-
return Internal_API.Invoker.CallNative<QueryBuilder>("QueryBuilder", "Distinct", Internal_API.CallKind.ClassFunction, m_classData);
151-
}
152-
public QueryBuilder Offset(int offset)
153-
{
154-
return Internal_API.Invoker.CallNative<QueryBuilder>("QueryBuilder", "Offset", Internal_API.CallKind.ClassFunction, m_classData, offset);
155-
}
156-
public QueryBuilder Union(string query, bool all)
157-
{
158-
return Internal_API.Invoker.CallNative<QueryBuilder>("QueryBuilder", "Union", Internal_API.CallKind.ClassFunction, m_classData, query, all);
159-
}
160-
public void Execute(Action<string,object[]> callback)
161-
{
162-
Internal_API.Invoker.CallNative("QueryBuilder", "Execute", Internal_API.CallKind.ClassFunction, m_classData, callback);
163-
}
164-
}
16583
}
16684
}

src/managed/API/Scripting/Events.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
using System.Reflection;
2+
using System.Text;
23
using System.Text.Json;
3-
using SwiftlyS2.API.Events;
44
using SwiftlyS2.Internal_API;
55

66
namespace SwiftlyS2.API.Scripting

src/managed/API/Scripting/Exports.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,17 @@
22
{
33
public static class Exports
44
{
5+
[AttributeUsage(AttributeTargets.Method, Inherited = false, AllowMultiple = true)]
6+
public sealed class RegisterAttribute : Attribute
7+
{
8+
public string ExportName { get; }
9+
10+
public RegisterAttribute(string ExportName)
11+
{
12+
this.ExportName = ExportName;
13+
}
14+
}
15+
516
public static void Call(string plugin_name, string name, params object[] args)
617
{
718
var output = Events.TriggerEvent($"export:{plugin_name}:{name}", args);

src/managed/API/Scripting/Menus.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,12 @@ private static void InitializeContext()
1111
if (_ctx != IntPtr.Zero) return;
1212
_ctx = Invoker.CallNative<IntPtr>("Menus", "Menus", CallKind.ClassFunction);
1313
}
14-
public static void Register(string id, string title, string color, string[] options, string? kind)
14+
public static void Register(string id, string title, string color, string[][] options, string? kind)
1515
{
1616
InitializeContext();
1717
Internal_API.Invoker.CallNative("Menus", "Register", Internal_API.CallKind.CoreClassFunction, _ctx, id, title, color, (object)options, kind);
1818
}
19-
public static void RegisterTemporary(string id, string title, string color, string[] options, string? kind)
19+
public static void RegisterTemporary(string id, string title, string color, string[][] options, string? kind)
2020
{
2121
InitializeContext();
2222
Internal_API.Invoker.CallNative("Menus", "RegisterTemporary", Internal_API.CallKind.CoreClassFunction, _ctx, id, title, color, (object)options, kind);

0 commit comments

Comments
 (0)