public IMqttChannelAdapter CreateClientAdapter(IMqttClientOptions options, IMqttNetChildLogger logger)
        {
            if (options == null)
            {
                throw new ArgumentNullException(nameof(options));
            }

            var serializer = new MqttPacketSerializer {
                ProtocolVersion = options.ProtocolVersion
            };

            switch (options.ChannelOptions)
            {
            case MqttClientTcpOptions _:
            {
                return(new MqttChannelAdapter(new MqttTcpChannel(options), serializer, logger));
            }

            case MqttClientWebSocketOptions webSocketOptions:
            {
                return(new MqttChannelAdapter(new MqttWebSocketChannel(webSocketOptions), serializer, logger));
            }

            default:
            {
                throw new NotSupportedException();
            }
            }
        }
        public MqttClientConnection(
            MqttConnectPacket connectPacket,
            IMqttChannelAdapter channelAdapter,
            MqttClientSession session,
            IMqttServerOptions serverOptions,
            MqttClientSessionsManager sessionsManager,
            MqttRetainedMessagesManager retainedMessagesManager,
            IMqttNetChildLogger logger)
        {
            Session                  = session ?? throw new ArgumentNullException(nameof(session));
            _serverOptions           = serverOptions ?? throw new ArgumentNullException(nameof(serverOptions));
            _sessionsManager         = sessionsManager ?? throw new ArgumentNullException(nameof(sessionsManager));
            _retainedMessagesManager = retainedMessagesManager ?? throw new ArgumentNullException(nameof(retainedMessagesManager));

            _channelAdapter = channelAdapter ?? throw new ArgumentNullException(nameof(channelAdapter));
            _dataConverter  = _channelAdapter.PacketFormatterAdapter.DataConverter;
            _endpoint       = _channelAdapter.Endpoint;
            _connectPacket  = connectPacket ?? throw new ArgumentNullException(nameof(connectPacket));

            if (logger == null)
            {
                throw new ArgumentNullException(nameof(logger));
            }
            _logger = logger.CreateChildLogger(nameof(MqttClientConnection));

            _keepAliveMonitor = new MqttClientKeepAliveMonitor(_connectPacket.ClientId, StopAsync, _logger);

            _connectedTimestamp                      = DateTime.UtcNow;
            _lastPacketReceivedTimestamp             = _connectedTimestamp;
            _lastNonKeepAlivePacketReceivedTimestamp = _lastPacketReceivedTimestamp;
        }
Beispiel #3
0
        public void Setup()
        {
            _logger      = new MqttNetLogger("1");
            _childLogger = _logger.CreateChildLogger("child");

            MqttNetGlobalLogger.LogMessagePublished += OnLogMessagePublished;
        }
Beispiel #4
0
        public MqttClientSession(
            string clientId,
            IMqttServerOptions options,
            MqttClientSessionsManager sessionsManager,
            MqttRetainedMessagesManager retainedMessagesManager,
            MqttServerEventDispatcher eventDispatcher,
            IMqttNetChildLogger logger)
        {
            if (logger == null)
            {
                throw new ArgumentNullException(nameof(logger));
            }

            _options                 = options ?? throw new ArgumentNullException(nameof(options));
            _sessionsManager         = sessionsManager ?? throw new ArgumentNullException(nameof(sessionsManager));
            _retainedMessagesManager = retainedMessagesManager ?? throw new ArgumentNullException(nameof(retainedMessagesManager));
            _eventDispatcher         = eventDispatcher ?? throw new ArgumentNullException(nameof(eventDispatcher));

            ClientId = clientId;

            _logger = logger.CreateChildLogger(nameof(MqttClientSession));

            _keepAliveMonitor     = new MqttClientKeepAliveMonitor(this, _logger);
            _subscriptionsManager = new MqttClientSubscriptionsManager(clientId, _options, eventDispatcher);
            _pendingPacketsQueue  = new MqttClientPendingPacketsQueue(_options, this, _logger);
        }
Beispiel #5
0
        public IMqttChannelAdapter CreateClientAdapter(IMqttClientOptions options, IMqttNetChildLogger logger)
        {
            if (options == null)
            {
                throw new ArgumentNullException(nameof(options));
            }

            switch (options.ChannelOptions)
            {
            case MqttClientTcpOptions tcpOptions:
            {
                var endpoint      = new DnsEndPoint(tcpOptions.Server, tcpOptions.GetPort());
                var tcpConnection = new TcpConnection(endpoint);

                var writer    = new SpanBasedMqttPacketWriter();
                var formatter = new MqttPacketFormatterAdapter(options.ProtocolVersion, writer);
                return(new MqttConnectionContext(formatter, tcpConnection));
            }

            default:
            {
                throw new NotSupportedException();
            }
            }
        }
