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);
            }
        }
Ejemplo n.º 3
0
        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);
        }