Skip to content

Commit b946f59

Browse files
committed
[NativeAPI] Sync and fix
1 parent 8f2787e commit b946f59

File tree

7 files changed

+89
-10
lines changed

7 files changed

+89
-10
lines changed

Lagrange.Core.NativeAPI/NativeModel/Message/BotMessageStruct.cs

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,15 +83,15 @@ public static implicit operator BotMessageStruct(BotMessage message)
8383
entities[i] = new TypedEntityStruct()
8484
{
8585
Type = (int)EntityType.RecordEntity,
86-
Entity = Marshal.AllocHGlobal(Marshal.SizeOf<RecordEntity>())
86+
Entity = Marshal.AllocHGlobal(Marshal.SizeOf<RecordEntityStruct>())
8787
};
8888
Marshal.StructureToPtr((RecordEntityStruct)recordEntity, entities[i].Entity, false);
8989
break;
9090
case ReplyEntity replyEntity:
9191
entities[i] = new TypedEntityStruct()
9292
{
9393
Type = (int)EntityType.ReplyEntity,
94-
Entity = Marshal.AllocHGlobal(Marshal.SizeOf<ReplyEntity>())
94+
Entity = Marshal.AllocHGlobal(Marshal.SizeOf<ReplyEntityStruct>())
9595
};
9696
Marshal.StructureToPtr((ReplyEntityStruct)replyEntity, entities[i].Entity, false);
9797
break;
@@ -111,6 +111,14 @@ public static implicit operator BotMessageStruct(BotMessage message)
111111
};
112112
Marshal.StructureToPtr((VideoEntityStruct)videoEntity, entities[i].Entity, false);
113113
break;
114+
case MultiMsgEntity multiMsgEntity:
115+
entities[i] = new TypedEntityStruct()
116+
{
117+
Type = (int)EntityType.MultiMsgEntity,
118+
Entity = Marshal.AllocHGlobal(Marshal.SizeOf<MultiMsgEntityStruct>())
119+
};
120+
Marshal.StructureToPtr((MultiMsgEntityStruct)multiMsgEntity, entities[i].Entity, false);
121+
break;
114122
}
115123
}
116124

Lagrange.Core.NativeAPI/NativeModel/Message/Entity/EntityType.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,6 @@ public enum EntityType
88
ReplyEntity = 3,
99
VideoEntity = 4,
1010
TextEntity = 5,
11+
MultiMsgEntity = 6,
1112
}
1213
}

Lagrange.Core.NativeAPI/NativeModel/Message/Entity/MentionEntityStruct.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ public static implicit operator MentionEntityStruct(MentionEntity entity)
1818
return new MentionEntityStruct()
1919
{
2020
Uin = entity.Uin,
21-
Display = Encoding.UTF8.GetBytes(entity.Display)
21+
Display = Encoding.UTF8.GetBytes(entity.Display ?? string.Empty)
2222
};
2323
}
2424
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
using System.Runtime.InteropServices;
2+
using System.Text;
3+
using Lagrange.Core.NativeAPI.NativeModel.Common;
4+
5+
namespace Lagrange.Core.NativeAPI.NativeModel.Message.Entity;
6+
7+
[StructLayout(LayoutKind.Sequential)]
8+
public struct MultiMsgEntityStruct
9+
{
10+
public MultiMsgEntityStruct() { }
11+
12+
public IntPtr Messages;
13+
14+
public int MessageCount;
15+
16+
public ByteArrayNative ResId;
17+
18+
public static implicit operator MultiMsgEntityStruct(Lagrange.Core.Message.Entities.MultiMsgEntity entity)
19+
{
20+
var messagesStructs = entity.Messages
21+
.Select(m => (BotMessageStruct)m)
22+
.ToArray();
23+
24+
IntPtr messagesPtr = Marshal.AllocHGlobal(Marshal.SizeOf<BotMessageStruct>() * messagesStructs.Length);
25+
26+
for (int i = 0; i < messagesStructs.Length; i++)
27+
{
28+
Marshal.StructureToPtr(messagesStructs[i], messagesPtr + i * Marshal.SizeOf<BotMessageStruct>(), false);
29+
}
30+
31+
return new MultiMsgEntityStruct
32+
{
33+
Messages = messagesPtr,
34+
MessageCount = messagesStructs.Length,
35+
ResId = entity.ResId != null
36+
? Encoding.UTF8.GetBytes(entity.ResId)
37+
: []
38+
};
39+
}
40+
}
Lines changed: 33 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,47 @@
11
using System.Runtime.InteropServices;
2+
using Lagrange.Core.Common.Entity;
23
using Lagrange.Core.Message.Entities;
34