Beispiel #6
0
        public MqttTcpServerListener(
            AddressFamily addressFamily,
            MqttServerTcpEndpointBaseOptions options,
            X509Certificate2 tlsCertificate,
            CancellationToken cancellationToken,
            IMqttNetChildLogger logger)
        {
            _cancellationToken = cancellationToken;
            _logger            = logger;
            _addressFamily     = addressFamily;

            var sb = new SocketOptionBuilder().SetSocket(Sockets.Model.SAEASocketType.Tcp).UseStream();

            if (options is MqttServerTlsTcpEndpointOptions tlsOptions)
            {
                sb = sb.WithSsl(tlsCertificate, tlsOptions.SslProtocol);
            }

            sb = sb.SetPort(options.Port);

            if (_addressFamily == AddressFamily.InterNetworkV6)
            {
                sb = sb.UseIPv6();
            }

            socketOption = sb.Build();

            serverSokcet = SocketFactory.CreateServerSocket(socketOption, cancellationToken);

            serverSokcet.OnAccepted += ServerSokcet_OnAccepted;
        }
Beispiel #7
0
 public static void Forget(this Task task, IMqttNetChildLogger logger)
 {
     task?.ContinueWith(t =>
     {
         logger.Error(t.Exception, "Unhandled exception.");
     },
                        TaskContinuationOptions.OnlyOnFaulted);
 }
        public MqttTcpServerAdapter(IMqttNetChildLogger logger)
        {
            if (logger == null)
            {
                throw new ArgumentNullException(nameof(logger));
            }

            _logger = logger.CreateChildLogger(nameof(MqttTcpServerAdapter));
        }
Beispiel #9
0
 public MqttRetainedMessagesManager(IMqttServerOptions options, IMqttNetChildLogger logger)
 {
     if (logger == null)
     {
         throw new ArgumentNullException(nameof(logger));
     }
     _logger  = logger.CreateChildLogger(nameof(MqttRetainedMessagesManager));
     _options = options ?? throw new ArgumentNullException(nameof(options));
 }
Beispiel #10
0
        public MqttClient(IMqttClientAdapterFactory channelFactory, IMqttNetLogger logger)
        {
            if (logger == null)
            {
                throw new ArgumentNullException(nameof(logger));
            }

            _adapterFactory = channelFactory ?? throw new ArgumentNullException(nameof(channelFactory));
            _logger         = logger.CreateChildLogger(nameof(MqttClient));
        }
Beispiel #11
0
 public Task Start(IMqttServerOptions options, IMqttNetChildLogger logger)
 {
     if (logger == null)
     {
         throw new ArgumentNullException(nameof(logger));
     }
     _logger  = logger.CreateChildLogger(nameof(MqttRetainedMessagesManager));
     _options = options ?? throw new ArgumentNullException(nameof(options));
     return(PlatformAbstractionLayer.CompletedTask);
 }
Beispiel #12
0
        public ManagedMqttClient(IMqttClient mqttClient, IMqttNetChildLogger logger)
        {
            _mqttClient = mqttClient ?? throw new ArgumentNullException(nameof(mqttClient));

            if (logger == null)
            {
                throw new ArgumentNullException(nameof(logger));
            }
            _logger = logger.CreateChildLogger(nameof(ManagedMqttClient));
        }
        public MqttClientPendingPacketsQueue(IMqttServerOptions options, MqttClientSession clientSession, IMqttNetChildLogger logger)
        {
            if (logger == null)
            {
                throw new ArgumentNullException(nameof(logger));
            }
            _options       = options ?? throw new ArgumentNullException(nameof(options));
            _clientSession = clientSession ?? throw new ArgumentNullException(nameof(clientSession));

            _logger = logger.CreateChildLogger(nameof(MqttClientPendingPacketsQueue));
        }
        public MqttClientKeepAliveMonitor(string clientId, Func <Task> keepAliveElapsedCallback, IMqttNetChildLogger logger)
        {
            _clientId = clientId ?? throw new ArgumentNullException(nameof(clientId));
            _keepAliveElapsedCallback = keepAliveElapsedCallback ?? throw new ArgumentNullException(nameof(keepAliveElapsedCallback));

            if (logger == null)
            {
                throw new ArgumentNullException(nameof(logger));
            }
            _logger = logger.CreateChildLogger(nameof(MqttClientKeepAliveMonitor));
        }
        public MqttClientKeepAliveMonitor(IMqttClientSession clientSession, IMqttNetChildLogger logger)
        {
            if (logger == null)
            {
                throw new ArgumentNullException(nameof(logger));
            }

            _clientSession = clientSession ?? throw new ArgumentNullException(nameof(clientSession));

            _logger = logger.CreateChildLogger(nameof(MqttClientKeepAliveMonitor));
        }
