using Microsoft.Extensions.Hosting;
|
using Microsoft.Extensions.Logging;
|
|
public class WebSocketBackgroundService : BackgroundService
|
{
|
private readonly IWebSocketClientService _webSocketClient;
|
private readonly ILogger<WebSocketBackgroundService> _logger;
|
|
public WebSocketBackgroundService(
|
IWebSocketClientService webSocketClient,
|
ILogger<WebSocketBackgroundService> logger)
|
{
|
_webSocketClient = webSocketClient;
|
_logger = logger;
|
|
// 订阅消息事件
|
_webSocketClient.MessageReceived += OnMessageReceived;
|
}
|
|
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
|
{
|
while (!stoppingToken.IsCancellationRequested)
|
{
|
try
|
{
|
if (!IsConnected())
|
{
|
await _webSocketClient.ConnectAsync();
|
}
|
|
// 可以在这里添加定期发送的消息或心跳
|
await Task.Delay(TimeSpan.FromSeconds(30), stoppingToken);
|
}
|
catch (Exception ex)
|
{
|
_logger.LogError(ex, "Error in WebSocket background service");
|
await Task.Delay(TimeSpan.FromSeconds(5), stoppingToken); // 等待后重试
|
}
|
}
|
}
|
|
private bool IsConnected()
|
{
|
// 根据实际实现返回连接状态
|
return false; // 简化示例,实际应该检查真实状态
|
}
|
|
private void OnMessageReceived(object sender, string message)
|
{
|
|
_webSocketClient.SendAsync(message);
|
_logger.LogInformation("处理 WebSocket 消息: {Message}", message);
|
// 处理接收到的消息
|
}
|
|
public override async Task StopAsync(CancellationToken cancellationToken)
|
{
|
_webSocketClient.MessageReceived -= OnMessageReceived;
|
await _webSocketClient.DisconnectAsync();
|
await base.StopAsync(cancellationToken);
|
}
|
}
|