2017-01-20 29 views
0

に任意のメッセージを受信して​​いない私は、コードソースにクライアントPAHO MQTT Androidのクライアントは、Android

01-21 02:03:47.581 17426-18022/horseman.four.com.unite D/AlarmPingSender: Register alarmreceiver to MqttServiceMqttService.pingSender.aae59bad799dafed 
01-21 02:03:47.581 17426-18021/horseman.four.com.unite D/AlarmPingSender: Register alarmreceiver to MqttServiceMqttService.pingSender.csajcbjsc 
01-21 02:03:47.620 17426-17426/horseman.four.com.unite D/MqttManager: mqtt connect successfull. Now Subscribing to topic... 
01-21 02:03:47.632 17426-17426/horseman.four.com.unite D/MqttManager: mqtt connect successfull. Now Subscribing to topic... 
01-21 02:03:47.895 17426-17426/horseman.four.com.unite D/MqttManager: Subscribed to topic : example_topic 
01-21 02:03:48.250 17426-17426/horseman.four.com.unite D/MqttManager: Subscribed to topic : example_topic 
01-21 02:03:54.859 17426-17426/horseman.four.com.unite D/MqttManager: Message : jcjcf delivered 
01-21 02:03:56.087 17426-17426/horseman.four.com.unite D/MqttManager: Message : vjchxhf delivered 
01-21 02:03:57.407 17426-17426/horseman.four.com.unite D/MqttManager: Message : jcjcufi delivered 
01-21 02:03:58.342 17426-17426/horseman.four.com.unite D/MqttManager: Message : jchxuf delivered 
01-21 02:03:59.267 17426-17426/horseman.four.com.unite D/MqttManager: Message : gjcjf delivered 
01-21 02:04:00.089 17426-17426/horseman.four.com.unite D/MqttManager: Message : gjcig delivered 
01-21 02:04:01.004 17426-17426/horseman.four.com.unite D/MqttManager: Message : gjcif delivered 
01-21 02:04:01.819 17426-17426/horseman.four.com.unite D/MqttManager: Message : gjgiy delivered 
01-21 02:04:02.839 17426-17426/horseman.four.com.unite D/MqttManager: Message : gjgiy delivered 
01-21 02:04:03.457 17426-17426/horseman.four.com.unite D/MqttManager: Message : gjfjg delivered 
01-21 02:04:04.378 17426-17426/horseman.four.com.unite D/MqttManager: Message : gjfiu delivered 
01-21 02:04:21.478 17426-17426/horseman.four.com.unite D/MqttManager: Message : vghbng v gjc delivered 
01-21 02:04:22.912 17426-17426/horseman.four.com.unite D/MqttManager: Message : bvcucjh delivered 
01-21 02:04:24.140 17426-17426/horseman.four.com.unite D/MqttManager: Message : gjcjv delivered 

からイベントを公開ため

import android.annotation.SuppressLint; 
import android.content.Context; 
import android.provider.Settings; 
import android.support.annotation.NonNull; 
import android.text.TextUtils; 
import android.util.Log; 

import com.google.gson.Gson; 

import org.eclipse.paho.android.service.MqttAndroidClient; 
import org.eclipse.paho.client.mqttv3.IMqttActionListener; 
import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken; 
import org.eclipse.paho.client.mqttv3.IMqttToken; 
import org.eclipse.paho.client.mqttv3.MqttCallbackExtended; 
import org.eclipse.paho.client.mqttv3.MqttConnectOptions; 
import org.eclipse.paho.client.mqttv3.MqttException; 
import org.eclipse.paho.client.mqttv3.MqttMessage; 

import java.util.Arrays; 

import horseman.four.com.unite.app.UniteApp; 
import horseman.four.com.unite.screens.map.ChatManager; 
import horseman.four.com.unite.screens.map.model.ChatMessage; 
import horseman.four.com.unite.screens.map.model.ChatModel; 

