Exemple #1
0
        /// <summary>
        /// Creates an MQTT Client
        /// </summary>
        /// <param name="configuration">
        /// The configuration used for creating the Client
        /// See <see cref="MqttConfiguration" /> for more details about the supported values
        /// </param>
        /// <returns>A new MQTT Client</returns>
        /// <exception cref="MqttClientException">MqttClientException</exception>
        public async Task <IMqttClient> CreateClientAsync(MqttConfiguration configuration)
        {
            try
            {
                //Adding this to not break backwards compatibility related to the method signature
                //Yielding at this point will cause the method to return immediately after it's called,
                //running the rest of the logic acynchronously
                await Task.Yield();

                MqttTopicEvaluator         topicEvaluator      = new MqttTopicEvaluator(configuration);
                IMqttChannelFactory        innerChannelFactory = _binding.GetChannelFactory(_hostAddress, configuration);
                PacketChannelFactory       channelFactory      = new PacketChannelFactory(innerChannelFactory, topicEvaluator, configuration);
                PacketIdProvider           packetIdProvider    = new PacketIdProvider();
                InMemoryRepositoryProvider repositoryProvider  = new InMemoryRepositoryProvider();
                ClientProtocolFlowProvider flowProvider        = new ClientProtocolFlowProvider(topicEvaluator, repositoryProvider, configuration);

                return(new MqttClientImpl(channelFactory, flowProvider, repositoryProvider, packetIdProvider, configuration));
            }
            catch (Exception ex)
            {
                _tracer.Error(ex, ClientProperties.Client_InitializeError);

                throw new MqttClientException(ClientProperties.Client_InitializeError, ex);
            }
        }
Exemple #2
0
 /// <summary>
 /// 初始化
 /// </summary>
 private void Init()
 {
     this.apiActionTable   = new ApiActionTable(Common.GetServiceApiActions(this.GetType()));
     this.packetIdProvider = new PacketIdProvider();
     this.taskSetterTable  = new TaskSetterTable <long>();
     this.Serializer       = new DefaultSerializer();
     this.TimeOut          = TimeSpan.FromSeconds(30);
 }
 /// <summary>
 /// 初始化
 /// </summary>
 private void Init()
 {
     this.apiActionTable   = new ApiActionTable(this.FindApiActions());
     this.packetIdProvider = new PacketIdProvider();
     this.taskSetterTable  = new TaskSetterTable <long>();
     this.TimeOut          = TimeSpan.FromSeconds(30);
     this.JsonSerializer   = new DefaultDynamicJsonSerializer();
 }
Exemple #4
0
 /// <summary>
 /// 释放资源
 /// </summary>
 public void Dispose()
 {
     this.apiActionTable = null;
     this.taskSetterTable.Clear();
     this.taskSetterTable  = null;
     this.packetIdProvider = null;
     this.Serializer       = null;
     this.clientSession.CloseSafe();
 }
Exemple #5
0
 public MqttClient(IOptions <MqttClientOptions> options,
                   ILogger <MqttClient> logger = default)
 {
     _logger                   = logger ?? NullLogger <MqttClient> .Instance;
     _eventLoopGroup           = new MultithreadEventLoopGroup();
     _packetIdentifierProvider = new PacketIdProvider();
     _packetDispatcher         = new PacketDispatcher();
     _options                  = options.Value;
 }
Exemple #6
0
        /// <summary>
        /// 释放资源
        /// </summary>
        public override void Dispose()
        {
            base.Dispose();

            this.apiActionTable = null;
            this.taskSetterTable.Clear();
            this.taskSetterTable  = null;
            this.packetIdProvider = null;
            this.Serializer       = null;
        }
Exemple #7
0
        public void when_getting_packet_id_and_reaches_limit_then_resets()
        {
            var packetIdProvider = new PacketIdProvider();

            for (var i = 1; i <= ushort.MaxValue; i++)
            {
                packetIdProvider.GetPacketId();
            }

            var packetId = packetIdProvider.GetPacketId();

            Assert.Equal((ushort)1, packetId);
        }
Exemple #8
0
        public void when_getting_packet_id_and_reaches_limit_then_resets()
        {
            PacketIdProvider packetIdProvider = new PacketIdProvider();

            for (int i = 1; i <= ushort.MaxValue; i++)
            {
                packetIdProvider.GetPacketId();
            }

            ushort packetId = packetIdProvider.GetPacketId();

            1.Should().Be(packetId);
        }
