Skip to content

Commit a4078b8

Browse files
LinwenxuanLinwenxuan
authored andcommitted
[OneBot] Introduce WebServiceCollection
1 parent 213229d commit a4078b8

File tree

4 files changed

+42
-5
lines changed

4 files changed

+42
-5
lines changed

Lagrange.OneBot/Core/Message/MessageService.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
using Lagrange.Core.Message;
66
using Lagrange.Core.Utility.Extension;
77
using Lagrange.OneBot.Core.Entity.Message;
8-
using Lagrange.OneBot.Core.Network.Service;
8+
using Lagrange.OneBot.Core.Network;
99
using Lagrange.OneBot.Database;
1010

1111
namespace Lagrange.OneBot.Core.Message;
@@ -15,11 +15,11 @@ namespace Lagrange.OneBot.Core.Message;
1515
/// </summary>
1616
public sealed class MessageService
1717
{
18-
private readonly ILagrangeWebService _service;
18+
private readonly LagrangeWebSvcCollection _service;
1919
private readonly ContextBase _context;
2020
private readonly Dictionary<Type, (string, ISegment)> _entityToSegment;
2121

22-
public MessageService(BotContext bot, ILagrangeWebService service, ContextBase context)
22+
public MessageService(BotContext bot, LagrangeWebSvcCollection service, ContextBase context)
2323
{
2424
_service = service;
2525
_context = context;
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
using Lagrange.OneBot.Core.Network.Service;
2+
using Microsoft.Extensions.Hosting;
3+
4+
namespace Lagrange.OneBot.Core.Network;
5+
6+
public class LagrangeWebSvcCollection : List<ILagrangeWebService>, IHostedService
7+
{
8+
public event EventHandler<MsgRecvEventArgs> OnMessageReceived = delegate { };
9+
10+
public LagrangeWebSvcCollection(IEnumerable<ILagrangeWebService> services) : base(services)
11+
{
12+
foreach (var service in this) service.OnMessageReceived += OnMessageReceived.Invoke;
13+
}
14+
15+
public async Task StartAsync(CancellationToken cancellationToken)
16+
{
17+
foreach (var service in this) await service.StartAsync(cancellationToken);
18+
}
19+
20+
public async Task StopAsync(CancellationToken cancellationToken)
21+
{
22+
foreach (var service in this) await service.StopAsync(cancellationToken);
23+
}
24+
25+
public async Task SendJsonAsync<T>(T json, CancellationToken cancellationToken = default)
26+
{
27+
foreach (var service in this) await service.SendJsonAsync(json, cancellationToken);
28+
}
29+
}

Lagrange.OneBot/Core/Operation/OperationService.cs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,18 @@
33
using Lagrange.Core;
44
using Lagrange.Core.Utility.Extension;
55
using Lagrange.OneBot.Core.Entity.Action;
6+
using Lagrange.OneBot.Core.Network;
67
using Lagrange.OneBot.Core.Network.Service;
78

89
namespace Lagrange.OneBot.Core.Operation;
910

1011
public sealed class OperationService
1112
{
1213
private readonly BotContext _bot;
13-
private readonly ILagrangeWebService _service;
14+
private readonly LagrangeWebSvcCollection _service;
1415
private readonly Dictionary<string, IOperation> _operations;
1516

16-
public OperationService(BotContext bot, ILagrangeWebService service)
17+
public OperationService(BotContext bot, LagrangeWebSvcCollection service)
1718
{
1819
_bot = bot;
1920
_service = service;
@@ -55,5 +56,9 @@ private async Task HandleOperation(string data)
5556
throw new Exception("action deserialized failed");
5657
}
5758
}
59+
catch
60+
{
61+
await _service.SendJsonAsync(new OneBotResult(null, 200, "failed"));
62+
}
5863
}
5964
}

Lagrange.OneBot/LagrangeAppBuilder.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
using Lagrange.Core.Common.Interface;
44
using Lagrange.Core.Utility.Sign;
55
using Lagrange.OneBot.Core.Message;
6+
using Lagrange.OneBot.Core.Network;
67
using Lagrange.OneBot.Core.Network.Service;
78
using Lagrange.OneBot.Core.Operation;
89
using Lagrange.OneBot.Database;
@@ -85,6 +86,8 @@ public LagrangeAppBuilder ConfigureOneBot()
8586
{
8687
Services.AddSingleton<ILagrangeWebService, ForwardWSService>();
8788
}
89+
90+
Services.AddSingleton<LagrangeWebSvcCollection>();
8891

8992
Services.AddSingleton<ContextBase, LiteDbContext>();
9093
Services.AddSingleton<SignProvider, OneBotSigner>();

0 commit comments

Comments
 (0)