public MqttClientConnectionProcessingManager(ILogger logger, IMqttClientConnectionManager clientConnectionManager, MqttUacManager uacManager, MqttAsyncTcpReceiver asyncTcpReceiver) { this.logger = logger; this.clientConnectionManager = clientConnectionManager; this.uacManager = uacManager; this.asyncTcpReceiver = asyncTcpReceiver; publishManager = new MqttPublishManager(logger); rawMessageQueue = new BlockingCollection <MqttRawMessage>(); clientConnectionsWithInflightQueuesToProcess = new BlockingCollection <InflightQueueProcessEvent>(); clientConnectionsWithInternalEventQueuesToProcess = new BlockingCollection <MqttClientConnection>(); }
public MqttClientConnectionManager(ILogger logger, MqttOptions options, MqttAsyncTcpReceiver receiver) { this.logger = logger; numberOfConnectionsGotten = 0; numberOfConnectionsReturned = 0; unconnectedClientPool = new ConcurrentStack <MqttClientConnection>(); var readSocketBufferManager = new BufferManager(options.MaxConnections, options.ReadAndSendBufferSize); for (var i = 0; i < options.MaxConnections; i++) { var receiveSocketEventArg = new SocketAsyncEventArgs(); readSocketBufferManager.SetBuffer(receiveSocketEventArg); receiveSocketEventArg.Completed += receiver.ReceiveCompleted; var clientConnection = new MqttClientConnection(receiveSocketEventArg); unconnectedClientPool.Push(clientConnection); } }
public MqttBroker(ILogger logger, MqttOptions options) { MqttAsyncTcpSender.Init(options); this.logger = logger; this.uacManager = new MqttUacManager(); this.rawMessageManager = new MqttRawMessageManager(options); this.asyncTcpReceiver = new MqttAsyncTcpReceiver(rawMessageManager); this.connectionManager = new MqttClientConnectionManager(logger, options, asyncTcpReceiver); var numberOfProcessingManagersNeeded = options.MaxConnections / options.ConnectionsPrProcessingManager; this.processingManagers = new MqttClientConnectionProcessingManager[numberOfProcessingManagersNeeded]; for (var i = 0; i < processingManagers.Length; i++) { processingManagers[i] = new MqttClientConnectionProcessingManager(logger, connectionManager, uacManager, asyncTcpReceiver); } this.processingLoadbalancer = new MqttProcessingLoadbalancer(logger, processingManagers); this.socketListener = new MqttAsyncTcpSocketListener(processingLoadbalancer, connectionManager, options); }