Search in sources :

Example 6 with Client

use of org.apache.rocketmq.iot.connection.client.Client in project rocketmq-externals by apache.

the class ProduceMessageIntegrationTest method test.

@Test
public void test() {
    /* handle the CONNECT message */
    MqttConnectMessage connectMessage = getConnectMessage();
    producerChannel.writeInbound(connectMessage);
    MqttConnAckMessage connAckMessage = producerChannel.readOutbound();
    Client client = clientManager.get(producerChannel);
    Assert.assertNotNull(client);
    Assert.assertEquals(producerId, client.getId());
    Assert.assertEquals(producerChannel, client.getCtx().channel());
    Assert.assertTrue(client.isConnected());
    Assert.assertTrue(producerChannel.isOpen());
    Assert.assertEquals(MqttConnectReturnCode.CONNECTION_ACCEPTED, connAckMessage.variableHeader().connectReturnCode());
    producerChannel.releaseInbound();
    /* handle the PUBLISH message when there is no online Consumers */
    MqttPublishMessage publishMessage = getMqttPublishMessage();
    producerChannel.writeInbound(publishMessage);
    MqttMessage pubackMessage = producerChannel.readOutbound();
    /* qos 0 should have no PUBACK message */
    Assert.assertNull(pubackMessage);
    /*
         * the message would be discarded simply because there is no Consumers
         * and the topic should be created
         * */
    Assert.assertTrue(subscriptionStore.hasTopic(topicName));
    producerChannel.releaseInbound();
    /* handle the PUBLISH message when there are online Consumers */
    Mockito.when(subscriptionStore.get(topicName)).thenReturn(mockedSubscriptions);
    publishMessage = getMqttPublishMessage();
    byte[] publishMessagePayload = new byte[publishMessage.payload().readableBytes()];
    publishMessage.payload().getBytes(0, publishMessagePayload);
    producerChannel.writeInbound(publishMessage);
    MqttPublishMessage forwardedMessage = consumerChannel.readOutbound();
    byte[] forwardedMessagePayload = new byte[forwardedMessage.payload().readableBytes()];
    forwardedMessage.payload().getBytes(0, forwardedMessagePayload);
    Assert.assertNotNull(forwardedMessage);
    Assert.assertEquals(publishMessage.variableHeader().topicName(), forwardedMessage.variableHeader().topicName());
    Assert.assertEquals(publishMessage.variableHeader().packetId(), forwardedMessage.variableHeader().packetId());
    Assert.assertArrayEquals(publishMessagePayload, forwardedMessagePayload);
}
Also used : MqttMessage(io.netty.handler.codec.mqtt.MqttMessage) MqttConnectMessage(io.netty.handler.codec.mqtt.MqttConnectMessage) MqttPublishMessage(io.netty.handler.codec.mqtt.MqttPublishMessage) MqttConnAckMessage(io.netty.handler.codec.mqtt.MqttConnAckMessage) Client(org.apache.rocketmq.iot.connection.client.Client) MqttClient(org.apache.rocketmq.iot.protocol.mqtt.data.MqttClient) Test(org.junit.Test)

Example 7 with Client

use of org.apache.rocketmq.iot.connection.client.Client in project rocketmq-externals by apache.

the class MqttPingreqMessageHandler method handleMessage.

/**
 * handle the PINGREQ message from client
 * <ol>
 * <li>check client exists</li>
 * <li>check client is connected</li>
 * <li>generate the PINGRESP message</li>
 * <li>send the PINGRESP message to the client</li>
 * </ol>
 *
 * @param message
 * @return
 */
@Override
public void handleMessage(Message message) {
    Client client = message.getClient();
    if (client == null || !client.isConnected()) {
        return;
    }
    MqttMessage pingreqMessage = (MqttMessage) message.getPayload();
    MqttMessage pingrespMessage = MessageUtil.getMqttPingrespMessage(pingreqMessage);
    client.getCtx().writeAndFlush(pingrespMessage);
}
Also used : MqttMessage(io.netty.handler.codec.mqtt.MqttMessage) Client(org.apache.rocketmq.iot.connection.client.Client)

Example 8 with Client

use of org.apache.rocketmq.iot.connection.client.Client in project rocketmq-externals by apache.

the class MqttConnectionHandler method exceptionCaught.

@Override
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
    Client client = clientManager.get(ctx.channel());
    String clientId = client != null ? client.getId() : "null";
    doDisconnect(ctx.channel());
    log.debug("clientId:{} netty exception caught from {}", clientId, ctx.channel(), cause);
}
Also used : Client(org.apache.rocketmq.iot.connection.client.Client) MqttClient(org.apache.rocketmq.iot.protocol.mqtt.data.MqttClient)

Aggregations

Client (org.apache.rocketmq.iot.connection.client.Client)8 MqttClient (org.apache.rocketmq.iot.protocol.mqtt.data.MqttClient)5 MqttMessage (io.netty.handler.codec.mqtt.MqttMessage)4 MqttPublishMessage (io.netty.handler.codec.mqtt.MqttPublishMessage)3 MqttConnAckMessage (io.netty.handler.codec.mqtt.MqttConnAckMessage)2 MqttConnectMessage (io.netty.handler.codec.mqtt.MqttConnectMessage)2 MqttSubAckMessage (io.netty.handler.codec.mqtt.MqttSubAckMessage)2 MqttSubscribeMessage (io.netty.handler.codec.mqtt.MqttSubscribeMessage)2 MqttTopicSubscription (io.netty.handler.codec.mqtt.MqttTopicSubscription)2 Test (org.junit.Test)2 MqttPubAckMessage (io.netty.handler.codec.mqtt.MqttPubAckMessage)1 MqttSubAckPayload (io.netty.handler.codec.mqtt.MqttSubAckPayload)1 MqttUnsubscribeMessage (io.netty.handler.codec.mqtt.MqttUnsubscribeMessage)1 ArrayList (java.util.ArrayList)1 Message (org.apache.rocketmq.iot.common.data.Message)1 Subscription (org.apache.rocketmq.iot.protocol.mqtt.data.Subscription)1