45
namespace Lagrange.Core.NativeAPI.NativeModel.Message.Entity
56
{
67
[StructLayout(LayoutKind.Sequential)]
7-
public class ReplyEntityStruct
8+
public struct ReplyEntityStruct
89
{
910
public ReplyEntityStruct() { }
11+
12+
public ulong SrcUid;
13+
14+
public int SrcSequence;
15+
16+
public IntPtr Source;
17+
18+
public int SourceType;
1019

1120
public static implicit operator ReplyEntityStruct(ReplyEntity entity)
1221
{
13-
return new ReplyEntityStruct() { };
14-
throw new NotImplementedException();
22+
var type = entity.Source switch
23+
{
24+
BotFriend => 1,
25+
BotGroupMember => 2,
26+
BotStranger => 3,
27+
_ => 0
28+
};
29+
30+
var sourcePtr = type switch
31+
{
32+
1 => Marshal.AllocHGlobal(Marshal.SizeOf<BotFriend>()),
33+
2 => Marshal.AllocHGlobal(Marshal.SizeOf<BotGroupMember>()),
34+
3 => Marshal.AllocHGlobal(Marshal.SizeOf<BotStranger>()),
35+
_ => IntPtr.Zero
36+
};
37+
38+
return new ReplyEntityStruct
39+
{
40+
SrcUid = entity.SrcUid,
41+
SrcSequence = entity.SrcSequence,
42+
Source = sourcePtr,
43+
SourceType = type
44+
};
1545
}
1646
}
1747
}

Lagrange.Core.NativeAPI/SendMessageEntryPoint.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,7 @@ public static IntPtr SendFriendMessage(int index, int id, long friendUin)
171171
return IntPtr.Zero;
172172
}
173173

174-
var message = context.BotContext.SendFriendMessage(chain, friendUin).GetAwaiter().GetResult();
174+
var message = context.BotContext.SendFriendMessage(friendUin, chain).GetAwaiter().GetResult();
175175

176176
IntPtr messagePtr = Marshal.AllocHGlobal(Marshal.SizeOf<BotMessageStruct>());
177177
Marshal.StructureToPtr((BotMessageStruct)message, messagePtr, false);
@@ -193,7 +193,7 @@ public static IntPtr SendGroupMessage(int index, int id, long groupUin)
193193
return IntPtr.Zero;
194194
}
195195

196-
var message = context.BotContext.SendGroupMessage(chain, groupUin).GetAwaiter().GetResult();
196+
var message = context.BotContext.SendGroupMessage(groupUin, chain).GetAwaiter().GetResult();
197197

198198
IntPtr messagePtr = Marshal.AllocHGlobal(Marshal.SizeOf<BotMessageStruct>());
199199
Marshal.StructureToPtr((BotMessageStruct)message, messagePtr, false);

Lagrange.Core/Internal/Context/ServiceContext.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ public ValueTask<ProtocolEvent> Resolve(SsoPacket ssoPacket)
6262
{
6363
if (!_services.TryGetValue(ssoPacket.Command, out var service)) throw new ServiceNotFoundException(ssoPacket.Command);
6464

65-
if (!_disabledLog.Contains(ssoPacket.Command)) _context.LogDebug(Tag, "Incoming SSOFrame: {0}", ssoPacket.Command);
65+
if (!_disabledLog.Contains(ssoPacket.Command)) _context.LogTrace(Tag, "Incoming SSOFrame: {0}", ssoPacket.Command);
6666
return service.Parse(ssoPacket.Data, _context);
6767
}
6868

@@ -71,7 +71,7 @@ public ValueTask<ProtocolEvent> Resolve(SsoPacket ssoPacket)
7171
if (!_servicesEventType.TryGetValue(@event.GetType(), out var handler)) return default;
7272

7373
var (attr, service) = handler;
74-
if (!handler.Attribute.DisableLog) _context.LogDebug(Tag, "Outgoing SSOFrame: {0}", handler.Attribute.Command);
74+
if (!handler.Attribute.DisableLog) _context.LogTrace(Tag, "Outgoing SSOFrame: {0}", handler.Attribute.Command);
7575

7676
return (new SsoPacket(attr.Command, await service.Build(@event, _context), GetNewSequence()), attr);
7777
}

0 commit comments

Comments
 (0)