示例#1
0
        /// <summary>
        /// Initialization of slave.
        /// </summary>
        /// <param name="address"></param>
        /// <param name="timeout"></param>
        /// <returns></returns>
        public async Task <bool> Ping(byte address, TimeSpan timeout)
        {
            var resetEvent = new AutoResetEvent(false);

            _binding.PacketReceived += (sender, e) =>
            {
                switch (e.Packet)
                {
                case AckFrame frame:
                {
                    resetEvent.Set();
                }
                break;
                }
            };

            try
            {
                await _binding.ConnectAsync();

                await _binding.SendAsync(new ShortFrame((byte)ControlMask.SND_NKE, address));

                return(resetEvent.WaitOne(timeout));
            }
            finally
            {
                await _binding.DisconnectAsync();
            }
        }
示例#2
0
        private void Handle(PushDataPacket packet, IEndPointBinding deviceBinding)
        {
            _logger.Info($"PushData packet received from {deviceBinding.ToString()}", GetType().Name);

            _logger.Info($"Sending PushAck packet to {deviceBinding.ToString()}", GetType().Name);

            _gatewayChannels
            .AddOrUpdate(Direction.Upstream, new GatewayChannel(deviceBinding, _logger), (key, channel) =>
            {
                //Update binding with new values eg. ports.
                channel.Binding = deviceBinding;

                return(channel);
            })
            .Binding
            .SendAsync(new PushAckPacket
            {
                ProtocolVersion = packet.ProtocolVersion,
                Token           = packet.Token,
            });

            _logger.Info($"Sending PushData packet to {_cloudBinding.ToString()}", GetType().Name);

            _cloudBinding.SendAsync(packet);
        }
        /// <summary>
        /// Initialization of slave with SND_NKE
        /// </summary>
        /// <param name="address">Primary address</param>
        /// <returns>true if </returns>
        public async Task <bool> Ping(byte address)
        {
            await _binding.SendAsync(new ShortFrame((byte)ControlMask.SND_NKE, address));

            return(true);
        }