/** 
* Created by Mahendra Chhimwal on 18/1/17. 
*/ 

public class MqttManager implements MqttCallbackExtended { 

    public static final String TAG = "MqttManager"; 

    private MqttAndroidClient mMqttAndroidClient; 
    private MqttAndroidClient mMqttAndroidReceiver; 

    private final String mServerUri = "tcp://unitevm.eastus.cloudapp.azure.com:1883"; 

    private String mClientId = null; 
    private final String mSubscriptionTopic = "exampleAndroidTopic"; 
    private final String mPublishTopic = "exampleAndroidPublishTopic"; 
    private final String mPublishMessage = "Hello World!"; 

    private ChatManager mChatManager; 
    private Context mContext; 
    private String mTopic; 

    private static Gson GSON = new Gson(); 

    private MqttManager() { 
     mContext = UniteApp.getContext(); 
    } 

    public static MqttManager getINST() { 
     return new MqttManager(); 
    } 

    public void setChatManager(@NonNull ChatManager chatManager) { 
     mChatManager = chatManager; 
    } 

    @SuppressLint("HardwareIds") 
    public void initConnection(String topic) { 
     mTopic = topic; 
     mClientId = Settings.Secure.getString(mContext.getContentResolver(), 
       Settings.Secure.ANDROID_ID); 
     mMqttAndroidClient = new MqttAndroidClient(mContext, mServerUri, mClientId); 
     mMqttAndroidReceiver = new MqttAndroidClient(mContext, mServerUri, "csajcbjsc"); 
     mMqttAndroidClient.setCallback(this); 
     mMqttAndroidReceiver.setCallback(this); 
     connectToServer(); 
    } 

    @Override 
    public void connectComplete(boolean reconnect, String serverURI) { 
     if (reconnect) { 
      Log.d(TAG, "reconnect is true . So subscribing to topic again"); 
      // Because Clean Session is true, we need to re-subscribe 
      subscribeToTopic(); 
     } else { 
      Log.d(TAG, "Connected to MQTT server"); 
     } 
    } 

    private void connectToServer() { 

     MqttConnectOptions mqttConnectOptions = new MqttConnectOptions(); 
     mqttConnectOptions.setAutomaticReconnect(true); 
     mqttConnectOptions.setCleanSession(false); 
     mqttConnectOptions.setKeepAliveInterval(300); 
     mqttConnectOptions.setMqttVersion(MqttConnectOptions.MQTT_VERSION_3_1); 
     try { 
      mMqttAndroidClient.connect(mqttConnectOptions, null, new IMqttActionListener() { 
       @Override 
       public void onSuccess(IMqttToken asyncActionToken) { 
        Log.d(TAG, "mqtt connect successfull. Now Subscribing to topic..."); 
        subscribeToTopic(); 
       } 

       @Override 
       public void onFailure(IMqttToken asyncActionToken, Throwable exception) { 
        if (exception != null) { 
         Log.e(TAG, "connect failure with exception : " + exception.getMessage()); 
         exception.printStackTrace(); 
        } 
       } 
      }); 

     } catch (MqttException ex) { 
      ex.printStackTrace(); 

     } 





     MqttConnectOptions mqttConnectOption = new MqttConnectOptions(); 
     mqttConnectOption.setAutomaticReconnect(true); 
     mqttConnectOption.setCleanSession(false); 
     mqttConnectOption.setKeepAliveInterval(300); 
     mqttConnectOption.setMqttVersion(MqttConnectOptions.MQTT_VERSION_3_1); 
     try { 
      mMqttAndroidReceiver.connect(mqttConnectOptions, null, new IMqttActionListener() { 
       @Override 
       public void onSuccess(IMqttToken asyncActionToken) { 
        Log.d(TAG, "mqtt connect successfull. Now Subscribing to topic..."); 
        subscribeToTopic(); 
       } 

       @Override 
       public void onFailure(IMqttToken asyncActionToken, Throwable exception) { 
        if (exception != null) { 
         Log.e(TAG, "connect failure with exception : " + exception.getMessage()); 
         exception.printStackTrace(); 
        } 
       } 
      }); 

     } catch (MqttException ex) { 
      ex.printStackTrace(); 

     } 
    } 

