50 lines
1.7 KiB
C#
50 lines
1.7 KiB
C#
|
|
using System.Net.Http.Json;
|
|||
|
|
using Microsoft.Extensions.Logging;
|
|||
|
|
using Volo.Abp.Settings;
|
|||
|
|
|
|||
|
|
namespace Kurs.Sender.Rocket;
|
|||
|
|
|
|||
|
|
public interface IRocketHttpClient
|
|||
|
|
{
|
|||
|
|
Task<RocketSendResultDto> SendMessageAsync(string Username, string Message);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public sealed class RocketHttpClient : IRocketHttpClient, IDisposable
|
|||
|
|
{
|
|||
|
|
private readonly HttpClient httpClient;
|
|||
|
|
private readonly ILogger<RocketHttpClient> logger;
|
|||
|
|
private readonly ISettingProvider settingProvider;
|
|||
|
|
|
|||
|
|
public RocketHttpClient(
|
|||
|
|
HttpClient httpClient,
|
|||
|
|
ILogger<RocketHttpClient> logger,
|
|||
|
|
ISettingProvider settingProvider)
|
|||
|
|
{
|
|||
|
|
this.httpClient = httpClient;
|
|||
|
|
this.logger = logger;
|
|||
|
|
this.settingProvider = settingProvider;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public async Task<RocketSendResultDto> SendMessageAsync(string Username, string Message)
|
|||
|
|
{
|
|||
|
|
var url = await settingProvider.GetOrNullAsync(RocketSettingNames.Url);
|
|||
|
|
var userId = await settingProvider.GetOrNullAsync(RocketSettingNames.UserId);
|
|||
|
|
var token = await settingProvider.GetOrNullAsync(RocketSettingNames.Token);
|
|||
|
|
|
|||
|
|
var request = new HttpRequestMessage(HttpMethod.Post, $"{url}/chat.postMessage");
|
|||
|
|
request.Headers.Add("X-Auth-Token", token);
|
|||
|
|
request.Headers.Add("X-User-Id", userId);
|
|||
|
|
request.Content = JsonContent.Create(new RocketChatPostMessageInput
|
|||
|
|
{
|
|||
|
|
Channel = $"@{Username}",
|
|||
|
|
Text = Message
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
var response = await httpClient.SendAsync(request);
|
|||
|
|
response.EnsureSuccessStatusCode(); // Hata durumunda istisna atar.
|
|||
|
|
return await response.Content.ReadFromJsonAsync<RocketSendResultDto>();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public void Dispose() => httpClient?.Dispose();
|
|||
|
|
}
|