@@ -1,18 +0,0 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
namespace JT1078.Gateway.Abstractions.Enums | |||||
{ | |||||
public enum JT1078UseType : byte | |||||
{ | |||||
/// <summary> | |||||
/// 使用正常方式 | |||||
/// </summary> | |||||
Normal = 1, | |||||
/// <summary> | |||||
/// 使用队列方式 | |||||
/// </summary> | |||||
Queue = 2 | |||||
} | |||||
} |
@@ -7,7 +7,7 @@ namespace JT1078.Gateway.Abstractions | |||||
{ | { | ||||
public interface IJT1078MsgConsumer : IJT1078PubSub, IDisposable | public interface IJT1078MsgConsumer : IJT1078PubSub, IDisposable | ||||
{ | { | ||||
void OnMessage(Action<(string TerminalNo, byte[] Data)> callback); | |||||
void OnMessage(Action<(string SIM, byte[] Data)> callback); | |||||
CancellationTokenSource Cts { get; } | CancellationTokenSource Cts { get; } | ||||
void Subscribe(); | void Subscribe(); | ||||
void Unsubscribe(); | void Unsubscribe(); | ||||
@@ -10,8 +10,8 @@ namespace JT1078.Gateway.Abstractions | |||||
/// <summary> | /// <summary> | ||||
/// | /// | ||||
/// </summary> | /// </summary> | ||||
/// <param name="terminalNo">设备终端号</param> | |||||
/// <param name="sim">设备sim终端号</param> | |||||
/// <param name="data">jt1078 hex data</param> | /// <param name="data">jt1078 hex data</param> | ||||
ValueTask ProduceAsync(string terminalNo, byte[] data); | |||||
ValueTask ProduceAsync(string sim, byte[] data); | |||||
} | } | ||||
} | } |
@@ -1,12 +0,0 @@ | |||||
using Microsoft.Extensions.DependencyInjection; | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
namespace JT1078.Gateway.Abstractions | |||||
{ | |||||
public interface IJT1078NormalGatewayBuilder: IJT1078GatewayBuilder | |||||
{ | |||||
} | |||||
} |
@@ -1,16 +0,0 @@ | |||||
using JT1078.Protocol; | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
using System.Threading; | |||||
namespace JT1078.Gateway.Abstractions | |||||
{ | |||||
public interface IJT1078PackageConsumer : IJT1078PubSub, IDisposable | |||||
{ | |||||
void OnMessage(Action<(string TerminalNo, JT1078Package Data)> callback); | |||||
CancellationTokenSource Cts { get; } | |||||
void Subscribe(); | |||||
void Unsubscribe(); | |||||
} | |||||
} |
@@ -1,18 +0,0 @@ | |||||
using JT1078.Protocol; | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
using System.Threading.Tasks; | |||||
namespace JT1078.Gateway.Abstractions | |||||
{ | |||||
public interface IJT1078PackageProducer : IJT1078PubSub, IDisposable | |||||
{ | |||||
/// <summary> | |||||
/// | |||||
/// </summary> | |||||
/// <param name="terminalNo">设备终端号</param> | |||||
/// <param name="data">jt1078 package data</param> | |||||
ValueTask ProduceAsync(string terminalNo, JT1078Package data); | |||||
} | |||||
} |
@@ -1,12 +0,0 @@ | |||||
using Microsoft.Extensions.DependencyInjection; | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
namespace JT1078.Gateway.Abstractions | |||||
{ | |||||
public interface IJT1078QueueGatewayBuilder: IJT1078GatewayBuilder | |||||
{ | |||||
} | |||||
} |
@@ -1,5 +1,5 @@ | |||||
<Project Sdk="Microsoft.NET.Sdk"> | <Project Sdk="Microsoft.NET.Sdk"> | ||||
<Import Project="..\Version.props" /> | |||||
<PropertyGroup> | <PropertyGroup> | ||||
<TargetFramework>netstandard2.1</TargetFramework> | <TargetFramework>netstandard2.1</TargetFramework> | ||||
<LangVersion>8.0</LangVersion> | <LangVersion>8.0</LangVersion> | ||||
@@ -17,8 +17,15 @@ | |||||
<SignAssembly>false</SignAssembly> | <SignAssembly>false</SignAssembly> | ||||
<PackageLicenseFile>LICENSE</PackageLicenseFile> | <PackageLicenseFile>LICENSE</PackageLicenseFile> | ||||
<PackageRequireLicenseAcceptance>true</PackageRequireLicenseAcceptance> | <PackageRequireLicenseAcceptance>true</PackageRequireLicenseAcceptance> | ||||
<Version>1.0.0-preview2</Version> | |||||
<Version>$(JT1078PackageVersion)</Version> | |||||
</PropertyGroup> | </PropertyGroup> | ||||
<ItemGroup> | |||||
<Compile Remove="IJT1078NormalGatewayBuilder.cs" /> | |||||
<Compile Remove="IJT1078PackageConsumer.cs" /> | |||||
<Compile Remove="IJT1078PackageProducer.cs" /> | |||||
<Compile Remove="IJT1078QueueGatewayBuilder.cs" /> | |||||
</ItemGroup> | |||||
<ItemGroup> | <ItemGroup> | ||||
<None Include="..\..\LICENSE" Pack="true" PackagePath="" /> | <None Include="..\..\LICENSE" Pack="true" PackagePath="" /> | ||||
@@ -16,8 +16,6 @@ namespace JT1078.Gateway.Coordinator.Controller | |||||
[EnableCors("any")] | [EnableCors("any")] | ||||
public class UserController : ControllerBase | public class UserController : ControllerBase | ||||
{ | { | ||||
/// <summary> | /// <summary> | ||||
/// 登录 | /// 登录 | ||||
/// </summary> | /// </summary> | ||||
@@ -10,7 +10,7 @@ namespace JT1078.Gateway.Coordinator.Dtos | |||||
/// <summary> | /// <summary> | ||||
/// 设备sim卡号 | /// 设备sim卡号 | ||||
/// </summary> | /// </summary> | ||||
public string TerminalPhoneNo { get; set; } | |||||
public string Sim { get; set; } | |||||
/// <summary> | /// <summary> | ||||
/// 通道号 | /// 通道号 | ||||
/// </summary> | /// </summary> | ||||
@@ -1,5 +1,5 @@ | |||||
<Project Sdk="Microsoft.NET.Sdk"> | <Project Sdk="Microsoft.NET.Sdk"> | ||||
<Import Project="..\Version.props" /> | |||||
<PropertyGroup> | <PropertyGroup> | ||||
<TargetFramework>netstandard2.1</TargetFramework> | <TargetFramework>netstandard2.1</TargetFramework> | ||||
<LangVersion>8.0</LangVersion> | <LangVersion>8.0</LangVersion> | ||||
@@ -17,7 +17,7 @@ | |||||
<SignAssembly>false</SignAssembly> | <SignAssembly>false</SignAssembly> | ||||
<PackageLicenseFile>LICENSE</PackageLicenseFile> | <PackageLicenseFile>LICENSE</PackageLicenseFile> | ||||
<PackageRequireLicenseAcceptance>true</PackageRequireLicenseAcceptance> | <PackageRequireLicenseAcceptance>true</PackageRequireLicenseAcceptance> | ||||
<Version>1.0.0-preview2</Version> | |||||
<Version>$(JT1078PackageVersion)</Version> | |||||
</PropertyGroup> | </PropertyGroup> | ||||
<ItemGroup> | <ItemGroup> | ||||
@@ -25,7 +25,7 @@ | |||||
</ItemGroup> | </ItemGroup> | ||||
<ItemGroup> | <ItemGroup> | ||||
<ProjectReference Include="..\JT1078.Gateway\JT1078.Gateway.csproj" /> | |||||
<ProjectReference Include="..\JT1078.Gateway.Abstractions\JT1078.Gateway.Abstractions.csproj" /> | |||||
</ItemGroup> | </ItemGroup> | ||||
</Project> | </Project> |
@@ -9,17 +9,17 @@ namespace JT1078.Gateway.InMemoryMQ | |||||
{ | { | ||||
public static class JT1078InMemoryMQExtensions | public static class JT1078InMemoryMQExtensions | ||||
{ | { | ||||
public static IJT1078NormalGatewayBuilder AddMsgProducer(this IJT1078NormalGatewayBuilder builder) | |||||
public static IJT1078GatewayBuilder AddMsgProducer(this IJT1078GatewayBuilder builder) | |||||
{ | { | ||||
builder.JT1078Builder.Services.TryAddSingleton<JT1078MsgChannel>(); | builder.JT1078Builder.Services.TryAddSingleton<JT1078MsgChannel>(); | ||||
builder.JT1078Builder.Services.AddSingleton<IJT1078PackageProducer, JT1078PackageProducer>(); | |||||
builder.JT1078Builder.Services.AddSingleton<IJT1078MsgProducer, JT1078MsgProducer>(); | |||||
return builder; | return builder; | ||||
} | } | ||||
public static IJT1078NormalGatewayBuilder AddMsgConsumer(this IJT1078NormalGatewayBuilder builder) | |||||
public static IJT1078GatewayBuilder AddMsgConsumer(this IJT1078GatewayBuilder builder) | |||||
{ | { | ||||
builder.JT1078Builder.Services.TryAddSingleton<JT1078MsgChannel>(); | builder.JT1078Builder.Services.TryAddSingleton<JT1078MsgChannel>(); | ||||
builder.JT1078Builder.Services.AddSingleton<IJT1078PackageConsumer, JT1078PackageConsumer>(); | |||||
builder.JT1078Builder.Services.AddSingleton<IJT1078MsgConsumer, JT1078MsgConsumer>(); | |||||
return builder; | return builder; | ||||
} | } | ||||
} | } | ||||
@@ -7,11 +7,11 @@ namespace JT1078.Gateway.InMemoryMQ | |||||
{ | { | ||||
public class JT1078MsgChannel | public class JT1078MsgChannel | ||||
{ | { | ||||
public Channel<(string, JT1078.Protocol.JT1078Package)> Channel { get;} | |||||
public Channel<(string, byte[])> Channel { get;} | |||||
public JT1078MsgChannel() | public JT1078MsgChannel() | ||||
{ | { | ||||
Channel = System.Threading.Channels.Channel.CreateUnbounded<(string, JT1078.Protocol.JT1078Package)>(); | |||||
Channel = System.Threading.Channels.Channel.CreateUnbounded<(string, byte[])>(); | |||||
} | } | ||||
} | } | ||||
} | } |
@@ -1,25 +1,18 @@ | |||||
using JT1078.Gateway.Abstractions; | using JT1078.Gateway.Abstractions; | ||||
using JT1078.Protocol; | |||||
using Microsoft.Extensions.Logging; | |||||
using System; | using System; | ||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
using System.Text.Json; | using System.Text.Json; | ||||
using System.Text.Json.Serialization; | |||||
using System.Threading; | using System.Threading; | ||||
using System.Threading.Tasks; | using System.Threading.Tasks; | ||||
namespace JT1078.Gateway.InMemoryMQ | namespace JT1078.Gateway.InMemoryMQ | ||||
{ | { | ||||
public class JT1078PackageConsumer: IJT1078PackageConsumer | |||||
public class JT1078MsgConsumer : IJT1078MsgConsumer | |||||
{ | { | ||||
private JT1078MsgChannel Channel; | private JT1078MsgChannel Channel; | ||||
private readonly ILogger logger; | |||||
public JT1078PackageConsumer(ILoggerFactory loggerFactory,JT1078MsgChannel channel) | |||||
public JT1078MsgConsumer(JT1078MsgChannel channel) | |||||
{ | { | ||||
Channel = channel; | Channel = channel; | ||||
logger = loggerFactory.CreateLogger<JT1078PackageConsumer>(); | |||||
} | } | ||||
public CancellationTokenSource Cts { get; } = new CancellationTokenSource(); | public CancellationTokenSource Cts { get; } = new CancellationTokenSource(); | ||||
@@ -31,17 +24,13 @@ namespace JT1078.Gateway.InMemoryMQ | |||||
} | } | ||||
public void OnMessage(Action<(string TerminalNo, JT1078Package Data)> callback) | |||||
public void OnMessage(Action<(string SIM, byte[] Data)> callback) | |||||
{ | { | ||||
Task.Run(async() => | Task.Run(async() => | ||||
{ | { | ||||
while (!Cts.IsCancellationRequested) | while (!Cts.IsCancellationRequested) | ||||
{ | { | ||||
var reader = await Channel.Channel.Reader.ReadAsync(Cts.Token); | var reader = await Channel.Channel.Reader.ReadAsync(Cts.Token); | ||||
if (logger.IsEnabled(LogLevel.Trace)) | |||||
{ | |||||
logger.LogTrace(JsonSerializer.Serialize(reader.Item2)); | |||||
} | |||||
callback(reader); | callback(reader); | ||||
} | } | ||||
}, Cts.Token); | }, Cts.Token); |
@@ -8,13 +8,13 @@ using System.Threading.Tasks; | |||||
namespace JT1078.Gateway.InMemoryMQ | namespace JT1078.Gateway.InMemoryMQ | ||||
{ | { | ||||
public class JT1078PackageProducer : IJT1078PackageProducer | |||||
public class JT1078MsgProducer : IJT1078MsgProducer | |||||
{ | { | ||||
public string TopicName { get; }= "JT1078Package"; | public string TopicName { get; }= "JT1078Package"; | ||||
private JT1078MsgChannel Channel; | private JT1078MsgChannel Channel; | ||||
public JT1078PackageProducer(JT1078MsgChannel channel) | |||||
public JT1078MsgProducer(JT1078MsgChannel channel) | |||||
{ | { | ||||
Channel = channel; | Channel = channel; | ||||
} | } | ||||
@@ -24,9 +24,9 @@ namespace JT1078.Gateway.InMemoryMQ | |||||
} | } | ||||
public async ValueTask ProduceAsync(string terminalNo, JT1078Package data) | |||||
public async ValueTask ProduceAsync(string sim, byte[] data) | |||||
{ | { | ||||
await Channel.Channel.Writer.WriteAsync((terminalNo, data)); | |||||
await Channel.Channel.Writer.WriteAsync((sim, data)); | |||||
} | } | ||||
} | } | ||||
} | } |
@@ -15,6 +15,9 @@ | |||||
<target name="JT1078TcpServer" xsi:type="File" | <target name="JT1078TcpServer" xsi:type="File" | ||||
fileName="${Directory}/JT1078TcpServer.${shortdate}.log" | fileName="${Directory}/JT1078TcpServer.${shortdate}.log" | ||||
layout="${date:format=yyyyMMddHHmmss} ${callsite} ${level}:${message} ${onexception:${exception:format=tostring} ${newline} ${stacktrace} ${newline}"/> | layout="${date:format=yyyyMMddHHmmss} ${callsite} ${level}:${message} ${onexception:${exception:format=tostring} ${newline} ${stacktrace} ${newline}"/> | ||||
<target name="JT1078UdpServer" xsi:type="File" | |||||
fileName="${Directory}/JT1078UdpServer.${shortdate}.log" | |||||
layout="${date:format=yyyyMMddHHmmss} ${callsite} ${level}:${message} ${onexception:${exception:format=tostring} ${newline} ${stacktrace} ${newline}"/> | |||||
<target name="JT1078Logging" xsi:type="File" | <target name="JT1078Logging" xsi:type="File" | ||||
fileName="${Directory}/JT1078Logging.${shortdate}.log" | fileName="${Directory}/JT1078Logging.${shortdate}.log" | ||||
layout="${message}"/> | layout="${message}"/> | ||||
@@ -32,6 +35,7 @@ | |||||
<logger name="*" minlevel="Trace" writeTo="all"/> | <logger name="*" minlevel="Trace" writeTo="all"/> | ||||
<logger name="JT1078.Gateway.TestNormalHosting.Services.JT1078FlvNormalMsgHostedService" minlevel="Trace" writeTo="JT1078FlvNormalMsgHostedService"/> | <logger name="JT1078.Gateway.TestNormalHosting.Services.JT1078FlvNormalMsgHostedService" minlevel="Trace" writeTo="JT1078FlvNormalMsgHostedService"/> | ||||
<logger name="JT1078.Gateway.JT1078TcpServer" minlevel="Trace" writeTo="JT1078TcpServer"/> | <logger name="JT1078.Gateway.JT1078TcpServer" minlevel="Trace" writeTo="JT1078TcpServer"/> | ||||
<logger name="JT1078Logging" minlevel="Trace" writeTo="JT1078Logging"/> | |||||
<logger name="JT1078.Gateway.JT1078UdpServer" minlevel="Trace" writeTo="JT1078UdpServer"/> | |||||
<logger name="JT1078.Gateway.JT1078Logging" minlevel="Trace" writeTo="JT1078Logging"/> | |||||
</rules> | </rules> | ||||
</nlog> | </nlog> |
@@ -23,6 +23,9 @@ | |||||
<target name="JT1078TcpServer" xsi:type="File" | <target name="JT1078TcpServer" xsi:type="File" | ||||
fileName="${Directory}/JT1078TcpServer.${shortdate}.log" | fileName="${Directory}/JT1078TcpServer.${shortdate}.log" | ||||
layout="${date:format=yyyyMMddHHmmss} ${callsite} ${level}:${message} ${onexception:${exception:format=tostring} ${newline} ${stacktrace} ${newline}"/> | layout="${date:format=yyyyMMddHHmmss} ${callsite} ${level}:${message} ${onexception:${exception:format=tostring} ${newline} ${stacktrace} ${newline}"/> | ||||
<target name="JT1078UdpServer" xsi:type="File" | |||||
fileName="${Directory}/JT1078UdpServer.${shortdate}.log" | |||||
layout="${date:format=yyyyMMddHHmmss} ${callsite} ${level}:${message} ${onexception:${exception:format=tostring} ${newline} ${stacktrace} ${newline}"/> | |||||
<target name="JT1078Logging" xsi:type="File" | <target name="JT1078Logging" xsi:type="File" | ||||
fileName="${Directory}/JT1078Logging.${shortdate}.log" | fileName="${Directory}/JT1078Logging.${shortdate}.log" | ||||
layout="${message}"/> | layout="${message}"/> | ||||
@@ -37,8 +40,9 @@ | |||||
</target> | </target> | ||||
</targets> | </targets> | ||||
<rules> | <rules> | ||||
<logger name="*" minlevel="Trace" writeTo="all,console"/> | |||||
<logger name="*" minlevel="Error" writeTo="all,console"/> | |||||
<logger name="JT1078.Gateway.JT1078TcpServer" minlevel="Trace" writeTo="JT1078TcpServer,console"/> | <logger name="JT1078.Gateway.JT1078TcpServer" minlevel="Trace" writeTo="JT1078TcpServer,console"/> | ||||
<logger name="JT1078Logging" minlevel="Trace" writeTo="JT1078Logging,console"/> | |||||
<logger name="JT1078.Gateway.JT1078UdpServer" minlevel="Trace" writeTo="JT1078UdpServer,console"/> | |||||
<logger name="JT1078.Gateway.JT1078Logging" minlevel="Trace" writeTo="JT1078Logging,console"/> | |||||
</rules> | </rules> | ||||
</nlog> | </nlog> |
@@ -14,7 +14,7 @@ | |||||
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="3.1.7" /> | <PackageReference Include="Microsoft.Extensions.Logging.Console" Version="3.1.7" /> | ||||
<PackageReference Include="NLog.Extensions.Logging" Version="1.6.4" /> | <PackageReference Include="NLog.Extensions.Logging" Version="1.6.4" /> | ||||
</ItemGroup> | </ItemGroup> | ||||
<ItemGroup> | <ItemGroup> | ||||
<ProjectReference Include="..\..\JT1078.Gateway.InMemoryMQ\JT1078.Gateway.InMemoryMQ.csproj" /> | <ProjectReference Include="..\..\JT1078.Gateway.InMemoryMQ\JT1078.Gateway.InMemoryMQ.csproj" /> | ||||
<ProjectReference Include="..\..\JT1078.Gateway\JT1078.Gateway.csproj" /> | <ProjectReference Include="..\..\JT1078.Gateway\JT1078.Gateway.csproj" /> | ||||
@@ -39,7 +39,7 @@ namespace JT1078.Gateway.TestNormalHosting | |||||
services.AddSingleton<TSEncoder>(); | services.AddSingleton<TSEncoder>(); | ||||
services.AddSingleton(new M3U8Option | services.AddSingleton(new M3U8Option | ||||
{ | { | ||||
}); | }); | ||||
services.AddSingleton<M3U8FileManage>(); | services.AddSingleton<M3U8FileManage>(); | ||||
//使用内存队列实现会话通知 | //使用内存队列实现会话通知 | ||||
@@ -48,9 +48,9 @@ namespace JT1078.Gateway.TestNormalHosting | |||||
.AddUdp() | .AddUdp() | ||||
.AddHttp() | .AddHttp() | ||||
//.AddCoordinatorHttpClient() | //.AddCoordinatorHttpClient() | ||||
.AddNormal() | |||||
.AddMsgProducer() | .AddMsgProducer() | ||||
.AddMsgConsumer(); | .AddMsgConsumer(); | ||||
//内存队列没有做分发,可以自己实现。 | |||||
services.AddHostedService<JT1078FlvNormalMsgHostedService>(); | services.AddHostedService<JT1078FlvNormalMsgHostedService>(); | ||||
//services.AddHostedService<JT1078HlsNormalMsgHostedService>(); | //services.AddHostedService<JT1078HlsNormalMsgHostedService>(); | ||||
}); | }); | ||||
@@ -19,7 +19,7 @@ namespace JT1078.Gateway.TestNormalHosting.Services | |||||
{ | { | ||||
public class JT1078FlvNormalMsgHostedService : BackgroundService | public class JT1078FlvNormalMsgHostedService : BackgroundService | ||||
{ | { | ||||
private IJT1078PackageConsumer PackageConsumer; | |||||
private IJT1078MsgConsumer JT1078MsgConsumer; | |||||
private JT1078HttpSessionManager HttpSessionManager; | private JT1078HttpSessionManager HttpSessionManager; | ||||
private FlvEncoder FlvEncoder; | private FlvEncoder FlvEncoder; | ||||
private ILogger Logger; | private ILogger Logger; | ||||
@@ -31,74 +31,73 @@ namespace JT1078.Gateway.TestNormalHosting.Services | |||||
ILoggerFactory loggerFactory, | ILoggerFactory loggerFactory, | ||||
FlvEncoder flvEncoder, | FlvEncoder flvEncoder, | ||||
JT1078HttpSessionManager httpSessionManager, | JT1078HttpSessionManager httpSessionManager, | ||||
IJT1078PackageConsumer packageConsumer) | |||||
IJT1078MsgConsumer msgConsumer) | |||||
{ | { | ||||
Logger = loggerFactory.CreateLogger<JT1078FlvNormalMsgHostedService>(); | Logger = loggerFactory.CreateLogger<JT1078FlvNormalMsgHostedService>(); | ||||
PackageConsumer = packageConsumer; | |||||
JT1078MsgConsumer = msgConsumer; | |||||
HttpSessionManager = httpSessionManager; | HttpSessionManager = httpSessionManager; | ||||
FlvEncoder = flvEncoder; | FlvEncoder = flvEncoder; | ||||
this.memoryCache = memoryCache; | this.memoryCache = memoryCache; | ||||
} | } | ||||
protected override Task ExecuteAsync(CancellationToken stoppingToken) | protected override Task ExecuteAsync(CancellationToken stoppingToken) | ||||
{ | { | ||||
PackageConsumer.OnMessage((Message) => | |||||
JT1078MsgConsumer.OnMessage((Message) => | |||||
{ | { | ||||
JT1078Package package = JT1078Serializer.Deserialize(Message.Data); | |||||
if (Logger.IsEnabled(LogLevel.Debug)) | |||||
{ | |||||
Logger.LogDebug(JsonSerializer.Serialize(HttpSessionManager.GetAll())); | |||||
Logger.LogDebug($"{package.SIM},{package.SN},{package.LogicChannelNumber},{package.Label3.DataType.ToString()},{package.Label3.SubpackageType.ToString()},{package.Bodies.ToHexString()}"); | |||||
} | |||||
try | try | ||||
{ | { | ||||
if (Logger.IsEnabled(LogLevel.Debug)) | |||||
var merge = JT1078Serializer.Merge(package); | |||||
if (merge == null) return; | |||||
string key = $"{package.GetKey()}_{ikey}"; | |||||
if (merge.Label3.DataType == Protocol.Enums.JT1078DataType.视频I帧) | |||||
{ | { | ||||
Logger.LogDebug(JsonSerializer.Serialize(HttpSessionManager.GetAll())); | |||||
Logger.LogDebug($"{Message.Data.SIM},{Message.Data.SN},{Message.Data.LogicChannelNumber},{Message.Data.Label3.DataType.ToString()},{Message.Data.Label3.SubpackageType.ToString()},{Message.Data.Bodies.ToHexString()}"); | |||||
memoryCache.Set(key, merge); | |||||
} | } | ||||
var merge = JT1078.Protocol.JT1078Serializer.Merge(Message.Data); | |||||
string key = $"{Message.Data.GetKey()}_{ikey}"; | |||||
if (merge != null) | |||||
var httpSessions = HttpSessionManager.GetAllBySimAndChannelNo(package.SIM.TrimStart('0'), package.LogicChannelNumber); | |||||
var firstHttpSessions = httpSessions.Where(w => !w.FirstSend).ToList(); | |||||
if (firstHttpSessions.Count > 0) | |||||
{ | { | ||||
if (merge.Label3.DataType == Protocol.Enums.JT1078DataType.视频I帧) | |||||
{ | |||||
memoryCache.Set(key, merge); | |||||
} | |||||
var httpSessions = HttpSessionManager.GetAllBySimAndChannelNo(Message.Data.SIM.TrimStart('0'), Message.Data.LogicChannelNumber); | |||||
var firstHttpSessions = httpSessions.Where(w => !w.FirstSend).ToList(); | |||||
if (firstHttpSessions.Count > 0) | |||||
{ | |||||
if (memoryCache.TryGetValue(key, out JT1078Package idata)) | |||||
{ | |||||
try | |||||
{ | |||||
var flvVideoBuffer = FlvEncoder.EncoderVideoTag(idata, true); | |||||
foreach (var session in firstHttpSessions) | |||||
{ | |||||
HttpSessionManager.SendAVData(session, flvVideoBuffer, true); | |||||
} | |||||
} | |||||
catch (Exception ex) | |||||
{ | |||||
Logger.LogError(ex, $"{Message.Data.SIM},{true},{Message.Data.SN},{Message.Data.LogicChannelNumber},{Message.Data.Label3.DataType.ToString()},{Message.Data.Label3.SubpackageType.ToString()},{Message.Data.Bodies.ToHexString()}"); | |||||
} | |||||
} | |||||
} | |||||
var otherHttpSessions = httpSessions.Where(w => w.FirstSend).ToList(); | |||||
if (otherHttpSessions.Count > 0) | |||||
if (memoryCache.TryGetValue(key, out JT1078Package idata)) | |||||
{ | { | ||||
try | try | ||||
{ | { | ||||
var flvVideoBuffer = FlvEncoder.EncoderVideoTag(merge, false); | |||||
foreach (var session in otherHttpSessions) | |||||
var flvVideoBuffer = FlvEncoder.EncoderVideoTag(idata, true); | |||||
foreach (var session in firstHttpSessions) | |||||
{ | { | ||||
HttpSessionManager.SendAVData(session, flvVideoBuffer, false); | |||||
HttpSessionManager.SendAVData(session, flvVideoBuffer, true); | |||||
} | } | ||||
} | } | ||||
catch (Exception ex) | catch (Exception ex) | ||||
{ | { | ||||
Logger.LogError(ex, $"{Message.Data.SIM},{false},{Message.Data.SN},{Message.Data.LogicChannelNumber},{Message.Data.Label3.DataType.ToString()},{Message.Data.Label3.SubpackageType.ToString()},{Message.Data.Bodies.ToHexString()}"); | |||||
Logger.LogError(ex, $"{package.SIM},{true},{package.SN},{package.LogicChannelNumber},{package.Label3.DataType.ToString()},{package.Label3.SubpackageType.ToString()},{package.Bodies.ToHexString()}"); | |||||
} | |||||
} | |||||
} | |||||
var otherHttpSessions = httpSessions.Where(w => w.FirstSend).ToList(); | |||||
if (otherHttpSessions.Count > 0) | |||||
{ | |||||
try | |||||
{ | |||||
var flvVideoBuffer = FlvEncoder.EncoderVideoTag(merge, false); | |||||
foreach (var session in otherHttpSessions) | |||||
{ | |||||
HttpSessionManager.SendAVData(session, flvVideoBuffer, false); | |||||
} | } | ||||
} | } | ||||
catch (Exception ex) | |||||
{ | |||||
Logger.LogError(ex, $"{package.SIM},{false},{package.SN},{package.LogicChannelNumber},{package.Label3.DataType.ToString()},{package.Label3.SubpackageType.ToString()},{package.Bodies.ToHexString()}"); | |||||
} | |||||
} | } | ||||
} | } | ||||
catch (Exception ex) | catch (Exception ex) | ||||
{ | { | ||||
Logger.LogError(ex, $"{Message.Data.SIM},{Message.Data.SN},{Message.Data.LogicChannelNumber},{Message.Data.Label3.DataType.ToString()},{Message.Data.Label3.SubpackageType.ToString()},{Message.Data.Bodies.ToHexString()}"); | |||||
Logger.LogError(ex, $"{package.SIM},{package.SN},{package.LogicChannelNumber},{package.Label3.DataType.ToString()},{package.Label3.SubpackageType.ToString()},{package.Bodies.ToHexString()}"); | |||||
} | } | ||||
}); | }); | ||||
return Task.CompletedTask; | return Task.CompletedTask; | ||||
@@ -1,6 +1,7 @@ | |||||
using JT1078.Gateway.Abstractions; | using JT1078.Gateway.Abstractions; | ||||
using JT1078.Gateway.Sessions; | using JT1078.Gateway.Sessions; | ||||
using JT1078.Hls; | using JT1078.Hls; | ||||
using JT1078.Protocol; | |||||
using Microsoft.Extensions.Hosting; | using Microsoft.Extensions.Hosting; | ||||
using System; | using System; | ||||
using System.Collections.Generic; | using System.Collections.Generic; | ||||
@@ -13,23 +14,24 @@ namespace JT1078.Gateway.TestNormalHosting.Services | |||||
{ | { | ||||
public class JT1078HlsNormalMsgHostedService : BackgroundService | public class JT1078HlsNormalMsgHostedService : BackgroundService | ||||
{ | { | ||||
private IJT1078PackageConsumer PackageConsumer; | |||||
private IJT1078MsgConsumer MsgConsumer; | |||||
private JT1078HttpSessionManager HttpSessionManager; | private JT1078HttpSessionManager HttpSessionManager; | ||||
private M3U8FileManage M3U8FileManage; | private M3U8FileManage M3U8FileManage; | ||||
public JT1078HlsNormalMsgHostedService( | public JT1078HlsNormalMsgHostedService( | ||||
M3U8FileManage M3U8FileManage, | M3U8FileManage M3U8FileManage, | ||||
JT1078HttpSessionManager httpSessionManager, | JT1078HttpSessionManager httpSessionManager, | ||||
IJT1078PackageConsumer packageConsumer) | |||||
IJT1078MsgConsumer msgConsumer) | |||||
{ | { | ||||
PackageConsumer = packageConsumer; | |||||
MsgConsumer = msgConsumer; | |||||
HttpSessionManager = httpSessionManager; | HttpSessionManager = httpSessionManager; | ||||
this.M3U8FileManage = M3U8FileManage; | this.M3U8FileManage = M3U8FileManage; | ||||
} | } | ||||
protected override Task ExecuteAsync(CancellationToken stoppingToken) | protected override Task ExecuteAsync(CancellationToken stoppingToken) | ||||
{ | { | ||||
PackageConsumer.OnMessage((Message) => | |||||
MsgConsumer.OnMessage((Message) => | |||||
{ | { | ||||
var merge = JT1078.Protocol.JT1078Serializer.Merge(Message.Data); | |||||
JT1078Package package = JT1078Serializer.Deserialize(Message.Data); | |||||
var merge = JT1078.Protocol.JT1078Serializer.Merge(package); | |||||
if (merge != null) | if (merge != null) | ||||
{ | { | ||||
var hasHttpSessionn = HttpSessionManager.GetAllHttpContextBySimAndChannelNo(merge.SIM, merge.LogicChannelNumber); | var hasHttpSessionn = HttpSessionManager.GetAllHttpContextBySimAndChannelNo(merge.SIM, merge.LogicChannelNumber); | ||||
@@ -3,30 +3,26 @@ Microsoft Visual Studio Solution File, Format Version 12.00 | |||||
# Visual Studio Version 16 | # Visual Studio Version 16 | ||||
VisualStudioVersion = 16.0.29418.71 | VisualStudioVersion = 16.0.29418.71 | ||||
MinimumVisualStudioVersion = 10.0.40219.1 | MinimumVisualStudioVersion = 10.0.40219.1 | ||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JT1078.Gateway", "JT1078.Gateway\JT1078.Gateway.csproj", "{39A90F1C-FC46-4905-81F1-3AEE44D6D86D}" | |||||
EndProject | |||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JT1078.Gateway.Test", "JT1078.Gateway.Tests\JT1078.Gateway.Test\JT1078.Gateway.Test.csproj", "{DAC80A8E-4172-451F-910D-9032BF8640F9}" | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JT1078.Gateway.Test", "JT1078.Gateway.Tests\JT1078.Gateway.Test\JT1078.Gateway.Test.csproj", "{DAC80A8E-4172-451F-910D-9032BF8640F9}" | ||||
EndProject | EndProject | ||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{04C0F72A-5BC4-4CEE-B1E9-CCFAA72E373E}" | Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{04C0F72A-5BC4-4CEE-B1E9-CCFAA72E373E}" | ||||
EndProject | EndProject | ||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JT1078.Gateway.Abstractions", "JT1078.Gateway.Abstractions\JT1078.Gateway.Abstractions.csproj", "{EE50F2A6-5F28-4640-BC20-44A8BED8F311}" | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JT1078.Gateway.Abstractions", "JT1078.Gateway.Abstractions\JT1078.Gateway.Abstractions.csproj", "{EE50F2A6-5F28-4640-BC20-44A8BED8F311}" | ||||
EndProject | EndProject | ||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JT1078.Gateway.InMemoryMQ", "JT1078.Gateway.InMemoryMQ\JT1078.Gateway.InMemoryMQ.csproj", "{C7554790-0B3B-490F-B2F1-436C1FD0B4DD}" | |||||
EndProject | |||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JT1078.Gateway.TestNormalHosting", "JT1078.Gateway.Tests\JT1078.Gateway.TestNormalHosting\JT1078.Gateway.TestNormalHosting.csproj", "{6E2DAA64-E2A1-4459-BE61-E807B4EF2CCE}" | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JT1078.Gateway.TestNormalHosting", "JT1078.Gateway.Tests\JT1078.Gateway.TestNormalHosting\JT1078.Gateway.TestNormalHosting.csproj", "{6E2DAA64-E2A1-4459-BE61-E807B4EF2CCE}" | ||||
EndProject | EndProject | ||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JT1078.Gateway.Coordinator", "JT1078.Gateway.Coordinator\JT1078.Gateway.Coordinator.csproj", "{B0A24D3A-FDA3-4DFE-9C31-032C7C22F303}" | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JT1078.Gateway.Coordinator", "JT1078.Gateway.Coordinator\JT1078.Gateway.Coordinator.csproj", "{B0A24D3A-FDA3-4DFE-9C31-032C7C22F303}" | ||||
EndProject | EndProject | ||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JT1078.Gateway", "JT1078.Gateway\JT1078.Gateway.csproj", "{9042CA92-E01A-46CF-9C82-D954325A69B8}" | |||||
EndProject | |||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JT1078.Gateway.InMemoryMQ", "JT1078.Gateway.InMemoryMQ\JT1078.Gateway.InMemoryMQ.csproj", "{011934D6-BEE7-4CDA-9F67-4D6D7D672D6C}" | |||||
EndProject | |||||
Global | Global | ||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution | GlobalSection(SolutionConfigurationPlatforms) = preSolution | ||||
Debug|Any CPU = Debug|Any CPU | Debug|Any CPU = Debug|Any CPU | ||||
Release|Any CPU = Release|Any CPU | Release|Any CPU = Release|Any CPU | ||||
EndGlobalSection | EndGlobalSection | ||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution | GlobalSection(ProjectConfigurationPlatforms) = postSolution | ||||
{39A90F1C-FC46-4905-81F1-3AEE44D6D86D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | |||||
{39A90F1C-FC46-4905-81F1-3AEE44D6D86D}.Debug|Any CPU.Build.0 = Debug|Any CPU | |||||
{39A90F1C-FC46-4905-81F1-3AEE44D6D86D}.Release|Any CPU.ActiveCfg = Release|Any CPU | |||||
{39A90F1C-FC46-4905-81F1-3AEE44D6D86D}.Release|Any CPU.Build.0 = Release|Any CPU | |||||
{DAC80A8E-4172-451F-910D-9032BF8640F9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | {DAC80A8E-4172-451F-910D-9032BF8640F9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | ||||
{DAC80A8E-4172-451F-910D-9032BF8640F9}.Debug|Any CPU.Build.0 = Debug|Any CPU | {DAC80A8E-4172-451F-910D-9032BF8640F9}.Debug|Any CPU.Build.0 = Debug|Any CPU | ||||
{DAC80A8E-4172-451F-910D-9032BF8640F9}.Release|Any CPU.ActiveCfg = Release|Any CPU | {DAC80A8E-4172-451F-910D-9032BF8640F9}.Release|Any CPU.ActiveCfg = Release|Any CPU | ||||
@@ -35,10 +31,6 @@ Global | |||||
{EE50F2A6-5F28-4640-BC20-44A8BED8F311}.Debug|Any CPU.Build.0 = Debug|Any CPU | {EE50F2A6-5F28-4640-BC20-44A8BED8F311}.Debug|Any CPU.Build.0 = Debug|Any CPU | ||||
{EE50F2A6-5F28-4640-BC20-44A8BED8F311}.Release|Any CPU.ActiveCfg = Release|Any CPU | {EE50F2A6-5F28-4640-BC20-44A8BED8F311}.Release|Any CPU.ActiveCfg = Release|Any CPU | ||||
{EE50F2A6-5F28-4640-BC20-44A8BED8F311}.Release|Any CPU.Build.0 = Release|Any CPU | {EE50F2A6-5F28-4640-BC20-44A8BED8F311}.Release|Any CPU.Build.0 = Release|Any CPU | ||||
{C7554790-0B3B-490F-B2F1-436C1FD0B4DD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | |||||
{C7554790-0B3B-490F-B2F1-436C1FD0B4DD}.Debug|Any CPU.Build.0 = Debug|Any CPU | |||||
{C7554790-0B3B-490F-B2F1-436C1FD0B4DD}.Release|Any CPU.ActiveCfg = Release|Any CPU | |||||
{C7554790-0B3B-490F-B2F1-436C1FD0B4DD}.Release|Any CPU.Build.0 = Release|Any CPU | |||||
{6E2DAA64-E2A1-4459-BE61-E807B4EF2CCE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | {6E2DAA64-E2A1-4459-BE61-E807B4EF2CCE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | ||||
{6E2DAA64-E2A1-4459-BE61-E807B4EF2CCE}.Debug|Any CPU.Build.0 = Debug|Any CPU | {6E2DAA64-E2A1-4459-BE61-E807B4EF2CCE}.Debug|Any CPU.Build.0 = Debug|Any CPU | ||||
{6E2DAA64-E2A1-4459-BE61-E807B4EF2CCE}.Release|Any CPU.ActiveCfg = Release|Any CPU | {6E2DAA64-E2A1-4459-BE61-E807B4EF2CCE}.Release|Any CPU.ActiveCfg = Release|Any CPU | ||||
@@ -47,6 +39,14 @@ Global | |||||
{B0A24D3A-FDA3-4DFE-9C31-032C7C22F303}.Debug|Any CPU.Build.0 = Debug|Any CPU | {B0A24D3A-FDA3-4DFE-9C31-032C7C22F303}.Debug|Any CPU.Build.0 = Debug|Any CPU | ||||
{B0A24D3A-FDA3-4DFE-9C31-032C7C22F303}.Release|Any CPU.ActiveCfg = Release|Any CPU | {B0A24D3A-FDA3-4DFE-9C31-032C7C22F303}.Release|Any CPU.ActiveCfg = Release|Any CPU | ||||
{B0A24D3A-FDA3-4DFE-9C31-032C7C22F303}.Release|Any CPU.Build.0 = Release|Any CPU | {B0A24D3A-FDA3-4DFE-9C31-032C7C22F303}.Release|Any CPU.Build.0 = Release|Any CPU | ||||
{9042CA92-E01A-46CF-9C82-D954325A69B8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | |||||
{9042CA92-E01A-46CF-9C82-D954325A69B8}.Debug|Any CPU.Build.0 = Debug|Any CPU | |||||
{9042CA92-E01A-46CF-9C82-D954325A69B8}.Release|Any CPU.ActiveCfg = Release|Any CPU | |||||
{9042CA92-E01A-46CF-9C82-D954325A69B8}.Release|Any CPU.Build.0 = Release|Any CPU | |||||
{011934D6-BEE7-4CDA-9F67-4D6D7D672D6C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | |||||
{011934D6-BEE7-4CDA-9F67-4D6D7D672D6C}.Debug|Any CPU.Build.0 = Debug|Any CPU | |||||
{011934D6-BEE7-4CDA-9F67-4D6D7D672D6C}.Release|Any CPU.ActiveCfg = Release|Any CPU | |||||
{011934D6-BEE7-4CDA-9F67-4D6D7D672D6C}.Release|Any CPU.Build.0 = Release|Any CPU | |||||
EndGlobalSection | EndGlobalSection | ||||
GlobalSection(SolutionProperties) = preSolution | GlobalSection(SolutionProperties) = preSolution | ||||
HideSolutionNode = FALSE | HideSolutionNode = FALSE | ||||
@@ -1,19 +0,0 @@ | |||||
using JT1078.Gateway.Abstractions; | |||||
namespace JT1078.Gateway.Impl | |||||
{ | |||||
public class JT1078NormalGatewayBuilderDefault : IJT1078NormalGatewayBuilder | |||||
{ | |||||
public IJT1078Builder JT1078Builder { get; } | |||||
public JT1078NormalGatewayBuilderDefault(IJT1078Builder builder) | |||||
{ | |||||
JT1078Builder = builder; | |||||
} | |||||
public IJT1078Builder Builder() | |||||
{ | |||||
return JT1078Builder; | |||||
} | |||||
} | |||||
} |
@@ -1,19 +0,0 @@ | |||||
using JT1078.Gateway.Abstractions; | |||||
namespace JT1078.Gateway.Impl | |||||
{ | |||||
public class JT1078QueueGatewayBuilderDefault : IJT1078QueueGatewayBuilder | |||||
{ | |||||
public IJT1078Builder JT1078Builder { get; } | |||||
public JT1078QueueGatewayBuilderDefault(IJT1078Builder builder) | |||||
{ | |||||
JT1078Builder = builder; | |||||
} | |||||
public IJT1078Builder Builder() | |||||
{ | |||||
return JT1078Builder; | |||||
} | |||||
} | |||||
} |
@@ -1,4 +1,5 @@ | |||||
<Project Sdk="Microsoft.NET.Sdk"> | <Project Sdk="Microsoft.NET.Sdk"> | ||||
<Import Project="..\Version.props" /> | |||||
<PropertyGroup> | <PropertyGroup> | ||||
<TargetFramework>netstandard2.1</TargetFramework> | <TargetFramework>netstandard2.1</TargetFramework> | ||||
<LangVersion>8.0</LangVersion> | <LangVersion>8.0</LangVersion> | ||||
@@ -16,7 +17,7 @@ | |||||
<SignAssembly>false</SignAssembly> | <SignAssembly>false</SignAssembly> | ||||
<PackageLicenseFile>LICENSE</PackageLicenseFile> | <PackageLicenseFile>LICENSE</PackageLicenseFile> | ||||
<PackageRequireLicenseAcceptance>true</PackageRequireLicenseAcceptance> | <PackageRequireLicenseAcceptance>true</PackageRequireLicenseAcceptance> | ||||
<Version>1.0.0-preview2</Version> | |||||
<Version>$(JT1078PackageVersion)</Version> | |||||
</PropertyGroup> | </PropertyGroup> | ||||
<ItemGroup> | <ItemGroup> | ||||
<Compile Remove="Codecs\**" /> | <Compile Remove="Codecs\**" /> | ||||
@@ -66,7 +66,7 @@ namespace JT1078.Gateway | |||||
builder.JT1078Builder.Services.AddHostedService<JT1078HttpServer>(); | builder.JT1078Builder.Services.AddHostedService<JT1078HttpServer>(); | ||||
return builder; | return builder; | ||||
} | } | ||||
public static IJT1078GatewayBuilder AddCoordinatorHttpClient(this IJT1078GatewayBuilder builder) | public static IJT1078GatewayBuilder AddCoordinatorHttpClient(this IJT1078GatewayBuilder builder) | ||||
{ | { | ||||
builder.JT1078Builder.Services.AddSingleton<JT1078CoordinatorHttpClient>(); | builder.JT1078Builder.Services.AddSingleton<JT1078CoordinatorHttpClient>(); | ||||
@@ -74,16 +74,6 @@ namespace JT1078.Gateway | |||||
return builder; | return builder; | ||||
} | } | ||||
public static IJT1078NormalGatewayBuilder AddNormal(this IJT1078GatewayBuilder builder) | |||||
{ | |||||
return new JT1078NormalGatewayBuilderDefault(builder.JT1078Builder); | |||||
} | |||||
public static IJT1078QueueGatewayBuilder AddQueue(this IJT1078GatewayBuilder builder) | |||||
{ | |||||
return new JT1078QueueGatewayBuilderDefault(builder.JT1078Builder); | |||||
} | |||||
internal static IJT1078GatewayBuilder AddJT1078Core(this IJT1078GatewayBuilder builder) | internal static IJT1078GatewayBuilder AddJT1078Core(this IJT1078GatewayBuilder builder) | ||||
{ | { | ||||
builder.JT1078Builder.Services.AddSingleton<JT1078SessionNoticeService>(); | builder.JT1078Builder.Services.AddSingleton<JT1078SessionNoticeService>(); | ||||
@@ -1,7 +1,6 @@ | |||||
using System; | using System; | ||||
using System.Buffers; | using System.Buffers; | ||||
using System.Buffers.Binary; | using System.Buffers.Binary; | ||||
using System.Collections.Generic; | |||||
using System.IO.Pipelines; | using System.IO.Pipelines; | ||||
using System.Linq; | using System.Linq; | ||||
using System.Net; | using System.Net; | ||||
@@ -10,7 +9,6 @@ using System.Text; | |||||
using System.Threading; | using System.Threading; | ||||
using System.Threading.Tasks; | using System.Threading.Tasks; | ||||
using JT1078.Gateway.Abstractions; | using JT1078.Gateway.Abstractions; | ||||
using JT1078.Gateway.Abstractions.Enums; | |||||
using JT1078.Gateway.Configurations; | using JT1078.Gateway.Configurations; | ||||
using JT1078.Gateway.Sessions; | using JT1078.Gateway.Sessions; | ||||
using JT1078.Protocol; | using JT1078.Protocol; | ||||
@@ -34,34 +32,8 @@ namespace JT1078.Gateway | |||||
private readonly JT1078SessionManager SessionManager; | private readonly JT1078SessionManager SessionManager; | ||||
private readonly IJT1078PackageProducer jT1078PackageProducer; | |||||
private readonly IJT1078MsgProducer jT1078MsgProducer; | private readonly IJT1078MsgProducer jT1078MsgProducer; | ||||
private readonly JT1078UseType jT1078UseType; | |||||
/// <summary> | |||||
/// 使用正常方式 | |||||
/// </summary> | |||||
/// <param name="jT1078PackageProducer"></param> | |||||
/// <param name="jT1078ConfigurationAccessor"></param> | |||||
/// <param name="loggerFactory"></param> | |||||
/// <param name="jT1078SessionManager"></param> | |||||
public JT1078TcpServer( | |||||
IJT1078PackageProducer jT1078PackageProducer, | |||||
IOptions<JT1078Configuration> jT1078ConfigurationAccessor, | |||||
ILoggerFactory loggerFactory, | |||||
JT1078SessionManager jT1078SessionManager) | |||||
{ | |||||
SessionManager = jT1078SessionManager; | |||||
jT1078UseType = JT1078UseType.Normal; | |||||
Logger = loggerFactory.CreateLogger<JT1078TcpServer>(); | |||||
LogLogger = loggerFactory.CreateLogger("JT1078Logging"); | |||||
Configuration = jT1078ConfigurationAccessor.Value; | |||||
this.jT1078PackageProducer = jT1078PackageProducer; | |||||
InitServer(); | |||||
} | |||||
/// <summary> | /// <summary> | ||||
/// 使用队列方式 | /// 使用队列方式 | ||||
/// </summary> | /// </summary> | ||||
@@ -70,15 +42,14 @@ namespace JT1078.Gateway | |||||
/// <param name="loggerFactory"></param> | /// <param name="loggerFactory"></param> | ||||
/// <param name="jT1078SessionManager"></param> | /// <param name="jT1078SessionManager"></param> | ||||
public JT1078TcpServer( | public JT1078TcpServer( | ||||
IJT1078MsgProducer jT1078MsgProducer, | |||||
IJT1078MsgProducer jT1078MsgProducer, | |||||
IOptions<JT1078Configuration> jT1078ConfigurationAccessor, | IOptions<JT1078Configuration> jT1078ConfigurationAccessor, | ||||
ILoggerFactory loggerFactory, | ILoggerFactory loggerFactory, | ||||
JT1078SessionManager jT1078SessionManager) | JT1078SessionManager jT1078SessionManager) | ||||
{ | { | ||||
SessionManager = jT1078SessionManager; | SessionManager = jT1078SessionManager; | ||||
jT1078UseType = JT1078UseType.Queue; | |||||
Logger = loggerFactory.CreateLogger<JT1078TcpServer>(); | Logger = loggerFactory.CreateLogger<JT1078TcpServer>(); | ||||
LogLogger = loggerFactory.CreateLogger("JT1078Logging"); | |||||
LogLogger = loggerFactory.CreateLogger("JT1078.Gateway.JT1078Logging"); | |||||
Configuration = jT1078ConfigurationAccessor.Value; | Configuration = jT1078ConfigurationAccessor.Value; | ||||
this.jT1078MsgProducer = jT1078MsgProducer; | this.jT1078MsgProducer = jT1078MsgProducer; | ||||
InitServer(); | InitServer(); | ||||
@@ -266,14 +237,7 @@ namespace JT1078.Gateway | |||||
try | try | ||||
{ | { | ||||
SessionManager.TryLink(fixedHeaderInfo.SIM, session); | SessionManager.TryLink(fixedHeaderInfo.SIM, session); | ||||
if (jT1078UseType == JT1078UseType.Queue) | |||||
{ | |||||
jT1078MsgProducer.ProduceAsync(fixedHeaderInfo.SIM, package1.ToArray()); | |||||
} | |||||
else | |||||
{ | |||||
jT1078PackageProducer.ProduceAsync(fixedHeaderInfo.SIM, JT1078Serializer.Deserialize(package1)); | |||||
} | |||||
jT1078MsgProducer.ProduceAsync(fixedHeaderInfo.SIM, package1.ToArray()); | |||||
} | } | ||||
catch (Exception ex) | catch (Exception ex) | ||||
{ | { | ||||
@@ -307,14 +271,7 @@ namespace JT1078.Gateway | |||||
try | try | ||||
{ | { | ||||
SessionManager.TryLink(fixedHeaderInfo.SIM, session); | SessionManager.TryLink(fixedHeaderInfo.SIM, session); | ||||
if (jT1078UseType == JT1078UseType.Queue) | |||||
{ | |||||
jT1078MsgProducer.ProduceAsync(fixedHeaderInfo.SIM, package); | |||||
} | |||||
else | |||||
{ | |||||
jT1078PackageProducer.ProduceAsync(fixedHeaderInfo.SIM, JT1078Serializer.Deserialize(package)); | |||||
} | |||||
jT1078MsgProducer.ProduceAsync(fixedHeaderInfo.SIM, package); | |||||
} | } | ||||
catch (Exception ex) | catch (Exception ex) | ||||
{ | { | ||||
@@ -1,20 +1,13 @@ | |||||
using System; | using System; | ||||
using System.Buffers; | using System.Buffers; | ||||
using System.Buffers.Binary; | |||||
using System.Collections.Generic; | |||||
using System.IO.Pipelines; | |||||
using System.Linq; | |||||
using System.Net; | using System.Net; | ||||
using System.Net.Sockets; | using System.Net.Sockets; | ||||
using System.Text; | |||||
using System.Threading; | using System.Threading; | ||||
using System.Threading.Tasks; | using System.Threading.Tasks; | ||||
using JT1078.Gateway.Abstractions; | using JT1078.Gateway.Abstractions; | ||||
using JT1078.Gateway.Abstractions.Enums; | |||||
using JT1078.Gateway.Configurations; | using JT1078.Gateway.Configurations; | ||||
using JT1078.Gateway.Sessions; | using JT1078.Gateway.Sessions; | ||||
using JT1078.Protocol; | using JT1078.Protocol; | ||||
using JT1078.Protocol.Enums; | |||||
using JT1078.Protocol.Extensions; | using JT1078.Protocol.Extensions; | ||||
using Microsoft.Extensions.Hosting; | using Microsoft.Extensions.Hosting; | ||||
using Microsoft.Extensions.Logging; | using Microsoft.Extensions.Logging; | ||||
@@ -32,33 +25,8 @@ namespace JT1078.Gateway | |||||
private readonly JT1078SessionManager SessionManager; | private readonly JT1078SessionManager SessionManager; | ||||
private readonly IJT1078PackageProducer jT1078PackageProducer; | |||||
private readonly IJT1078MsgProducer jT1078MsgProducer; | private readonly IJT1078MsgProducer jT1078MsgProducer; | ||||
private readonly JT1078UseType jT1078UseType; | |||||
/// <summary> | |||||
/// 使用正常方式 | |||||
/// </summary> | |||||
/// <param name="jT1078PackageProducer"></param> | |||||
/// <param name="jT1078ConfigurationAccessor"></param> | |||||
/// <param name="loggerFactory"></param> | |||||
/// <param name="jT1078SessionManager"></param> | |||||
public JT1078UdpServer( | |||||
IJT1078PackageProducer jT1078PackageProducer, | |||||
IOptions<JT1078Configuration> jT1078ConfigurationAccessor, | |||||
ILoggerFactory loggerFactory, | |||||
JT1078SessionManager jT1078SessionManager) | |||||
{ | |||||
SessionManager = jT1078SessionManager; | |||||
jT1078UseType = JT1078UseType.Normal; | |||||
Logger = loggerFactory.CreateLogger<JT1078TcpServer>(); | |||||
Configuration = jT1078ConfigurationAccessor.Value; | |||||
this.jT1078PackageProducer = jT1078PackageProducer; | |||||
InitServer(); | |||||
} | |||||
/// <summary> | /// <summary> | ||||
/// 使用队列方式 | /// 使用队列方式 | ||||
/// </summary> | /// </summary> | ||||
@@ -73,7 +41,6 @@ namespace JT1078.Gateway | |||||
JT1078SessionManager jT1078SessionManager) | JT1078SessionManager jT1078SessionManager) | ||||
{ | { | ||||
SessionManager = jT1078SessionManager; | SessionManager = jT1078SessionManager; | ||||
jT1078UseType = JT1078UseType.Queue; | |||||
Logger = loggerFactory.CreateLogger<JT1078UdpServer>(); | Logger = loggerFactory.CreateLogger<JT1078UdpServer>(); | ||||
Configuration = jT1078ConfigurationAccessor.Value; | Configuration = jT1078ConfigurationAccessor.Value; | ||||
this.jT1078MsgProducer = jT1078MsgProducer; | this.jT1078MsgProducer = jT1078MsgProducer; | ||||
@@ -134,14 +101,7 @@ namespace JT1078.Gateway | |||||
{ | { | ||||
Logger.LogInformation($"[Connected]:{receiveMessageFromResult.RemoteEndPoint}"); | Logger.LogInformation($"[Connected]:{receiveMessageFromResult.RemoteEndPoint}"); | ||||
} | } | ||||
if (jT1078UseType == JT1078UseType.Queue) | |||||
{ | |||||
jT1078MsgProducer.ProduceAsync(package.SIM, buffer.ToArray()); | |||||
} | |||||
else | |||||
{ | |||||
jT1078PackageProducer.ProduceAsync(package.SIM, package); | |||||
} | |||||
jT1078MsgProducer.ProduceAsync(package.SIM, buffer.ToArray()); | |||||
} | } | ||||
catch (NotImplementedException ex) | catch (NotImplementedException ex) | ||||
{ | { | ||||
@@ -38,14 +38,14 @@ namespace JT1078.Gateway.Jobs | |||||
{ | { | ||||
if (logger.IsEnabled(LogLevel.Information)) | if (logger.IsEnabled(LogLevel.Information)) | ||||
{ | { | ||||
logger.LogInformation($"[Notice]:{notice.TerminalPhoneNo}-{notice.ProtocolType}-{notice.SessionType}"); | |||||
logger.LogInformation($"[Notice]:{notice.SIM}-{notice.ProtocolType}-{notice.SessionType}"); | |||||
} | } | ||||
if(JT1078GatewayConstants.SessionOffline== notice.SessionType) | if(JT1078GatewayConstants.SessionOffline== notice.SessionType) | ||||
{ | { | ||||
if (HttpSessionManager != null) | if (HttpSessionManager != null) | ||||
{ | { | ||||
//当1078设备主动断开的情况下,需要关闭所有再观看的连接 | //当1078设备主动断开的情况下,需要关闭所有再观看的连接 | ||||
HttpSessionManager.TryRemoveBySim(notice.TerminalPhoneNo); | |||||
HttpSessionManager.TryRemoveBySim(notice.SIM); | |||||
} | } | ||||
} | } | ||||
} | } | ||||
@@ -7,10 +7,10 @@ namespace JT1078.Gateway.Services | |||||
{ | { | ||||
public class JT1078SessionNoticeService | public class JT1078SessionNoticeService | ||||
{ | { | ||||
public BlockingCollection<(string SessionType, string TerminalPhoneNo,string ProtocolType)> SessionNoticeBlockingCollection { get;internal set; } | |||||
public BlockingCollection<(string SessionType, string SIM,string ProtocolType)> SessionNoticeBlockingCollection { get;internal set; } | |||||
public JT1078SessionNoticeService() | public JT1078SessionNoticeService() | ||||
{ | { | ||||
SessionNoticeBlockingCollection = new BlockingCollection<(string SessionType, string TerminalPhoneNo, string ProtocolType)>(); | |||||
SessionNoticeBlockingCollection = new BlockingCollection<(string SessionType, string SIM, string ProtocolType)>(); | |||||
} | } | ||||
} | } | ||||
} | } |
@@ -0,0 +1,5 @@ | |||||
<Project> | |||||
<PropertyGroup> | |||||
<JT1078PackageVersion>1.0.0-preview3</JT1078PackageVersion> | |||||
</PropertyGroup> | |||||
</Project> |