forked from LagrangeDev/LagrangeV2
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathProgram.cs
More file actions
124 lines (103 loc) · 4.34 KB
/
Program.cs
File metadata and controls
124 lines (103 loc) · 4.34 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
using System.Runtime.InteropServices;
using System.Text;
using Lagrange.Core.NativeAPI.Test.NativeModel;
namespace Lagrange.Core.NativeAPI.Test;
class Program
{
static int _index = 0;
static TaskCompletionSource<bool> _tcs = new();
static async Task Main(string[] args)
{
var botConfig = new BotConfigStruct { };
botConfig.addr = Encoding.UTF8.GetBytes("");
IntPtr keystorePtr = IntPtr.Zero;
IntPtr botConfigPtr = Marshal.AllocHGlobal(Marshal.SizeOf(botConfig));
Marshal.StructureToPtr(botConfig, botConfigPtr, false);
_index = Wrapper.Initialize(botConfigPtr, keystorePtr, IntPtr.Zero);
Console.WriteLine($"Bot initialized with index: {_index}");
int status = Wrapper.Start(_index);
Console.WriteLine($"Bot started with status: {status}");
Marshal.FreeHGlobal(botConfigPtr);
var timer = new System.Timers.Timer(100);
timer.Elapsed += PollingProcesser;
timer.Start();
await _tcs.Task;
}
static async void PollingProcesser(Object? source, System.Timers.ElapsedEventArgs e)
{
try
{
// await GetEventCount();
await GetQrCodeEvent();
await GetLogEvent();
}
catch (Exception exception)
{
Console.WriteLine(exception);
}
}
static async Task GetEventCount()
{
await Task.Run(() =>
{
IntPtr ptr = Wrapper.GetEventCount(_index);
if (ptr == IntPtr.Zero)
{
return;
}
var eventCount = Marshal.PtrToStructure<ReverseEventCountStruct>(ptr);
Console.WriteLine($"BotCaptchaEventCount: {eventCount.BotCaptchaEventCount}");
Console.WriteLine($"BotLoginEventCount: {eventCount.BotLoginEventCount}");
Console.WriteLine($"BotLogEventCount: {eventCount.BotLogEventCount}");
Console.WriteLine($"BotMessageEventCount: {eventCount.BotMessageEventCount}");
Console.WriteLine($"BotNewDeviceVerifyEventCount: {eventCount.BotNewDeviceVerifyEventCount}");
Console.WriteLine($"BotOnlineEventCount: {eventCount.BotOnlineEventCount}");
Console.WriteLine($"BotQrCodeEventCount: {eventCount.BotQrCodeEventCount}");
Console.WriteLine($"BotQrCodeQueryEventCount: {eventCount.BotQrCodeQueryEventCount}");
Console.WriteLine($"BotRefreshKeystoreEventCount: {eventCount.BotRefreshKeystoreEventCount}");
Console.WriteLine($"BotSMSEventCount: {eventCount.BotSMSEventCount}");
Wrapper.FreeMemory(ptr);
});
}
static async Task GetLogEvent()
{
await Task.Run(() =>
{
IntPtr ptr = Wrapper.GetBotLogEvent(_index);
if (ptr == IntPtr.Zero)
{
return;
}
var logEventArray = Marshal.PtrToStructure<EventArrayStruct>(ptr);
for (int i = 0; i < logEventArray.Count; i++)
{
// 计算当前结构体的指针位置
IntPtr currentStructPtr = logEventArray.Events + i * Marshal.SizeOf<BotLogEventStruct>();
// 将指针转换为结构体
var logEvent = Marshal.PtrToStructure<BotLogEventStruct>(currentStructPtr);
// 处理日志事件
Console.WriteLine($"Log: {Encoding.UTF8.GetString(logEvent.Message.ToByteArrayWithoutFree())}");
}
Wrapper.FreeMemory(ptr);
});
}
static async Task GetQrCodeEvent()
{
await Task.Run(() =>
{
IntPtr ptr = Wrapper.GetQrCodeEvent(_index);
if (ptr == IntPtr.Zero)
{
return;
}
var qrCodeEventArray = Marshal.PtrToStructure<EventArrayStruct>(ptr);
for (int i = 0; i < qrCodeEventArray.Count; i++)
{
IntPtr currentStructPtr = qrCodeEventArray.Events + i * Marshal.SizeOf<BotQrCodeEventStruct>();
var qrCodeEvent = Marshal.PtrToStructure<BotQrCodeEventStruct>(currentStructPtr);
Console.WriteLine($"QrCodeUrl: {Encoding.UTF8.GetString(qrCodeEvent.Url.ToByteArrayWithoutFree())}");
}
Wrapper.FreeMemory(ptr);
});
}
}