Exemplo n.º 1
0
        private async Task <ConnectReturnCode> AuthenticateAsync(ReadListeningHandler readListener)
        {
            var connectPacket = new ConnectPacket
            {
                ClientId     = ClientId,
                CleanSession = true
            };
            //if (!string.IsNullOrEmpty(username))
            //{
            //    packet.UsernameFlag = true;
            //    packet.UserName = username;
            //}
            //if (!string.IsNullOrEmpty(password))
            //{
            //    packet.PasswordFlag = true;
            //    packet.Password = password;
            //}
            //connectPacket.KeepAlive = KeepAlive;

            await _clientChannel.WriteAndFlushAsync(connectPacket);

            if (await readListener.ReceiveAsync() is ConnAckPacket connAckPacket)
            {
                return(connAckPacket.ConnectReturnCode);
            }
            return(ConnectReturnCode.UnacceptedProtocolVersion);
        }
Exemplo n.º 2
0
        /// <summary>
        /// 连接
        /// </summary>
        /// <param name="username">用户名</param>
        /// <param name="password">密码</param>
        /// <returns></returns>
        public async Task <ConnectReturnCode> ConnectAsync(string username = default, string password = default)
        {
            var clientReadListener = new ReadListeningHandler();
            var bootstrap          = new Bootstrap();

            bootstrap
            .Group(_group)
            .Channel <TcpSocketChannel>()
            .Option(ChannelOption.TcpNodelay, true)
            .Handler(new ActionChannelInitializer <ISocketChannel>(channel =>
            {
                var pipeline = channel.Pipeline;
                pipeline.AddLast(MqttEncoder.Instance, new MqttDecoder(false, 256 * 0124), clientReadListener);
            }));

            try
            {
                _clientChannel = await bootstrap.ConnectAsync(new IPEndPoint(IPAddress.Parse("118.126.96.166"), 1883)).ConfigureAwait(false);

                var connectResponse = await AuthenticateAsync(clientReadListener).ConfigureAwait(false);;
                if (connectResponse == ConnectReturnCode.ConnectionAccepted)
                {
                    StartReceivingPackets(clientReadListener);
                }
                OnConnected?.Invoke(connectResponse);
                return(connectResponse);
            }
            catch
            {
                await DisconnectAsync();

                throw new Exception("BrokerUnavailable");
            }
        }
Exemplo n.º 3
0
 private async Task ReceivePacketsAsync(ReadListeningHandler clientReadListener)
 {
     while (true)
     {
         if (await clientReadListener.ReceiveAsync() is Packet packet)
         {
             await ProcessReceivedPacketAsync(packet);
         }
     }
 }
Exemplo n.º 4
0
 private void StartReceivingPackets(ReadListeningHandler clientReadListener)
 {
     Task.Run(() => ReceivePacketsAsync(clientReadListener));
 }