you usuario una tube pildorasinformaticas interfaz hacer grafica conectar con como codigo clase java mqtt messagebroker mosquitto paho

java - usuario - La sincronización y la interfaz asíncrona del objeto MqttClient no funcionan



interfaz java (1)

He creado un client de tipo MqttClient y, como se muestra a continuación en el código, creo un cliente y veo su Asynchronous callback . El problema es,

1-cuando ejecuto el programa, System.out.println("Client is Connected"); aparece, pero no recibo respuesta de onSuccess o from onFailure , ¿por qué? wha estoy haciendo mal en el codigo

2-i implementé la static IMqttAsyncClient asynchClientCB = new IMqttAsyncClient() , pero como tengo un cliente de tipo MqttClient , no puedo usar esta interfaz IMqttAsyncClient . Intenté usar mqttAsynchClien pero debido a que mqttAsynchClien para Java y no para Android no puedo usarlo. ¿Cómo usar la interfaz IMqttAsyncClient ?

Actualizar_1

en el siguiente código "Updated_code_1", modifiqué ligeramente el código, pero espero que cada vez que me conecte con éxito al broker onSuccess el mensaje en la devolución de llamada sincrónica onSuccess , y el mensaje en el onFailure síncrono en caso de falla se imprima en el caso de la conexión Terminado como cuando desconecto intencionalmente la red. Pero en el momento en que me conecto con el broker , ni onSuccess ni onFailur pagan nada. Entonces, ¿para qué están diseñados?

* Update_2_17_Dec_2014

Tengo una consulta que podría llevarnos a una solución, que es si importa si me estoy conectando con el agente a través de una red cableada / inalámbrica. ¿Cambiaría eso el comportamiento del oyente síncrono y asíncrono?

Actualizado_1_código :

MqttConnectOptions opts = getClientOptions(); client = MQTTClientFactory.newClient(broker, port, clientID); if (client != null) { System.out.println("Client is not Null"); client.setCallback(AsynchCallBack); if (opts != null) { iMQTTToken = client.connectWithResult(opts); publishMSG(client, TOPIC,"010101".getBytes(), QoS, pub_isRetained); iMQTTToken.setActionCallback(synchCallBack); if (client.isConnected()) { System.out.println("Client CONNECTED."); publishMSG(client, TOPIC,"010101".getBytes(), QoS, pub_isRetained); } } } .... .... .... .... IMqttToken iMQTTToken = new IMqttToken() { @Override public void waitForCompletion(long arg0) throws MqttException { // TODO Auto-generated method stub System.out.println("@waitForCompletion(): waiting " + (arg0 * 1000) + " seconds for connection to be established."); } @Override public void waitForCompletion() throws MqttException { // TODO Auto-generated method stub System.out.println("@waitForCompletion(): waiting for connection to be established."); } @Override public void setUserContext(Object arg0) { // TODO Auto-generated method stub } @Override public void setActionCallback(IMqttActionListener arg0) { // TODO Auto-generated method stub arg0.onSuccess(iMQTTToken); //System.out.println(" " + arg0.onSuccess()); //System.out.println(" " + arg0.onSuccess(iMQTTToken)); iMQTTToken.setActionCallback(synchCallBack); } @Override public boolean isComplete() { // TODO Auto-generated method stub return false; } @Override public Object getUserContext() { // TODO Auto-generated method stub return null; } @Override public String[] getTopics() { // TODO Auto-generated method stub return null; } @Override public boolean getSessionPresent() { // TODO Auto-generated method stub return false; } @Override public MqttWireMessage getResponse() { // TODO Auto-generated method stub return null; } @Override public int getMessageId() { // TODO Auto-generated method stub return 0; } @Override public int[] getGrantedQos() { // TODO Auto-generated method stub return null; } @Override public MqttException getException() { // TODO Auto-generated method stub return null; } @Override public IMqttAsyncClient getClient() { // TODO Auto-generated method stub return null; } @Override public IMqttActionListener getActionCallback() { // TODO Auto-generated method stub return null; } }; IMqttActionListener synchCallBack = new IMqttActionListener() { @Override public void onSuccess(IMqttToken arg0) { // TODO Auto-generated method stub System.out.println("@onSuccess: Connection Successful."); } @Override public void onFailure(IMqttToken arg0, Throwable arg1) { // TODO Auto-generated method stub System.out.println("@onFailure: Connection Failed."); setViewEnableState(Bconnect, true); } }; MqttCallback AsynchCallBack = new MqttCallback() { @Override public void messageArrived(String topic, MqttMessage msg) throws Exception { // TODO Auto-generated method stub System.out.println("@messageArrived: Message Delivered."); } @Override public void deliveryComplete(IMqttDeliveryToken token) { // TODO Auto-generated method stub System.out.println("@deliveryComplete: Delivery Completed."); } @Override public void connectionLost(Throwable thrw) { // TODO Auto-generated method stub System.out.println("@Connection Lost: Connection Lost."); setViewEnableState(Bconnect, true); } };

Newclient :

MqttConnectOptions opts = new MqttConnectOptions(); opts.setCleanSession(CS); opts.setKeepAliveInterval(KATimer); HashMap<Integer, WILL> LWTData = WILLFactory.newWILL("LWT", "LWT MS".getBytes(), 1, false); opts.setWill(LWTData.get(0).getWILLTopic(), LWTData.get(0).getWILLPayLoad(), LWTData.get(0).getWILLQoS(), LWTData.get(0).isWILLRetained()); client = MQTTClientFactory.newClient(IP, PORT, clientID); if (client != null) { System.out.println("client is not null"); client.setCallback(AsynchCB); IMqttToken token = client.connectWithResult(opts); if (client.isConnected()) { System.out.println("Client is Connected"); token.setActionCallback(new IMqttActionListener() { public void onSuccess(IMqttToken arg0) { // TODO Auto-generated method stub System.out.println("synchCB->@onSuccess(): Connection Successful"); try { client.subscribe(TOPIC, QoS); } catch (MqttException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { client.disconnect(); } catch (MqttException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void onFailure(IMqttToken arg0, Throwable arg1) { // TODO Auto-generated method stub System.out.println("synchCB->@onFailure(): Connection Failed"); } }); }else { System.out.println("client is not connected"); } }else { System.out.println("client = null"); }

Asynch CallBack :

/** * Asynchronous Callback to inform the user about events that might happens Asynchronously. If it is not used, any pending * messages destined to the client would not be received. */ private static MqttCallback AsynchCB = new MqttCallback() { public void messageArrived(String topic, MqttMessage msg) throws Exception { // TODO Auto-generated method stub System.out.println("AsynchCB->@messageArrived(): "); System.out.println("Topic: " + topic); System.out.println("MSG: " + msg.toString()); } public void deliveryComplete(IMqttDeliveryToken arg0) { // TODO Auto-generated method stub System.out.println("AsynchCB->@deliveryComplete(): "); } public void connectionLost(Throwable arg0) { // TODO Auto-generated method stub System.out.println("AsynchCB->@connectionLost(): "); } };


su máquina en la que reside el cliente, que procesa su devolución de llamada, puede tener el puerto de salida bloqueado por el firewall de la máquina.