title: Synch and Asynchronous interface of MqttClient object are not working
body: <p>I have created a <code>client</code> of type <code>MqttClient</code> and as shown below in the code, I create a client and se its <code>Asynchronous callback</code>. The problem is, </p>
  
  <p>1-when I run the programm, the <code>System.out.println("Client is Connected");</code> appears, but i receive no response fr0m the <code>onSuccess</code> or from o<code>onFailure</code>, why? wha I am doing wrong in the code.</p>
  
  <p>2-i implemented the <code>static IMqttAsyncClient asynchClientCB = new IMqttAsyncClient()</code> interface, but since i have a client of type <code>MqttClient</code>, I can not use this <code>IMqttAsyncClient</code> interface. I tried to use <code>mqttAsynchClien</code> but because I program for java and not for <code>Android</code> i can not use it. How to use <code>IMqttAsyncClient</code> interface.?</p>
  
  <p><strong>Update_1</strong></p>
  
  <p>in the below code "Updated_code_1", i slightly modified the code, but i expect every time i connect successfully to the <code>broker</code> the message in <code>onSuccess</code> synchronous callback to be printed, and the message in <code>onFailure</code> synchronous callbck to be printed in case of the onnection terminated such as when i intentionally disconnect the network. But at ru time when I connect to the <code>broker</code>, neither <code>onSuccess</code> nor <code>onFailur</code> dispays any thing. So, what are they designed for?</p>
  
  <p><strong>*Update_2_17_Dec_2014</strong></p>
  
  <p>I have an inquiry that might lead us to a solution, which is, does it matter if I am connecting to the broker through wired/wire-less network? would that change the behaviour of he synchronous and Asynchronous listener?</p>
  
  <p><strong>Updated_1_code</strong>:</p>
  
  <pre><code>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);
      }
  };
  </code></pre>
  
  <p><strong>Newclient</strong>:</p>
  
  <pre><code>    MqttConnectOptions opts = new MqttConnectOptions();
      opts.setCleanSession(CS);
      opts.setKeepAliveInterval(KATimer);
      HashMap&lt;Integer, WILL&gt; 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-&gt;@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-&gt;@onFailure(): Connection Failed");
                  }
              });
          }else {
              System.out.println("client is not connected");
          }
      }else {
          System.out.println("client = null");
      }
  </code></pre>
  
  <p><strong>Asynch CallBack</strong>:</p>
  
  <pre><code>/**
   * 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-&gt;@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-&gt;@deliveryComplete(): ");
      }
  
      public void connectionLost(Throwable arg0) {
          // TODO Auto-generated method stub
          System.out.println("AsynchCB-&gt;@connectionLost(): ");
      }
  };
  </code></pre>