    @Override 
    public void connectionLost(Throwable cause) { 
     if (cause != null) { 
      Log.e(TAG, "Connection to MQtt is lost due to " + cause.getMessage()); 
     } 
     // connectToServer(); 
    } 

    @Override 
    public void messageArrived(String topic, MqttMessage message) throws Exception { 
     Log.d(TAG, "Message arrived : " + message + " from topic : " + topic); 
     if (mTopic.equals(topic)) { 
      String text = message.toString(); 
      if (!TextUtils.isEmpty(text)) { 
       handlerChatMessage(text); 
      } 
     } 
    } 

    private void handlerChatMessage(String message) { 
     try { 
      ChatModel chatModel = GSON.fromJson(message, ChatModel.class); 
      if (chatModel.isChat()) { 
       String chatMessage = chatModel.getMessage(); 
       if (!TextUtils.isEmpty(chatMessage)) { 
        ChatMessage cMessageObj = GSON.fromJson(chatMessage, ChatMessage.class); 
        cMessageObj.setSenderId(chatModel.getSender()); 
        if (mChatManager != null) { 
         mChatManager.chatMessageArrived(cMessageObj); 
        } 
       } 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

    @Override 
    public void deliveryComplete(IMqttDeliveryToken token) { 
     try { 
      if (token != null && token.getMessage() != null) { 
       Log.d(TAG, "Message : " + token.getMessage().toString() + " delivered"); 
      } 
     } catch (MqttException ex) { 
      ex.printStackTrace(); 
     } 
    } 


    private void subscribeToTopic() { 
     try { 
      mMqttAndroidClient.subscribe(mTopic, 0, null, new IMqttActionListener() { 
       @Override 
       public void onSuccess(IMqttToken asyncActionToken) { 
        Log.d(TAG, "Subscribed to topic : " + mTopic); 
       } 

       @Override 
       public void onFailure(IMqttToken asyncActionToken, Throwable exception) { 
        Log.d(TAG, "topic subscription failed for topic : " + mTopic); 
       } 
      }); 

     } catch (MqttException ex) { 
      System.err.println("Exception whilst subscribing"); 
      ex.printStackTrace(); 
     } 
    } 


    public void publishMessage(String messageText) { 

     try { 
      MqttMessage message = new MqttMessage(); 
      message.setPayload(messageText.getBytes()); 
      message.setQos(2); 
      mMqttAndroidClient.publish(mPublishTopic, message); 
      if (!mMqttAndroidClient.isConnected()) { 
      } 
     } catch (MqttException e) { 
      System.err.println("Error Publishing: " + e.getMessage()); 
      e.printStackTrace(); 
     } 
    } 

} 

ADBログを次のようにMQTT Androidのクライアントを持っているいずれかが私を助けてください私がここで逃しているものを見つけ出す?受信者はログからはっきりと見えるので、メッセージを受信して​​いません。

答えて

1

あなたはexample_topic(またはものは何でもmTopicinitConnection()を介して設定)に加入されていますが、constのmPublishTopicの固定値であるexampleAndroidPublishTopicに公開されています。

+0

間違いを指摘していただきありがとうございます。 –

+0

こんにちは@Pavel Zdenekちょうどもう1つの質問。クライアントは自分の公開メッセージも受信しています。それは有効なmqttの動作ですか? –

+0

MQTTブローカーは、誰がクライアントであるかは気にしません。それは購読している、それはメッセージを取得します。したがって、「有効」といいます。しかし実用的?たぶん、何らかの種類のアプリイベントバス。しかし、典型的なMQTTユースケースではありません。 –

関連する問題