public PublishCB(HikePacket packet, HikeMqttManager hikeMqttManager, int qos, bool removeFromDBOnReceivingAck) { this.packet = packet; this.hikeMqttManager = hikeMqttManager; this.qos = qos; this.removeFromDBOnReceivingAck = removeFromDBOnReceivingAck; }
//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); }
public void mqttPublishToServer(JObject json, int qos) { JToken data; json.TryGetValue(HikeConstants.TYPE, out data); string objType = data.ToString(); json.TryGetValue(HikeConstants.DATA, out data); JObject dataObj; long msgId; if (objType == NetworkManager.MESSAGE || objType == NetworkManager.INVITE) { dataObj = JObject.FromObject(data); JToken messageIdToken; dataObj.TryGetValue("i", out messageIdToken); msgId = Convert.ToInt64(messageIdToken.ToString()); } else { msgId = -1; } String msgToPublish = json.ToString(Newtonsoft.Json.Formatting.None); byte[] byteData = Encoding.UTF8.GetBytes(msgToPublish); HikePacket packet = new HikePacket(msgId, byteData, TimeUtils.getCurrentTimeTicks()); send(packet, qos); }
public static void addSentMessage(HikePacket packet) { if (packet.Message != null && packet.Message.Length < 8000) { lock (lockObj) { try { HikePacket mqttMessage = new HikePacket(packet.MessageId, packet.Message, packet.Timestamp); using (HikeMqttPersistenceDb context = new HikeMqttPersistenceDb(App.MqttDBConnectionstring)) { context.mqttMessages.InsertOnSubmit(mqttMessage); context.SubmitChanges(); } } catch (Exception e) { Debug.WriteLine("Failed to add unsent packet with id :: " + packet.MessageId); } } } //TODO update observable list }