Beispiel #16
0
        public MqttChannelAdapter(IMqttChannel channel, IMqttPacketSerializer serializer, IMqttNetChildLogger logger)
        {
            if (logger == null)
            {
                throw new ArgumentNullException(nameof(logger));
            }

            _channel         = channel ?? throw new ArgumentNullException(nameof(channel));
            PacketSerializer = serializer ?? throw new ArgumentNullException(nameof(serializer));

            _logger = logger.CreateChildLogger(nameof(MqttChannelAdapter));
        }
        public MqttClientSession(string clientId, MqttServerEventDispatcher eventDispatcher, IMqttServerOptions serverOptions, IMqttNetChildLogger logger)
        {
            ClientId = clientId ?? throw new ArgumentNullException(nameof(clientId));

            SubscriptionsManager     = new MqttClientSubscriptionsManager(clientId, eventDispatcher, serverOptions);
            ApplicationMessagesQueue = new MqttClientSessionApplicationMessagesQueue(serverOptions);

            if (logger == null)
            {
                throw new ArgumentNullException(nameof(logger));
            }
            _logger = logger.CreateChildLogger(nameof(MqttClientSession));
        }
Beispiel #18
0
 public MqttTcpServerListener(
     AddressFamily addressFamily,
     MqttServerTcpEndpointBaseOptions options,
     X509Certificate2 tlsCertificate,
     CancellationToken cancellationToken,
     IMqttNetChildLogger logger)
 {
     _addressFamily     = addressFamily;
     _options           = options;
     _tlsCertificate    = tlsCertificate;
     _cancellationToken = cancellationToken;
     _logger            = logger.CreateChildLogger(nameof(MqttTcpServerListener));
 }
Beispiel #19
0
        public MqttChannelAdapter(IMqttChannel channel, MqttPacketFormatterAdapter packetFormatterAdapter, IMqttNetChildLogger logger)
        {
            if (logger == null)
            {
                throw new ArgumentNullException(nameof(logger));
            }

            _channel = channel ?? throw new ArgumentNullException(nameof(channel));
            PacketFormatterAdapter = packetFormatterAdapter ?? throw new ArgumentNullException(nameof(packetFormatterAdapter));

            _packetReader = new MqttPacketReader(_channel);

            _logger = logger.CreateChildLogger(nameof(MqttChannelAdapter));
        }
Beispiel #20
0
        public MqttServer(IEnumerable <IMqttServerAdapter> adapters, IMqttNetChildLogger logger)
        {
            if (adapters == null)
            {
                throw new ArgumentNullException(nameof(adapters));
            }
            _adapters = adapters.ToList();

            if (logger == null)
            {
                throw new ArgumentNullException(nameof(logger));
            }
            _logger = logger.CreateChildLogger(nameof(MqttServer));
        }
Beispiel #21
0
        public MqttClientSessionsManager(IMqttServerOptions options, MqttServer server, MqttRetainedMessagesManager retainedMessagesManager, CancellationToken cancellationToken, IMqttNetChildLogger logger)
        {
            if (logger == null)
            {
                throw new ArgumentNullException(nameof(logger));
            }

            _logger = logger.CreateChildLogger(nameof(MqttClientSessionsManager));

            _cancellationToken       = cancellationToken;
            _options                 = options ?? throw new ArgumentNullException(nameof(options));
            Server                   = server ?? throw new ArgumentNullException(nameof(server));
            _retainedMessagesManager = retainedMessagesManager ?? throw new ArgumentNullException(nameof(retainedMessagesManager));
        }
Beispiel #22
0
        public MqttManagedClient(IMqttClient mqttClient, IMqttNetChildLogger logger)
        {
            if (logger == null)
            {
                throw new ArgumentNullException(nameof(logger));
            }

            _mqttClient = mqttClient ?? throw new ArgumentNullException(nameof(mqttClient));

            _mqttClient.Connected    += OnConnected;
            _mqttClient.Disconnected += OnDisconnected;
            _mqttClient.ApplicationMessageReceived += OnApplicationMessageReceived;

            _logger = logger.CreateChildLogger(nameof(MqttManagedClient));
        }
