/// <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); } }
/// <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(); }
/// <summary> /// 释放资源 /// </summary> public void Dispose() { this.apiActionTable = null; this.taskSetterTable.Clear(); this.taskSetterTable = null; this.packetIdProvider = null; this.Serializer = null; this.clientSession.CloseSafe(); }
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; }
/// <summary> /// 释放资源 /// </summary> public override void Dispose() { base.Dispose(); this.apiActionTable = null; this.taskSetterTable.Clear(); this.taskSetterTable = null; this.packetIdProvider = null; this.Serializer = null; }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
/// <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); } }