/// <inheritdoc/> /// <remarks> /// 当缓存失效, 或者未注册用于解析消息的 <see cref="IMiraiHttpMessageParser{TMessage}"/> 时, 本异步方法将返回 <see langword="null"/> /// </remarks> public async Task <IMiraiHttpMessage?> RetriveMessageAsync(int messageId, CancellationToken token = default) { InternalSessionInfo session = SafeGetSession(); IMiraiHttpMessageParserResolver resolver = _services.GetRequiredService <IMiraiHttpMessageParserResolver>(); CreateLinkedUserSessionToken(session.Token, token, out CancellationTokenSource? cts, out token); JsonElement root = await _client.GetAsync($"{_options.BaseUrl}/messageFromId?sessionKey={session.SessionKey}&id={messageId}", token) .GetObjectAsync <JsonElement>(token) .DisposeWhenCompleted(cts); root.EnsureApiRespCode(); JsonElement data = root.GetProperty("data"); IMiraiHttpMessageParser?parser = resolver.ResolveParser(in data); if (parser != null && parser.CanParse(in data)) { return((IMiraiHttpMessage)parser.Parse(in data)); } return(null); }
public MiraiHttpMessageHandlerInvoker(IServiceProvider services, ILogger <MiraiHttpMessageHandlerInvoker> logger, IMiraiHttpMessageParserResolver parserResolver, IMiraiHttpMessageSubscriptionResolver subscriptionResolver) : base(services, logger, parserResolver, subscriptionResolver) { }