public JT808TcpClient(JT808DeviceConfig deviceConfig, IServiceProvider serviceProvider)
        {
            DeviceConfig  = deviceConfig;
            LoggerFactory = serviceProvider.GetRequiredService <ILoggerFactory>();
            JT808SendAtomicCounterService    jT808SendAtomicCounterService    = serviceProvider.GetRequiredService <JT808SendAtomicCounterService>();
            JT808ReceiveAtomicCounterService jT808ReceiveAtomicCounterService = serviceProvider.GetRequiredService <JT808ReceiveAtomicCounterService>();
            IJT808Config jT808Config = serviceProvider.GetRequiredService <IJT808Config>();

            group = new MultithreadEventLoopGroup(1);
            Bootstrap bootstrap = new Bootstrap();

            bootstrap.Group(group);
            bootstrap.Channel <TcpSocketChannel>();
            bootstrap
            .Option(ChannelOption.Allocator, new PooledByteBufferAllocator())
            .Handler(new ActionChannelInitializer <IChannel>(channel =>
            {
                channel.Pipeline.AddLast("jt808TcpBuffer", new DelimiterBasedFrameDecoder(65535,
                                                                                          Unpooled.CopiedBuffer(new byte[] { JT808.Protocol.JT808Package.BeginFlag }),
                                                                                          Unpooled.CopiedBuffer(new byte[] { JT808.Protocol.JT808Package.EndFlag })));
                channel.Pipeline.AddLast("systemIdleState", new IdleStateHandler(60, deviceConfig.Heartbeat, 3600));
                channel.Pipeline.AddLast("jt808TcpDecode", new JT808ClientTcpDecoder());
                channel.Pipeline.AddLast("jt808TcpEncode", new JT808ClientTcpEncoder(jT808Config, jT808SendAtomicCounterService, LoggerFactory));
                channel.Pipeline.AddLast("jt808TcpClientConnection", new JT808TcpClientConnectionHandler(this));
                channel.Pipeline.AddLast("jt808TcpService", new JT808TcpClientHandler(jT808ReceiveAtomicCounterService, this));
            }));
            Task.Run(async() =>
            {
                clientChannel = await bootstrap.ConnectAsync(IPAddress.Parse(DeviceConfig.TcpHost), DeviceConfig.TcpPort);
            });
        }
Esempio n. 2
0
        public JT808TcpClient(JT808DeviceConfig deviceConfig, IServiceProvider serviceProvider)
        {
            DeviceConfig  = deviceConfig;
            LoggerFactory = serviceProvider.GetRequiredService <ILoggerFactory>();
            JT808SendAtomicCounterService    jT808SendAtomicCounterService    = serviceProvider.GetRequiredService <JT808SendAtomicCounterService>();
            JT808ReceiveAtomicCounterService jT808ReceiveAtomicCounterService = serviceProvider.GetRequiredService <JT808ReceiveAtomicCounterService>();
            IJT808Config jT808Config = serviceProvider.GetRequiredService <IJT808Config>();

            group = new MultithreadEventLoopGroup(1);
            Bootstrap bootstrap = new Bootstrap();

            bootstrap.Group(group);
            bootstrap.Channel <TcpSocketChannel>();
            if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux) || RuntimeInformation.IsOSPlatform(OSPlatform.OSX))
            {
                bootstrap.Option(ChannelOption.SoReuseport, true);
            }
            bootstrap
            .Option(ChannelOption.SoBacklog, 8192)
            .Handler(new ActionChannelInitializer <IChannel>(channel =>
            {
                channel.Pipeline.AddLast("jt808TcpBuffer", new DelimiterBasedFrameDecoder(int.MaxValue,
                                                                                          Unpooled.CopiedBuffer(new byte[] { JT808.Protocol.JT808Package.BeginFlag }),
                                                                                          Unpooled.CopiedBuffer(new byte[] { JT808.Protocol.JT808Package.EndFlag })));
                channel.Pipeline.AddLast("systemIdleState", new IdleStateHandler(60, deviceConfig.Heartbeat, 3600));
                channel.Pipeline.AddLast("jt808TcpDecode", new JT808ClientTcpDecoder());
                channel.Pipeline.AddLast("jt808TcpEncode", new JT808ClientTcpEncoder(jT808Config, jT808SendAtomicCounterService, LoggerFactory));
                channel.Pipeline.AddLast("jt808TcpClientConnection", new JT808TcpClientConnectionHandler(this));
                channel.Pipeline.AddLast("jt808TcpService", new JT808TcpClientHandler(jT808ReceiveAtomicCounterService, this));
            }));
            clientChannel = bootstrap.ConnectAsync(IPAddress.Parse(DeviceConfig.TcpHost), DeviceConfig.TcpPort).Result;
        }