Exemple #9
0
        public void when_getting_packet_id_then_is_sequencial()
        {
            var packetIdProvider = new PacketIdProvider();
            var count            = 5000;

            for (ushort i = 1; i <= count; i++)
            {
                packetIdProvider.GetPacketId();
            }

            var packetId = packetIdProvider.GetPacketId();

            Assert.Equal(count + 1, packetId);
        }
Exemple #10
0
        public void when_getting_packet_id_then_is_sequencial()
        {
            PacketIdProvider packetIdProvider = new PacketIdProvider();
            int count = 5000;

            for (ushort i = 1; i <= count; i++)
            {
                packetIdProvider.GetPacketId();
            }

            ushort packetId = packetIdProvider.GetPacketId();

            (count + 1).Should().Be(packetId);
        }
Exemple #11
0
        public void when_getting_packet_id_in_parallel_then_maintains_sequence()
        {
            var packetIdProvider = new PacketIdProvider();
            var count            = 5000;
            var packetIdTasks    = new List <Task> ();

            for (ushort i = 1; i <= count; i++)
            {
                packetIdTasks.Add(Task.Run(() => packetIdProvider.GetPacketId()));
            }

            Task.WaitAll(packetIdTasks.ToArray());

            var packetId = packetIdProvider.GetPacketId();

            Assert.Equal(count + 1, packetId);
        }
Exemple #12
0
        public void when_getting_packet_id_in_parallel_then_maintains_sequence()
        {
            PacketIdProvider packetIdProvider = new PacketIdProvider();
            int         count         = 5000;
            List <Task> packetIdTasks = new List <Task>();

            for (ushort i = 1; i <= count; i++)
            {
                packetIdTasks.Add(Task.Run(() => packetIdProvider.GetPacketId()));
            }

            Task.WaitAll(packetIdTasks.ToArray());

            ushort packetId = packetIdProvider.GetPacketId();

            (count + 1).Should().Be(packetId);
        }
Exemple #13
0
 public RpcClient(IPAddress _host, int _port, bool _usessl, string _sslfile, string _sslpassword = "", ISerializer _serializer = null)
 {
     host                  = _host;
     port                  = _port;
     useSSl                = _usessl;
     sslFile               = _sslfile;
     sslPassword           = _sslpassword;
     this.apiActionTable   = new ApiActionTable(Common.GetServiceApiActions(this.GetType()));
     this.packetIdProvider = new PacketIdProvider();
     this.taskSetterTable  = new TaskSetterTable <long>();
     if (_serializer == null)
     {
         this.Serializer = new DefaultSerializer();
     }
     else
     {
         this.Serializer = _serializer;
     }
     this.TimeOut = TimeSpan.FromSeconds(30);
 }
Exemple #14
0
        /// <summary>
        /// Creates an MQTT Server
        /// </summary>
        /// <param name="configuration">
        /// The configuration used for creating the Server
        /// See <see cref="MqttConfiguration" /> for more details about the supported values
        /// </param>
        /// <returns>A new MQTT Server</returns>
        /// <exception cref="MqttServerException">MqttServerException</exception>
        public IMqttServer CreateServer(MqttConfiguration configuration)
        {
            try
            {
                MqttTopicEvaluator               topicEvaluator              = new MqttTopicEvaluator(configuration);
                IMqttChannelListener             channelProvider             = _binding.GetChannelListener(configuration);
                PacketChannelFactory             channelFactory              = new PacketChannelFactory(topicEvaluator, configuration);
                InMemoryRepositoryProvider       repositoryProvider          = new InMemoryRepositoryProvider();
                ConnectionProvider               connectionProvider          = new ConnectionProvider();
                PacketIdProvider                 packetIdProvider            = new PacketIdProvider();
                Subject <MqttUndeliveredMessage> undeliveredMessagesListener = new Subject <MqttUndeliveredMessage>();
                ServerProtocolFlowProvider       flowProvider = new ServerProtocolFlowProvider(_authenticationProvider, connectionProvider, topicEvaluator,
                                                                                               repositoryProvider, packetIdProvider, undeliveredMessagesListener, configuration);

                return(new MqttServerImpl(channelProvider, channelFactory,
                                          flowProvider, connectionProvider, undeliveredMessagesListener, configuration));
            }
            catch (Exception ex)
            {
                _tracer.Error(ex, ServerProperties.Server_InitializeError);

                throw new MqttServerException(ServerProperties.Server_InitializeError, ex);
            }
        }