Beispiel #23
0
        public MqttTcpServerListener(
            AddressFamily addressFamily,
            MqttServerTcpEndpointBaseOptions options,
            X509Certificate2 tlsCertificate,
            IMqttNetChildLogger logger)
        {
            _addressFamily  = addressFamily;
            _options        = options;
            _tlsCertificate = tlsCertificate;
            _logger         = logger.CreateChildLogger(nameof(MqttTcpServerListener));

            if (_options is MqttServerTlsTcpEndpointOptions tlsOptions)
            {
                _tlsOptions = tlsOptions;
            }
        }
        public IMqttChannelAdapter CreateClientAdapter(IMqttClientOptions options, IMqttNetChildLogger logger)
        {
            if (options == null)
            {
                throw new ArgumentNullException(nameof(options));
            }
            if (logger == null)
            {
                throw new ArgumentNullException(nameof(logger));
            }

            if (!(options.ChannelOptions is MqttClientWebSocketOptions))
            {
                throw new NotSupportedException("Only WebSocket connections are supported.");
            }

            return(new MqttChannelAdapter(new WebSocket4NetMqttChannel(options), new MqttPacketSerializer(), logger));
        }
Beispiel #25
0
        public IMqttChannelAdapter CreateClientAdapter(IMqttClientOptions options, IMqttNetChildLogger logger)
        {
            if (options == null)
            {
                throw new ArgumentNullException(nameof(options));
            }

            switch (options.ChannelOptions)
            {
            case MqttClientWebSocketOptions webSocketOptions:
            {
                return(new MqttChannelAdapter(new WasmMqttWebSocketChannel(webSocketOptions), new MqttPacketFormatterAdapter(options.ProtocolVersion), logger));
            }

            default:
            {
                throw new NotSupportedException();
            }
            }
        }
Beispiel #26
0
        public MqttServer(IEnumerable <IMqttServerAdapter> adapters, IMqttNetChildLogger logger)
        {
            if (adapters == null)
            {
                throw new ArgumentNullException(nameof(adapters));
            }
            _adapters = adapters.ToList();

            if (logger == null)
            {
                throw new ArgumentNullException(nameof(logger));
            }
            _logger = logger.CreateChildLogger(nameof(MqttServer));

            _eventDispatcher.ClientConnected            += (s, e) => ClientConnected?.Invoke(s, e);
            _eventDispatcher.ClientDisconnected         += (s, e) => ClientDisconnected?.Invoke(s, e);
            _eventDispatcher.ClientSubscribedTopic      += (s, e) => ClientSubscribedTopic?.Invoke(s, e);
            _eventDispatcher.ClientUnsubscribedTopic    += (s, e) => ClientUnsubscribedTopic?.Invoke(s, e);
            _eventDispatcher.ApplicationMessageReceived += (s, e) => ApplicationMessageReceived?.Invoke(s, e);
        }
        public MqttTcpServerListener(
            AddressFamily addressFamily,
            MqttServerTcpEndpointBaseOptions options,
            X509Certificate2 tlsCertificate,
            TimeSpan communicationTimeout,
            CancellationToken cancellationToken,
            IMqttNetChildLogger logger)
        {
            _addressFamily        = addressFamily;
            _options              = options;
            _tlsCertificate       = tlsCertificate;
            _communicationTimeout = communicationTimeout;
            _cancellationToken    = cancellationToken;
            _logger = logger.CreateChildLogger(nameof(MqttTcpServerListener));

            if (_options is MqttServerTlsTcpEndpointOptions tlsOptions)
            {
                _tlsOptions = tlsOptions;
            }
        }
Beispiel #28
0
 public MqttServerEx(IEnumerable <IMqttServerAdapter> adapters, IMqttNetChildLogger logger) : base(adapters, logger)
 {
 }
Beispiel #29
0
        public OrleansManagedMqttServer(IClusterClient clusterClient, IMqttServerOptions mqttServerOptions, IEnumerable <IMqttServerAdapter> adapters, IMqttNetChildLogger logger, ILogger <OrleansManagedMqttServer> appLogger) : base(adapters, logger)
        {
            _serverId          = Guid.NewGuid();
            _clusterClient     = clusterClient;
            _mqttServerOptions = mqttServerOptions;
            _appLogger         = appLogger;

            this.ClientConnected    += This_OnClientConnected;
            this.ClientDisconnected += This_OnClientDisconnected;

            appLogger.LogInformation("Orleans Managed MQTT Server has beein instantiated.");
        }
 public MqttServerEventDispatcher(IMqttNetChildLogger logger)
 {
     _logger = logger ?? throw new ArgumentNullException(nameof(logger));
 }