Skip to content

Commit 863d5fb

Browse files
committed
[Core] Implemented GetC2CMessage
1 parent f07ca8b commit 863d5fb

5 files changed

Lines changed: 95 additions & 1 deletion

File tree

Lagrange.Core/Common/Interface/MessageExt.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,9 @@ public static Task<List<BotMessage>> GetRoamMessage(this BotContext context, Bot
2222
uint timestamp = (uint)new DateTimeOffset(target.Time).ToUnixTimeSeconds();
2323
return context.EventContext.GetLogic<MessagingLogic>().GetRoamMessage(target.Contact.Uin, timestamp, count);
2424
}
25-
25+
26+
public static Task<List<BotMessage>> GetC2CMessage(this BotContext context, string friendUid, uint startSequence, uint endSequence)
27+
=> context.EventContext.GetLogic<MessagingLogic>().GetC2CMessage(friendUid, startSequence, endSequence);
2628

2729
public static Task<bool> SendFriendFile(this BotContext context, long targetUin, Stream fileStream, string? fileName = null)
2830
=> context.EventContext.GetLogic<OperationLogic>().SendFriendFile(targetUin, fileStream, fileName);
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
using Lagrange.Core.Internal.Packets.Message;
2+
3+
namespace Lagrange.Core.Internal.Events.Message;
4+
5+
internal class GetC2CMessageEventReq(string peerUid, uint startSequence, uint endSequence) : ProtocolEvent
6+
{
7+
public string PeerUid { get; } = peerUid;
8+
9+
public uint StartSequence { get; } = startSequence;
10+
11+
public uint EndSequence { get; } = endSequence;
12+
}
13+
14+
internal class GetC2CMessageEventResp(List<CommonMessage> chains) : ProtocolEvent
15+
{
16+
public List<CommonMessage> Chains { get; } = chains;
17+
}

Lagrange.Core/Internal/Logic/MessagingLogic.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,14 @@ public async Task<List<BotMessage>> GetRoamMessage(long peerUin, uint time, uint
3030
foreach (var chain in result.Chains) messages.Add(await Parse(chain));
3131
return messages;
3232
}
33+
34+
public async Task<List<BotMessage>> GetC2CMessage(string friendUid, uint startSequence, uint endSequence)
35+
{
36+
var result = await context.EventContext.SendEvent<GetC2CMessageEventResp>(new GetC2CMessageEventReq(friendUid, startSequence, endSequence));
37+
var messages = new List<BotMessage>(result.Chains.Count);
38+
foreach (var chain in result.Chains) messages.Add(await Parse(chain));
39+
return messages;
40+
}
3341

3442
public async Task<BotMessage> SendFriendMessage(long friendUin, MessageChain chain)
3543
{
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
using Lagrange.Proto;
2+
3+
namespace Lagrange.Core.Internal.Packets.Message;
4+
5+
#pragma warning disable CS8618
6+
7+
[ProtoPackable]
8+
internal partial class SsoGetC2CMsgReq
9+
{
10+
[ProtoMember(1)] public long? PeerUin { get; set; }
11+
12+
[ProtoMember(2)] public string? PeerUid { get; set; }
13+
14+
[ProtoMember(3)] public uint StartSequence { get; set; }
15+
16+
[ProtoMember(4)] public uint EndSequence { get; set; }
17+
}
18+
19+
[ProtoPackable]
20+
internal partial class SsoGetC2CMsgRsp
21+
{
22+
[ProtoMember(1)] public uint Retcode { get; set; }
23+
24+
[ProtoMember(2)] public string Message { get; set; }
25+
26+
[ProtoMember(3)] public uint StartSequence { get; set; }
27+
28+
[ProtoMember(4)] public uint EndSequence { get; set; }
29+
30+
[ProtoMember(7)] public List<CommonMessage> Messages { get; set; }
31+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
using Lagrange.Core.Common;
2+
using Lagrange.Core.Exceptions;
3+
using Lagrange.Core.Internal.Events;
4+
using Lagrange.Core.Internal.Events.Message;
5+
using Lagrange.Core.Internal.Packets.Message;
6+
using Lagrange.Core.Utility;
7+
8+
namespace Lagrange.Core.Internal.Services.Message;
9+
10+
[Service("trpc.msg.register_proxy.RegisterProxy.SsoGetC2cMsg")]
11+
[EventSubscribe<GetC2CMessageEventReq>(Protocols.All)]
12+
internal class GetC2CMessageService : BaseService<GetC2CMessageEventReq, GetC2CMessageEventResp>
13+
{
14+
protected override ValueTask<ReadOnlyMemory<byte>> Build(GetC2CMessageEventReq input, BotContext context)
15+
{
16+
var request = new SsoGetC2CMsgReq
17+
{
18+
PeerUid = input.PeerUid,
19+
StartSequence = input.StartSequence,
20+
EndSequence = input.EndSequence
21+
};
22+
23+
return ValueTask.FromResult(ProtoHelper.Serialize(request));
24+
}
25+
26+
protected override ValueTask<GetC2CMessageEventResp> Parse(ReadOnlyMemory<byte> input, BotContext context)
27+
{
28+
var response = ProtoHelper.Deserialize<SsoGetC2CMsgRsp>(input.Span);
29+
if (response.Retcode != 0)
30+
{
31+
throw new OperationException((int)response.Retcode, response.Message);
32+
}
33+
34+
return ValueTask.FromResult(new GetC2CMessageEventResp(response.Messages));
35+
}
36+
}

0 commit comments

Comments
 (0)