2024-10-30 17:49:05 +08:00
|
|
|
|
using System.Security.Cryptography.X509Certificates;
|
|
|
|
|
|
using JiShe.CollectBus.Common.Enums;
|
|
|
|
|
|
using JiShe.CollectBus.MongoDB;
|
|
|
|
|
|
using JiShe.CollectBus.Protocol.Contracts.Models;
|
2024-10-28 16:23:39 +08:00
|
|
|
|
using MassTransit;
|
|
|
|
|
|
using Microsoft.Extensions.Logging;
|
|
|
|
|
|
using TouchSocket.Sockets;
|
|
|
|
|
|
|
|
|
|
|
|
namespace JiShe.CollectBus.RabbitMQ.Consumers
|
|
|
|
|
|
{
|
|
|
|
|
|
public class MessageIssuedConsumer : IConsumer<MessageIssuedEvent>
|
|
|
|
|
|
{
|
|
|
|
|
|
private readonly ILogger<MessageIssuedEvent> _logger;
|
|
|
|
|
|
private readonly ITcpService _tcpService;
|
2024-10-30 17:49:05 +08:00
|
|
|
|
public readonly IMongoRepository<MessageReceivedHeartbeatEvent> _mongoHeartbeatRepository;
|
|
|
|
|
|
public readonly IMongoRepository<MessageReceivedLoginEvent> _mongoLoginRepository;
|
2024-10-28 16:23:39 +08:00
|
|
|
|
|
2024-10-30 17:49:05 +08:00
|
|
|
|
|
|
|
|
|
|
public MessageIssuedConsumer(ILogger<MessageIssuedEvent> logger, ITcpService tcpService, IMongoRepository<MessageReceivedHeartbeatEvent> mongoHeartbeatRepository, IMongoRepository<MessageReceivedLoginEvent> mongoLoginRepository)
|
2024-10-28 16:23:39 +08:00
|
|
|
|
{
|
|
|
|
|
|
_logger = logger;
|
2024-10-30 17:49:05 +08:00
|
|
|
|
_tcpService = tcpService;
|
|
|
|
|
|
_mongoHeartbeatRepository = mongoHeartbeatRepository;
|
|
|
|
|
|
_mongoLoginRepository = mongoLoginRepository;
|
2024-10-28 16:23:39 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public async Task Consume(ConsumeContext<MessageIssuedEvent> context)
|
|
|
|
|
|
{
|
2024-10-30 17:49:05 +08:00
|
|
|
|
switch (context.Message.Type)
|
|
|
|
|
|
{
|
|
|
|
|
|
case IssuedEventType.Heartbeat:
|
|
|
|
|
|
await _mongoHeartbeatRepository.UpdateAsync(a => a.MessageId == context.Message.MessageId, b =>new MessageReceivedHeartbeatEvent { IsAck = true,AckTime=DateTime.Now});
|
|
|
|
|
|
break;
|
|
|
|
|
|
case IssuedEventType.Login:
|
|
|
|
|
|
await _mongoLoginRepository.UpdateAsync(a => a.MessageId == context.Message.MessageId, b => new MessageReceivedLoginEvent { IsAck = true, AckTime = DateTime.Now });
|
|
|
|
|
|
break;
|
|
|
|
|
|
case IssuedEventType.Data:
|
|
|
|
|
|
break;
|
|
|
|
|
|
default:
|
|
|
|
|
|
throw new ArgumentOutOfRangeException();
|
|
|
|
|
|
}
|
2024-10-28 16:23:39 +08:00
|
|
|
|
await _tcpService.SendAsync(context.Message.ClientId, context.Message.Message);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|