//this is called when messages are sent 1 by 1 public void send(HikePacket packet, int qos) { if (!isConnected()) { /* only care about failures for messages we care about. */ if (qos > 0) { try { MqttDBUtils.addSentMessage(packet); } catch (Exception e) { } } this.connect(); return; } PublishCB pbCB = null; if (qos > 0) { pbCB = new PublishCB(packet, this, qos, false); } mqttConnection.publish(this.topic + HikeConstants.PUBLISH_TOPIC, packet.Message, (QoS)qos == 0 ? QoS.AT_MOST_ONCE : QoS.AT_LEAST_ONCE, pbCB); }
//this is called to send unsent messages. They all are sent in a single thread public void sendAllUnsentMessages(List <HikePacket> packets) { if (!isConnected()) { this.connect(); return; } byte[][] messagesToSend = new byte[packets.Count][]; PublishCB[] messageCallbacks = new PublishCB[packets.Count]; for (int i = 0; i < packets.Count; i++) { messageCallbacks[i] = new PublishCB(packets[i], this, 1, true); messagesToSend[i] = packets[i].Message; } mqttConnection.publish(this.topic + HikeConstants.PUBLISH_TOPIC, messagesToSend, QoS.AT_LEAST_ONCE, messageCallbacks); }