Example #1
0
        public async Task RunWebSocketConnectionAsync(WebSocket webSocket, HttpContext httpContext)
        {
            if (webSocket == null)
            {
                throw new ArgumentNullException(nameof(webSocket));
            }

            var endpoint = $"{httpContext.Connection.RemoteIpAddress}:{httpContext.Connection.RemotePort}";

            var clientCertificate = await httpContext.Connection.GetClientCertificateAsync().ConfigureAwait(false);

            var isSecureConnection = clientCertificate != null;

            clientCertificate?.Dispose();

            var clientHandler = ClientHandler;

            if (clientHandler != null)
            {
                var writer    = new SpanBasedMqttPacketWriter();
                var formatter = new MqttPacketFormatterAdapter(writer);
                var channel   = new MqttWebSocketChannel(webSocket, endpoint, isSecureConnection);
                using (var channelAdapter = new MqttChannelAdapter(channel, formatter, _logger.CreateChildLogger(nameof(MqttWebSocketServerAdapter))))
                {
                    await clientHandler(channelAdapter).ConfigureAwait(false);
                }
            }
        }
Example #2
0
        public override async Task OnConnectedAsync(ConnectionContext connection)
        {
            // required for websocket transport to work
            var transferFormatFeature = connection.Features.Get <ITransferFormatFeature>();

            if (transferFormatFeature != null)
            {
                transferFormatFeature.ActiveFormat = TransferFormat.Binary;
            }

            var writer    = new SpanBasedMqttPacketWriter();
            var formatter = new MqttPacketFormatterAdapter(writer);

            using (var adapter = new MqttConnectionContext(formatter, connection))
            {
                var clientHandler = ClientHandler;
                if (clientHandler != null)
                {
                    await clientHandler(adapter).ConfigureAwait(false);
                }
            }
        }