2024-10-29 16:28:14 +08:00
|
|
|
|
using JiShe.CollectBus.Common.Enums;
|
|
|
|
|
|
using JiShe.CollectBus.Common.Extensions;
|
2024-11-13 17:50:52 +08:00
|
|
|
|
using JiShe.CollectBus.Common.Models;
|
2024-10-30 17:49:05 +08:00
|
|
|
|
using JiShe.CollectBus.MongoDB;
|
2024-11-13 17:50:52 +08:00
|
|
|
|
using JiShe.CollectBus.MQ.Sender;
|
2024-11-08 13:50:47 +08:00
|
|
|
|
using MassTransit;
|
2024-11-13 17:50:52 +08:00
|
|
|
|
using Microsoft.Extensions.Logging;
|
|
|
|
|
|
using TouchSocket.Core;
|
|
|
|
|
|
using TouchSocket.Sockets;
|
2024-09-30 17:10:43 +08:00
|
|
|
|
|
2024-11-13 17:50:52 +08:00
|
|
|
|
namespace JiShe.CollectBus.Network.Plugins
|
2024-09-30 17:10:43 +08:00
|
|
|
|
{
|
2024-11-13 17:50:52 +08:00
|
|
|
|
public partial class TcpMonitor(
|
|
|
|
|
|
INSender nSender,
|
|
|
|
|
|
ILogger<TcpMonitor> logger,
|
|
|
|
|
|
IMongoRepository<MessageReceivedHeartbeatEvent> mongoHeartbeatRepository,
|
|
|
|
|
|
IMongoRepository<MessageReceivedLoginEvent> mongoLoginRepository)
|
|
|
|
|
|
: PluginBase
|
2024-09-30 17:10:43 +08:00
|
|
|
|
{
|
2024-10-22 20:57:26 +08:00
|
|
|
|
[GeneratorPlugin(typeof(ITcpReceivedPlugin))]
|
|
|
|
|
|
public async Task OnTcpReceived(ITcpSessionClient client, ReceivedDataEventArgs e)
|
2024-09-30 17:10:43 +08:00
|
|
|
|
{
|
2024-10-29 16:28:14 +08:00
|
|
|
|
var messageHexString = Convert.ToHexString(e.ByteBlock.Span);
|
|
|
|
|
|
var hexStringList = messageHexString.StringToPairs();
|
|
|
|
|
|
var aFn = (int?)hexStringList.GetAnalyzeValue(CommandChunkEnum.AFN);
|
|
|
|
|
|
var fn = (int?)hexStringList.GetAnalyzeValue(CommandChunkEnum.FN);
|
2024-10-30 17:49:05 +08:00
|
|
|
|
var aTuple = (Tuple<string, int>)hexStringList.GetAnalyzeValue(CommandChunkEnum.A);
|
2024-10-29 16:28:14 +08:00
|
|
|
|
|
|
|
|
|
|
if (aFn.HasValue && fn.HasValue)
|
2024-10-25 19:11:43 +08:00
|
|
|
|
{
|
2024-10-29 16:28:14 +08:00
|
|
|
|
if ((AFN)aFn == AFN.链路接口检测)
|
|
|
|
|
|
{
|
|
|
|
|
|
switch (fn)
|
|
|
|
|
|
{
|
|
|
|
|
|
case 1://登录
|
2024-10-30 17:49:05 +08:00
|
|
|
|
|
|
|
|
|
|
var messageReceivedLoginEvent = new MessageReceivedLoginEvent
|
|
|
|
|
|
{
|
|
|
|
|
|
ClientId = client.Id,
|
|
|
|
|
|
ClientIp = client.IP,
|
|
|
|
|
|
ClientPort = client.Port,
|
|
|
|
|
|
MessageHexString = messageHexString,
|
|
|
|
|
|
DeviceNo = aTuple.Item1,
|
2024-11-08 13:50:47 +08:00
|
|
|
|
MessageId = NewId.NextGuid().ToString()
|
2024-10-30 17:49:05 +08:00
|
|
|
|
};
|
2024-11-13 17:50:52 +08:00
|
|
|
|
await mongoLoginRepository.AddAsync(messageReceivedLoginEvent);
|
|
|
|
|
|
await nSender.SendToReceivedLoginAsync(messageReceivedLoginEvent);
|
2024-10-29 16:28:14 +08:00
|
|
|
|
break;
|
|
|
|
|
|
case 3://心跳
|
2024-10-30 17:49:05 +08:00
|
|
|
|
var messageReceivedHeartbeatEvent = new MessageReceivedHeartbeatEvent
|
|
|
|
|
|
{
|
|
|
|
|
|
ClientId = client.Id,
|
|
|
|
|
|
ClientIp = client.IP,
|
|
|
|
|
|
ClientPort = client.Port,
|
|
|
|
|
|
MessageHexString = messageHexString,
|
|
|
|
|
|
DeviceNo = aTuple.Item1,
|
2024-11-08 13:50:47 +08:00
|
|
|
|
MessageId = NewId.NextGuid().ToString()
|
2024-10-30 17:49:05 +08:00
|
|
|
|
};
|
2024-11-13 17:50:52 +08:00
|
|
|
|
await mongoHeartbeatRepository.AddAsync(messageReceivedHeartbeatEvent);
|
|
|
|
|
|
await nSender.SendToReceivedHeartbeatAsync(messageReceivedHeartbeatEvent);
|
|
|
|
|
|
break;
|
|
|
|
|
|
default:
|
|
|
|
|
|
logger.LogError($"指令初步解析失败,指令内容:{messageHexString}");
|
2024-10-29 16:28:14 +08:00
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
2024-11-13 17:50:52 +08:00
|
|
|
|
await nSender.SendToReceivedAsync(new MessageReceivedEvent
|
2024-10-30 17:49:05 +08:00
|
|
|
|
{
|
|
|
|
|
|
ClientId = client.Id,
|
|
|
|
|
|
ClientIp = client.IP,
|
|
|
|
|
|
ClientPort = client.Port,
|
|
|
|
|
|
MessageHexString = messageHexString,
|
|
|
|
|
|
DeviceNo = aTuple.Item1,
|
2024-11-08 13:50:47 +08:00
|
|
|
|
MessageId = NewId.NextGuid().ToString()
|
2024-10-30 17:49:05 +08:00
|
|
|
|
});
|
2024-10-29 16:28:14 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
2024-11-13 17:50:52 +08:00
|
|
|
|
logger.LogError($"指令初步解析失败,指令内容:{messageHexString}");
|
2024-10-29 16:28:14 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2024-09-30 17:10:43 +08:00
|
|
|
|
await e.InvokeNext();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2024-10-22 20:57:26 +08:00
|
|
|
|
[GeneratorPlugin(typeof(ITcpConnectingPlugin))]
|
2024-10-29 16:28:14 +08:00
|
|
|
|
public async Task OnTcpConnecting(ITcpSessionClient client,ConnectingEventArgs e)
|
2024-09-30 17:10:43 +08:00
|
|
|
|
{
|
2024-11-13 17:50:52 +08:00
|
|
|
|
logger.LogInformation($"[TCP] ID:{client.Id} IP:{client.GetIPPort()}正在连接中...");
|
2024-09-30 17:10:43 +08:00
|
|
|
|
await e.InvokeNext();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2024-10-22 20:57:26 +08:00
|
|
|
|
[GeneratorPlugin(typeof(ITcpConnectedPlugin))]
|
2024-10-29 16:28:14 +08:00
|
|
|
|
public async Task OnTcpConnected(ITcpSessionClient client,ConnectedEventArgs e)
|
2024-09-30 17:10:43 +08:00
|
|
|
|
{
|
2024-11-13 17:50:52 +08:00
|
|
|
|
logger.LogInformation($"[TCP] ID:{client.Id} IP:{client.GetIPPort()}已连接");
|
2024-09-30 17:10:43 +08:00
|
|
|
|
await e.InvokeNext();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2024-10-22 20:57:26 +08:00
|
|
|
|
[GeneratorPlugin(typeof(ITcpClosedPlugin))]
|
|
|
|
|
|
public async Task OnTcpClosed(ITcpSessionClient client, ClosedEventArgs e)
|
2024-09-30 17:10:43 +08:00
|
|
|
|
{
|
2024-11-13 17:50:52 +08:00
|
|
|
|
logger.LogInformation($"[TCP] ID:{client.Id} IP:{client.GetIPPort()}已关闭连接");
|
2024-09-30 17:10:43 +08:00
|
|
|
|
await e.InvokeNext();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|