@@ -10,11 +10,23 @@ namespace JT808.DotNetty.Core.Codecs | |||
{ | |||
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; | |||
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" /> | |||
<PropertyGroup> | |||
<PackageId>JT808.DotNetty.Kafka</PackageId> | |||
@@ -6,8 +6,5 @@ | |||
<Description>基于Kafka的JT808消息发布与订阅</Description> | |||
<PackageReleaseNotes>基于Kafka的JT808消息发布与订阅</PackageReleaseNotes> | |||
</PropertyGroup> | |||
<ItemGroup> | |||
<ProjectReference Include="..\JT808.DotNetty.Abstractions\JT808.DotNetty.Abstractions.csproj" /> | |||
</ItemGroup> | |||
</Project> |
@@ -7,8 +7,5 @@ | |||
<Description>基于RabbitMQ的JT808消息发布与订阅</Description> | |||
<PackageReleaseNotes>基于RabbitMQ的JT808消息发布与订阅</PackageReleaseNotes> | |||
</PropertyGroup> | |||
<ItemGroup> | |||
<ProjectReference Include="..\JT808.DotNetty.Abstractions\JT808.DotNetty.Abstractions.csproj" /> | |||
</ItemGroup> | |||
</Project> |
@@ -2,11 +2,9 @@ | |||
using DotNetty.Transport.Channels; | |||
using JT808.Protocol; | |||
using System; | |||
using JT808.DotNetty.Core; | |||
using Microsoft.Extensions.Logging; | |||
using JT808.DotNetty.Core.Services; | |||
using JT808.DotNetty.Abstractions.Enums; | |||
using JT808.Protocol.Interfaces; | |||
using JT808.Protocol.Exceptions; | |||
using JT808.DotNetty.Core.Session; | |||
using JT808.DotNetty.Abstractions; | |||
@@ -39,6 +37,7 @@ namespace JT808.DotNetty.Tcp.Handlers | |||
this.JT808MsgProducer = jT808MsgProducer; | |||
this.jT808AtomicCounterService = jT808AtomicCounterServiceFactory.Create(JT808TransportProtocolType.tcp); | |||
this.JT808Serializer = jT808Config.GetSerializer(); | |||
jT808Config.SkipCRCCode = true; | |||
logger = loggerFactory.CreateLogger<JT808TcpServerHandler>(); | |||
} | |||
@@ -50,11 +49,11 @@ namespace JT808.DotNetty.Tcp.Handlers | |||
//要是一定要解析到数据体可以在JT808MsgIdHandlerBase类中根据具体的消息, | |||
//解析具体的消息体,具体调用JT808Serializer.Deserialize<T> | |||
JT808HeaderPackage jT808HeaderPackage = JT808Serializer.Deserialize<JT808HeaderPackage>(msg); | |||
jT808AtomicCounterService.MsgSuccessIncrement(); | |||
if (logger.IsEnabled(LogLevel.Trace)) | |||
{ | |||
logger.LogTrace($"accept package success count=>{jT808AtomicCounterService.MsgSuccessCount.ToString()},accept msg=>{ByteBufferUtil.HexDump(msg)}"); | |||
} | |||
jT808AtomicCounterService.MsgSuccessIncrement(); | |||
jT808SessionManager.TryAdd(jT808HeaderPackage.Header.TerminalPhoneNo,ctx.Channel); | |||
JT808MsgProducer.ProduceAsync(jT808HeaderPackage.Header.TerminalPhoneNo, msg); | |||
} | |||
@@ -53,7 +53,7 @@ namespace JT808.DotNetty.Hosting | |||
services.AddJT808Configure() | |||
.AddJT808NettyCore(hostContext.Configuration) | |||
.AddJT808TcpNettyHost() | |||
//.AddJT808UdpNettyHost() | |||
.AddJT808UdpNettyHost() | |||
.AddJT808WebApiNettyHost() | |||
.Builder(); | |||
//webapi客户端调用 | |||
@@ -5,9 +5,7 @@ using System; | |||
using Microsoft.Extensions.Logging; | |||
using JT808.DotNetty.Core.Metadata; | |||
using JT808.DotNetty.Core.Services; | |||
using JT808.DotNetty.Core; | |||
using JT808.DotNetty.Abstractions.Enums; | |||
using JT808.Protocol.Interfaces; | |||
using JT808.DotNetty.Core.Session; | |||
using JT808.DotNetty.Abstractions; | |||
@@ -40,6 +38,7 @@ namespace JT808.DotNetty.Udp.Handlers | |||
this.jT808UdpSessionManager = jT808UdpSessionManager; | |||
logger = loggerFactory.CreateLogger<JT808UdpServerHandler>(); | |||
JT808Serializer = jT808Config.GetSerializer(); | |||
jT808Config.SkipCRCCode = true; | |||
} | |||
protected override void ChannelRead0(IChannelHandlerContext ctx, JT808UdpPackage msg) | |||
@@ -50,13 +49,13 @@ namespace JT808.DotNetty.Udp.Handlers | |||
//要是一定要解析到数据体可以在JT808MsgIdHandlerBase类中根据具体的消息, | |||
//解析具体的消息体,具体调用JT808Serializer.Deserialize<T> | |||
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)) | |||
{ | |||
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) | |||
{ | |||
@@ -37,9 +37,9 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JT808.DotNetty.SimpleServer | |||
EndProject | |||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JT808.DotNetty.CleintBenchmark", "JT808.DotNetty.CleintBenchmark\JT808.DotNetty.CleintBenchmark.csproj", "{C2B1A0F4-2C49-45DA-9F48-7A016FC6E9E1}" | |||
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 | |||
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 | |||
Global | |||
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}.Release|Any CPU.ActiveCfg = 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 | |||
GlobalSection(SolutionProperties) = preSolution | |||
HideSolutionNode = FALSE | |||