2017-08-16 2 views
2

Ce code d'abonné mqtt fonctionne correctement. Je peux facilement m'abonner aux messages qui sont publiés sur broker.hivemq.com avec le sujet correspondant.Effectuer une action dans l'abonné MQTT

public class AccelerometerSubscriber implements MqttCallback, 
IMqttActionListener { 

public static void main(String[] args) throws MqttException { 
int QUALITY_OF_SERVICE = 2; 
MqttClient client=new MqttClient("tcp://broker.hivemq.com:1883", 
MqttClient.generateClientId()); 
client.setCallback(new SimpleMqttCallBack()); 
client.connect(); 
System.out.println("Subscribing ...."); 
client.subscribe("MQTT Examples"); } 

System.out.println("some action"); //------------right here-------------- 

public void connectionLost(Throwable throwable) { 

System.out.println("Connection to MQTT broker lost!"); } 


public void messageArrived(String s, MqttMessage mqttMessage) throws Exception { 

    System.out.println("Message received:\n\t"+ new String(mqttMessage.getPayload())); 

} 

public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) { 

    // not used in this example 

}} 

Maintenant, je ne veux effectuer une action que lorsqu'un message est reçu. Je suis incapable de faire ça.

Répondre

0

Vous avez une classe (AccelerometerSubscriber) qui implémente l'interface MqttCallback, utilisez une instance de celui-ci au lieu de faire client.setCallback(new SimpleMqttCallBack());

public class AccelerometerSubscriber implements MqttCallback, IMqttActionListener { 

    public static void main(String[] args) throws MqttException { 
     AccelerometerSubscriber as = new AccelerometerSubscriber(); 
     int QUALITY_OF_SERVICE = 2; 
     MqttClient client = new MqttClient("tcp://broker.hivemq.com:1883", MqttClient.generateClientId()); 
     client.setCallback(as); 
     client.connect(); 
     System.out.println("Subscribing ...."); 
     client.subscribe("MQTT Examples"); 
    } 

    @Override 
    public void connectionLost(Throwable throwable) { 
     System.out.println("Connection to MQTT broker lost!"); 
    } 
    @Override 
    public void messageArrived(String s, MqttMessage mqttMessage) throws Exception { 
     //message is received is here!!! 
     System.out.println("Message received:\n\t" + new String(mqttMessage.getPayload())); 
    } 
    @Override 
    public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) { 
     System.out.println("deliveryComplete"); 
    } 
    @Override 
    public void onFailure(IMqttToken arg0, Throwable arg1) { 
     System.out.println("onFailure"); 
    } 
    @Override 
    public void onSuccess(IMqttToken arg0) { 
     System.out.println("onSuccess"); 
    } 
}