@@ -10,11 +10,23 @@ namespace JT808.DotNetty.Core.Codecs | |||||
{ | { | ||||
protected override void Decode(IChannelHandlerContext context, IByteBuffer input, List<object> output) | protected override void Decode(IChannelHandlerContext context, IByteBuffer input, List<object> output) | ||||
{ | { | ||||
byte[] buffer = new byte[input.Capacity + 2]; | |||||
input.ReadBytes(buffer, 1, input.Capacity); | |||||
buffer[0] = JT808Package.BeginFlag; | |||||
buffer[input.Capacity + 1] = JT808Package.EndFlag; | |||||
output.Add(buffer); | |||||
//过滤掉不是808标准包 | |||||
//不包括头尾标识 | |||||
//(消息 ID )2+(消息体属性)2+(终端手机号)6+(消息流水号)2+(检验码 )1 | |||||
if (input.Capacity < 12) | |||||
{ | |||||
byte[] buffer = new byte[input.Capacity]; | |||||
input.ReadBytes(buffer, 0, input.Capacity); | |||||
return; | |||||
} | |||||
else | |||||
{ | |||||
byte[] buffer = new byte[input.Capacity + 2]; | |||||
input.ReadBytes(buffer, 1, input.Capacity); | |||||
buffer[0] = JT808Package.BeginFlag; | |||||
buffer[input.Capacity + 1] = JT808Package.EndFlag; | |||||
output.Add(buffer); | |||||
} | |||||
} | } | ||||
} | } | ||||
} | } |
@@ -13,9 +13,21 @@ namespace JT808.DotNetty.Core.Codecs | |||||
{ | { | ||||
if (!message.Content.IsReadable()) return; | if (!message.Content.IsReadable()) return; | ||||
IByteBuffer byteBuffer = message.Content; | IByteBuffer byteBuffer = message.Content; | ||||
byte[] buffer = new byte[byteBuffer.ReadableBytes]; | |||||
byteBuffer.ReadBytes(buffer); | |||||
output.Add(new JT808UdpPackage(buffer, message.Sender)); | |||||
//过滤掉非808标准包 | |||||
//不包括头尾标识 | |||||
//(消息 ID )2+(消息体属性)2+(终端手机号)6+(消息流水号)2+(检验码 )1 | |||||
if (byteBuffer.ReadableBytes < 12) | |||||
{ | |||||
byte[] buffer = new byte[byteBuffer.ReadableBytes]; | |||||
byteBuffer.ReadBytes(buffer, 0, byteBuffer.ReadableBytes); | |||||
return; | |||||
} | |||||
else | |||||
{ | |||||
byte[] buffer = new byte[byteBuffer.ReadableBytes]; | |||||
byteBuffer.ReadBytes(buffer); | |||||
output.Add(new JT808UdpPackage(buffer, message.Sender)); | |||||
} | |||||
} | } | ||||
} | } | ||||
} | } |
@@ -1,4 +1,4 @@ | |||||
<Project Sdk="Microsoft.NET.Sdk"> | |||||
<Project Sdk="Microsoft.NET.Sdk"> | |||||
<Import Project="..\SharedProperties.props" /> | <Import Project="..\SharedProperties.props" /> | ||||
<PropertyGroup> | <PropertyGroup> | ||||
<PackageId>JT808.DotNetty.Kafka</PackageId> | <PackageId>JT808.DotNetty.Kafka</PackageId> | ||||
@@ -6,8 +6,5 @@ | |||||
<Description>基于Kafka的JT808消息发布与订阅</Description> | <Description>基于Kafka的JT808消息发布与订阅</Description> | ||||
<PackageReleaseNotes>基于Kafka的JT808消息发布与订阅</PackageReleaseNotes> | <PackageReleaseNotes>基于Kafka的JT808消息发布与订阅</PackageReleaseNotes> | ||||
</PropertyGroup> | </PropertyGroup> | ||||
<ItemGroup> | |||||
<ProjectReference Include="..\JT808.DotNetty.Abstractions\JT808.DotNetty.Abstractions.csproj" /> | |||||
</ItemGroup> | |||||
</Project> | </Project> |
@@ -7,8 +7,5 @@ | |||||
<Description>基于RabbitMQ的JT808消息发布与订阅</Description> | <Description>基于RabbitMQ的JT808消息发布与订阅</Description> | ||||
<PackageReleaseNotes>基于RabbitMQ的JT808消息发布与订阅</PackageReleaseNotes> | <PackageReleaseNotes>基于RabbitMQ的JT808消息发布与订阅</PackageReleaseNotes> | ||||
</PropertyGroup> | </PropertyGroup> | ||||
<ItemGroup> | |||||
<ProjectReference Include="..\JT808.DotNetty.Abstractions\JT808.DotNetty.Abstractions.csproj" /> | |||||
</ItemGroup> | |||||
</Project> | </Project> |
@@ -2,11 +2,9 @@ | |||||
using DotNetty.Transport.Channels; | using DotNetty.Transport.Channels; | ||||
using JT808.Protocol; | using JT808.Protocol; | ||||
using System; | using System; | ||||
using JT808.DotNetty.Core; | |||||
using Microsoft.Extensions.Logging; | using Microsoft.Extensions.Logging; | ||||
using JT808.DotNetty.Core.Services; | using JT808.DotNetty.Core.Services; | ||||
using JT808.DotNetty.Abstractions.Enums; | using JT808.DotNetty.Abstractions.Enums; | ||||
using JT808.Protocol.Interfaces; | |||||
using JT808.Protocol.Exceptions; | using JT808.Protocol.Exceptions; | ||||
using JT808.DotNetty.Core.Session; | using JT808.DotNetty.Core.Session; | ||||
using JT808.DotNetty.Abstractions; | using JT808.DotNetty.Abstractions; | ||||
@@ -39,6 +37,7 @@ namespace JT808.DotNetty.Tcp.Handlers | |||||
this.JT808MsgProducer = jT808MsgProducer; | this.JT808MsgProducer = jT808MsgProducer; | ||||
this.jT808AtomicCounterService = jT808AtomicCounterServiceFactory.Create(JT808TransportProtocolType.tcp); | this.jT808AtomicCounterService = jT808AtomicCounterServiceFactory.Create(JT808TransportProtocolType.tcp); | ||||
this.JT808Serializer = jT808Config.GetSerializer(); | this.JT808Serializer = jT808Config.GetSerializer(); | ||||
jT808Config.SkipCRCCode = true; | |||||
logger = loggerFactory.CreateLogger<JT808TcpServerHandler>(); | logger = loggerFactory.CreateLogger<JT808TcpServerHandler>(); | ||||
} | } | ||||
@@ -50,11 +49,11 @@ namespace JT808.DotNetty.Tcp.Handlers | |||||
//要是一定要解析到数据体可以在JT808MsgIdHandlerBase类中根据具体的消息, | //要是一定要解析到数据体可以在JT808MsgIdHandlerBase类中根据具体的消息, | ||||
//解析具体的消息体,具体调用JT808Serializer.Deserialize<T> | //解析具体的消息体,具体调用JT808Serializer.Deserialize<T> | ||||
JT808HeaderPackage jT808HeaderPackage = JT808Serializer.Deserialize<JT808HeaderPackage>(msg); | JT808HeaderPackage jT808HeaderPackage = JT808Serializer.Deserialize<JT808HeaderPackage>(msg); | ||||
jT808AtomicCounterService.MsgSuccessIncrement(); | |||||
if (logger.IsEnabled(LogLevel.Trace)) | if (logger.IsEnabled(LogLevel.Trace)) | ||||
{ | { | ||||
logger.LogTrace($"accept package success count=>{jT808AtomicCounterService.MsgSuccessCount.ToString()},accept msg=>{ByteBufferUtil.HexDump(msg)}"); | logger.LogTrace($"accept package success count=>{jT808AtomicCounterService.MsgSuccessCount.ToString()},accept msg=>{ByteBufferUtil.HexDump(msg)}"); | ||||
} | } | ||||
jT808AtomicCounterService.MsgSuccessIncrement(); | |||||
jT808SessionManager.TryAdd(jT808HeaderPackage.Header.TerminalPhoneNo,ctx.Channel); | jT808SessionManager.TryAdd(jT808HeaderPackage.Header.TerminalPhoneNo,ctx.Channel); | ||||
JT808MsgProducer.ProduceAsync(jT808HeaderPackage.Header.TerminalPhoneNo, msg); | JT808MsgProducer.ProduceAsync(jT808HeaderPackage.Header.TerminalPhoneNo, msg); | ||||
} | } | ||||
@@ -53,7 +53,7 @@ namespace JT808.DotNetty.Hosting | |||||
services.AddJT808Configure() | services.AddJT808Configure() | ||||
.AddJT808NettyCore(hostContext.Configuration) | .AddJT808NettyCore(hostContext.Configuration) | ||||
.AddJT808TcpNettyHost() | .AddJT808TcpNettyHost() | ||||
//.AddJT808UdpNettyHost() | |||||
.AddJT808UdpNettyHost() | |||||
.AddJT808WebApiNettyHost() | .AddJT808WebApiNettyHost() | ||||
.Builder(); | .Builder(); | ||||
//webapi客户端调用 | //webapi客户端调用 | ||||
@@ -5,9 +5,7 @@ using System; | |||||
using Microsoft.Extensions.Logging; | using Microsoft.Extensions.Logging; | ||||
using JT808.DotNetty.Core.Metadata; | using JT808.DotNetty.Core.Metadata; | ||||
using JT808.DotNetty.Core.Services; | using JT808.DotNetty.Core.Services; | ||||
using JT808.DotNetty.Core; | |||||
using JT808.DotNetty.Abstractions.Enums; | using JT808.DotNetty.Abstractions.Enums; | ||||
using JT808.Protocol.Interfaces; | |||||
using JT808.DotNetty.Core.Session; | using JT808.DotNetty.Core.Session; | ||||
using JT808.DotNetty.Abstractions; | using JT808.DotNetty.Abstractions; | ||||
@@ -40,6 +38,7 @@ namespace JT808.DotNetty.Udp.Handlers | |||||
this.jT808UdpSessionManager = jT808UdpSessionManager; | this.jT808UdpSessionManager = jT808UdpSessionManager; | ||||
logger = loggerFactory.CreateLogger<JT808UdpServerHandler>(); | logger = loggerFactory.CreateLogger<JT808UdpServerHandler>(); | ||||
JT808Serializer = jT808Config.GetSerializer(); | JT808Serializer = jT808Config.GetSerializer(); | ||||
jT808Config.SkipCRCCode = true; | |||||
} | } | ||||
protected override void ChannelRead0(IChannelHandlerContext ctx, JT808UdpPackage msg) | protected override void ChannelRead0(IChannelHandlerContext ctx, JT808UdpPackage msg) | ||||
@@ -50,13 +49,13 @@ namespace JT808.DotNetty.Udp.Handlers | |||||
//要是一定要解析到数据体可以在JT808MsgIdHandlerBase类中根据具体的消息, | //要是一定要解析到数据体可以在JT808MsgIdHandlerBase类中根据具体的消息, | ||||
//解析具体的消息体,具体调用JT808Serializer.Deserialize<T> | //解析具体的消息体,具体调用JT808Serializer.Deserialize<T> | ||||
JT808HeaderPackage jT808HeaderPackage = JT808Serializer.Deserialize<JT808HeaderPackage>(msg.Buffer); | JT808HeaderPackage jT808HeaderPackage = JT808Serializer.Deserialize<JT808HeaderPackage>(msg.Buffer); | ||||
jT808AtomicCounterService.MsgSuccessIncrement(); | |||||
jT808UdpSessionManager.TryAdd(ctx.Channel, msg.Sender, jT808HeaderPackage.Header.TerminalPhoneNo); | |||||
JT808MsgProducer.ProduceAsync(jT808HeaderPackage.Header.TerminalPhoneNo, msg.Buffer); | |||||
if (logger.IsEnabled(LogLevel.Trace)) | if (logger.IsEnabled(LogLevel.Trace)) | ||||
{ | { | ||||
logger.LogTrace($"accept package success count=>{jT808AtomicCounterService.MsgFailCount.ToString()},accept msg=>{ByteBufferUtil.HexDump(msg.Buffer)}"); | logger.LogTrace($"accept package success count=>{jT808AtomicCounterService.MsgFailCount.ToString()},accept msg=>{ByteBufferUtil.HexDump(msg.Buffer)}"); | ||||
} | } | ||||
jT808AtomicCounterService.MsgSuccessIncrement(); | |||||
jT808UdpSessionManager.TryAdd(ctx.Channel, msg.Sender, jT808HeaderPackage.Header.TerminalPhoneNo); | |||||
JT808MsgProducer.ProduceAsync(jT808HeaderPackage.Header.TerminalPhoneNo, msg.Buffer); | |||||
} | } | ||||
catch (JT808.Protocol.Exceptions.JT808Exception ex) | catch (JT808.Protocol.Exceptions.JT808Exception ex) | ||||
{ | { | ||||
@@ -37,9 +37,9 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JT808.DotNetty.SimpleServer | |||||
EndProject | EndProject | ||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JT808.DotNetty.CleintBenchmark", "JT808.DotNetty.CleintBenchmark\JT808.DotNetty.CleintBenchmark.csproj", "{C2B1A0F4-2C49-45DA-9F48-7A016FC6E9E1}" | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JT808.DotNetty.CleintBenchmark", "JT808.DotNetty.CleintBenchmark\JT808.DotNetty.CleintBenchmark.csproj", "{C2B1A0F4-2C49-45DA-9F48-7A016FC6E9E1}" | ||||
EndProject | EndProject | ||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "JT808.DotNetty.Kafka", "JT808.DotNetty.Kafka\JT808.DotNetty.Kafka.csproj", "{A51A0B4A-8F7F-4827-A783-B30456FE768A}" | |||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "JT808.DotNetty.Kafka", "JT808.DotNetty.Kafka\JT808.DotNetty.Kafka.csproj", "{7050DC16-4CD8-406C-9F3B-F085407E94EB}" | |||||
EndProject | EndProject | ||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "JT808.DotNetty.RabbitMQ", "JT808.DotNetty.RabbitMQ\JT808.DotNetty.RabbitMQ.csproj", "{27BB3FFD-E723-439C-9ACB-9532F38A5B38}" | |||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "JT808.DotNetty.RabbitMQ", "JT808.DotNetty.RabbitMQ\JT808.DotNetty.RabbitMQ.csproj", "{48C53550-610E-4CE5-AFE4-E285280A8365}" | |||||
EndProject | EndProject | ||||
Global | Global | ||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution | GlobalSection(SolutionConfigurationPlatforms) = preSolution | ||||
@@ -107,14 +107,14 @@ Global | |||||
{C2B1A0F4-2C49-45DA-9F48-7A016FC6E9E1}.Debug|Any CPU.Build.0 = Debug|Any CPU | {C2B1A0F4-2C49-45DA-9F48-7A016FC6E9E1}.Debug|Any CPU.Build.0 = Debug|Any CPU | ||||
{C2B1A0F4-2C49-45DA-9F48-7A016FC6E9E1}.Release|Any CPU.ActiveCfg = Release|Any CPU | {C2B1A0F4-2C49-45DA-9F48-7A016FC6E9E1}.Release|Any CPU.ActiveCfg = Release|Any CPU | ||||
{C2B1A0F4-2C49-45DA-9F48-7A016FC6E9E1}.Release|Any CPU.Build.0 = Release|Any CPU | {C2B1A0F4-2C49-45DA-9F48-7A016FC6E9E1}.Release|Any CPU.Build.0 = Release|Any CPU | ||||
{A51A0B4A-8F7F-4827-A783-B30456FE768A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | |||||
{A51A0B4A-8F7F-4827-A783-B30456FE768A}.Debug|Any CPU.Build.0 = Debug|Any CPU | |||||
{A51A0B4A-8F7F-4827-A783-B30456FE768A}.Release|Any CPU.ActiveCfg = Release|Any CPU | |||||
{A51A0B4A-8F7F-4827-A783-B30456FE768A}.Release|Any CPU.Build.0 = Release|Any CPU | |||||
{27BB3FFD-E723-439C-9ACB-9532F38A5B38}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | |||||
{27BB3FFD-E723-439C-9ACB-9532F38A5B38}.Debug|Any CPU.Build.0 = Debug|Any CPU | |||||
{27BB3FFD-E723-439C-9ACB-9532F38A5B38}.Release|Any CPU.ActiveCfg = Release|Any CPU | |||||
{27BB3FFD-E723-439C-9ACB-9532F38A5B38}.Release|Any CPU.Build.0 = Release|Any CPU | |||||
{7050DC16-4CD8-406C-9F3B-F085407E94EB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | |||||
{7050DC16-4CD8-406C-9F3B-F085407E94EB}.Debug|Any CPU.Build.0 = Debug|Any CPU | |||||
{7050DC16-4CD8-406C-9F3B-F085407E94EB}.Release|Any CPU.ActiveCfg = Release|Any CPU | |||||
{7050DC16-4CD8-406C-9F3B-F085407E94EB}.Release|Any CPU.Build.0 = Release|Any CPU | |||||
{48C53550-610E-4CE5-AFE4-E285280A8365}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | |||||
{48C53550-610E-4CE5-AFE4-E285280A8365}.Debug|Any CPU.Build.0 = Debug|Any CPU | |||||
{48C53550-610E-4CE5-AFE4-E285280A8365}.Release|Any CPU.ActiveCfg = Release|Any CPU | |||||
{48C53550-610E-4CE5-AFE4-E285280A8365}.Release|Any CPU.Build.0 = Release|Any CPU | |||||
EndGlobalSection | EndGlobalSection | ||||
GlobalSection(SolutionProperties) = preSolution | GlobalSection(SolutionProperties) = preSolution | ||||
HideSolutionNode = FALSE | HideSolutionNode = FALSE | ||||