PageRenderTime 41ms CodeModel.GetById 12ms RepoModel.GetById 1ms app.codeStats 0ms

/paho.mqtt.android.example/src/main/java/paho/mqtt/java/example/PahoExampleActivity.java

https://gitlab.com/jettijam/pubsub_project
Java | 219 lines | 150 code | 47 blank | 22 comment | 3 complexity | df64c887da3973abd0daa2adf4ed5fcf MD5 | raw file
  1. /*******************************************************************************
  2. * Copyright (c) 1999, 2016 IBM Corp.
  3. *
  4. * All rights reserved. This program and the accompanying materials
  5. * are made available under the terms of the Eclipse Public License v1.0
  6. * and Eclipse Distribution License v1.0 which accompany this distribution.
  7. *
  8. * The Eclipse Public License is available at
  9. * http://www.eclipse.org/legal/epl-v10.html
  10. * and the Eclipse Distribution License is available at
  11. * http://www.eclipse.org/org/documents/edl-v10.php.
  12. *
  13. */
  14. package paho.mqtt.java.example;
  15. import android.os.Bundle;
  16. import android.support.design.widget.FloatingActionButton;
  17. import android.support.design.widget.Snackbar;
  18. import android.support.v7.app.AppCompatActivity;
  19. import android.support.v7.widget.LinearLayoutManager;
  20. import android.support.v7.widget.RecyclerView;
  21. import android.support.v7.widget.Toolbar;
  22. import android.view.View;
  23. import android.view.Menu;
  24. import android.view.MenuItem;
  25. import org.eclipse.paho.android.service.MqttAndroidClient;
  26. import org.eclipse.paho.client.mqttv3.DisconnectedBufferOptions;
  27. import org.eclipse.paho.client.mqttv3.IMqttActionListener;
  28. import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken;
  29. import org.eclipse.paho.client.mqttv3.IMqttMessageListener;
  30. import org.eclipse.paho.client.mqttv3.IMqttToken;
  31. import org.eclipse.paho.client.mqttv3.MqttCallbackExtended;
  32. import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
  33. import org.eclipse.paho.client.mqttv3.MqttException;
  34. import org.eclipse.paho.client.mqttv3.MqttMessage;
  35. import java.util.ArrayList;
  36. public class PahoExampleActivity extends AppCompatActivity{
  37. private RecyclerView mRecyclerView;
  38. private HistoryAdapter mAdapter;
  39. private RecyclerView.LayoutManager mLayoutManager;
  40. MqttAndroidClient mqttAndroidClient;
  41. final String serverUri = "tcp://iot.eclipse.org:1883";
  42. final String clientId = "ExampleAndroidClient";
  43. final String subscriptionTopic = "exampleAndroidTopic";
  44. final String publishTopic = "exampleAndroidPublishTopic";
  45. final String publishMessage = "Hello World!";
  46. @Override
  47. protected void onCreate(Bundle savedInstanceState) {
  48. super.onCreate(savedInstanceState);
  49. setContentView(R.layout.activity_scrolling);
  50. Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
  51. setSupportActionBar(toolbar);
  52. FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
  53. fab.setOnClickListener(new View.OnClickListener() {
  54. @Override
  55. public void onClick(View view) {
  56. publishMessage();
  57. }
  58. });
  59. mRecyclerView = (RecyclerView) findViewById(R.id.history_recycler_view);
  60. mLayoutManager = new LinearLayoutManager(this);
  61. mRecyclerView.setLayoutManager(mLayoutManager);
  62. mAdapter = new HistoryAdapter(new ArrayList<String>());
  63. mRecyclerView.setAdapter(mAdapter);
  64. mqttAndroidClient = new MqttAndroidClient(getApplicationContext(), serverUri, clientId);
  65. mqttAndroidClient.setCallback(new MqttCallbackExtended() {
  66. @Override
  67. public void connectComplete(boolean reconnect, String serverURI) {
  68. if (reconnect) {
  69. addToHistory("Reconnected to : " + serverURI);
  70. // Because Clean Session is true, we need to re-subscribe
  71. subscribeToTopic();
  72. } else {
  73. addToHistory("Connected to: " + serverURI);
  74. }
  75. }
  76. @Override
  77. public void connectionLost(Throwable cause) {
  78. addToHistory("The Connection was lost.");
  79. }
  80. @Override
  81. public void messageArrived(String topic, MqttMessage message) throws Exception {
  82. addToHistory("Incoming message: " + new String(message.getPayload()));
  83. }
  84. @Override
  85. public void deliveryComplete(IMqttDeliveryToken token) {
  86. }
  87. });
  88. MqttConnectOptions mqttConnectOptions = new MqttConnectOptions();
  89. mqttConnectOptions.setAutomaticReconnect(true);
  90. mqttConnectOptions.setCleanSession(false);
  91. try {
  92. //addToHistory("Connecting to " + serverUri);
  93. mqttAndroidClient.connect(mqttConnectOptions, null, new IMqttActionListener() {
  94. @Override
  95. public void onSuccess(IMqttToken asyncActionToken) {
  96. DisconnectedBufferOptions disconnectedBufferOptions = new DisconnectedBufferOptions();
  97. disconnectedBufferOptions.setBufferEnabled(true);
  98. disconnectedBufferOptions.setBufferSize(100);
  99. disconnectedBufferOptions.setPersistBuffer(false);
  100. disconnectedBufferOptions.setDeleteOldestMessages(false);
  101. mqttAndroidClient.setBufferOpts(disconnectedBufferOptions);
  102. subscribeToTopic();
  103. }
  104. @Override
  105. public void onFailure(IMqttToken asyncActionToken, Throwable exception) {
  106. addToHistory("Failed to connect to: " + serverUri);
  107. }
  108. });
  109. } catch (MqttException ex){
  110. ex.printStackTrace();
  111. }
  112. }
  113. private void addToHistory(String mainText){
  114. System.out.println("LOG: " + mainText);
  115. mAdapter.add(mainText);
  116. Snackbar.make(findViewById(android.R.id.content), mainText, Snackbar.LENGTH_LONG)
  117. .setAction("Action", null).show();
  118. }
  119. @Override
  120. public boolean onCreateOptionsMenu(Menu menu) {
  121. // Inflate the menu; this adds items to the action bar if it is present.
  122. return true;
  123. }
  124. @Override
  125. public boolean onOptionsItemSelected(MenuItem item) {
  126. // Handle action bar item clicks here. The action bar will
  127. // automatically handle clicks on the Home/Up button, so long
  128. // as you specify a parent activity in AndroidManifest.xml.
  129. int id = item.getItemId();
  130. //noinspection SimplifiableIfStatement
  131. return super.onOptionsItemSelected(item);
  132. }
  133. public void subscribeToTopic(){
  134. try {
  135. mqttAndroidClient.subscribe(subscriptionTopic, 0, null, new IMqttActionListener() {
  136. @Override
  137. public void onSuccess(IMqttToken asyncActionToken) {
  138. addToHistory("Subscribed!");
  139. }
  140. @Override
  141. public void onFailure(IMqttToken asyncActionToken, Throwable exception) {
  142. addToHistory("Failed to subscribe");
  143. }
  144. });
  145. // THIS DOES NOT WORK!
  146. mqttAndroidClient.subscribe(subscriptionTopic, 0, new IMqttMessageListener() {
  147. @Override
  148. public void messageArrived(String topic, MqttMessage message) throws Exception {
  149. // message Arrived!
  150. System.out.println("Message: " + topic + " : " + new String(message.getPayload()));
  151. }
  152. });
  153. } catch (MqttException ex){
  154. System.err.println("Exception whilst subscribing");
  155. ex.printStackTrace();
  156. }
  157. }
  158. public void publishMessage(){
  159. try {
  160. MqttMessage message = new MqttMessage();
  161. message.setPayload(publishMessage.getBytes());
  162. mqttAndroidClient.publish(publishTopic, message);
  163. addToHistory("Message Published");
  164. if(!mqttAndroidClient.isConnected()){
  165. addToHistory(mqttAndroidClient.getBufferedMessageCount() + " messages in buffer.");
  166. }
  167. } catch (MqttException e) {
  168. System.err.println("Error Publishing: " + e.getMessage());
  169. e.printStackTrace();
  170. }
  171. }
  172. }