Esempio n. 3
0
 /// <summary>
 ///
 /// </summary>
 public ReportController(
     IJT808TcpClientFactory factory,
     JT808ReceiveAtomicCounterService jT808ReceiveAtomicCounterService,
     JT808SendAtomicCounterService jT808SendAtomicCounterService)
 {
     clientFactory = factory;
     ReceiveAtomicCounterService = jT808ReceiveAtomicCounterService;
     SendAtomicCounterService    = jT808SendAtomicCounterService;
 }
Esempio n. 4
0
 public JT808TcpClient(
     JT808DeviceConfig deviceConfig,
     IServiceProvider serviceProvider)
 {
     DeviceConfig                = deviceConfig;
     SendAtomicCounterService    = serviceProvider.GetRequiredService <JT808SendAtomicCounterService>();
     ReceiveAtomicCounterService = serviceProvider.GetRequiredService <JT808ReceiveAtomicCounterService>();
     JT808Serializer             = serviceProvider.GetRequiredService <IJT808Config>().GetSerializer();
     Logger = serviceProvider.GetRequiredService <ILoggerFactory>().CreateLogger("JT808TcpClient");
 }
 public QueryReportHostedService(
     ILoggerFactory loggerFactory,
     IHubContext <ReportHub> hubContext,
     JT808ReceiveAtomicCounterService jT808ReceiveAtomicCounterService,
     JT808SendAtomicCounterService jT808SendAtomicCounterService,
     IJT808TcpClientFactory clientFactory)
 {
     this.clientFactory          = clientFactory;
     this._hubContext            = hubContext;
     logger                      = loggerFactory.CreateLogger <QueryReportHostedService>();
     ReceiveAtomicCounterService = jT808ReceiveAtomicCounterService;
     SendAtomicCounterService    = jT808SendAtomicCounterService;
 }
Esempio n. 6
0
 public JT808TcpClient(
     JT808DeviceConfig deviceConfig,
     IServiceProvider serviceProvider)
 {
     DeviceConfig                = deviceConfig;
     WriteableTimeout            = DateTime.UtcNow.AddSeconds(DeviceConfig.Heartbeat);
     heartbeatCTS                = new CancellationTokenSource();
     SendAtomicCounterService    = serviceProvider.GetRequiredService <JT808SendAtomicCounterService>();
     ReceiveAtomicCounterService = serviceProvider.GetRequiredService <JT808ReceiveAtomicCounterService>();
     JT808Serializer             = serviceProvider.GetRequiredService <IJT808Config>().GetSerializer();
     Logger   = serviceProvider.GetRequiredService <ILoggerFactory>().CreateLogger <JT808TcpClient>();
     producer = serviceProvider.GetRequiredService <IJT808MessageProducer>();
     RetryBlockingCollection = serviceProvider.GetRequiredService <JT808RetryBlockingCollection>();
 }
 public JT808TcpClientHandler(JT808ReceiveAtomicCounterService jT808ReceiveAtomicCounterService, JT808TcpClient jT808TcpClient)
 {
     logger = jT808TcpClient.LoggerFactory.CreateLogger <JT808TcpClientHandler>();
     this.jT808ReceiveAtomicCounterService = jT808ReceiveAtomicCounterService;
 }