public void Subscribe(Topic[] topics) { for (int i = 0; i < topics.Length; i++) { SNQoS realQos = SNQoS.AT_LEAST_ONCE; switch (topics[i].Qos) { case QOS.AT_LEAST_ONCE: realQos = SNQoS.AT_LEAST_ONCE; break; case QOS.AT_MOST_ONCE: realQos = SNQoS.AT_MOST_ONCE; break; case QOS.EXACTLY_ONCE: realQos = SNQoS.EXACTLY_ONCE; break; } SNTopic topic; if (reverseMappedTopics.ContainsKey(topics[i].Name)) { topic = new IdentifierTopic(reverseMappedTopics[topics[i].Name], realQos); } else { topic = new FullTopic(topics[i].Name, realQos); } SNSubscribe subscribe = new SNSubscribe(null, topic, false); _timers.Store(subscribe); _client.Send(subscribe); } }
public void ProcessWillTopicRequest() { Boolean retain = false; String topicName = String.Empty; SNQoS topicQos = SNQoS.EXACTLY_ONCE; if (_will != null && _will.Topic != null) { retain = _will.Retain; if (_will.Topic.Name != null) { topicName = _will.Topic.Name; } switch (_will.Topic.Qos) { case QOS.AT_LEAST_ONCE: topicQos = SNQoS.AT_LEAST_ONCE; break; case QOS.AT_MOST_ONCE: topicQos = SNQoS.AT_MOST_ONCE; break; default: break; } } FullTopic topic = new FullTopic(_will.Topic.Name, topicQos); WillTopic willTopic = new WillTopic(retain, topic); _client.Send(willTopic); }
public SNSuback reInit(Int32 topicID, Int32 messageID, ReturnCode code, SNQoS allowedQos) { this._topicID = topicID; this.MessageID = messageID; this._code = code; this._allowedQos = allowedQos; return(this); }
public void ProcessPublish(Int32?packetID, SNTopic topic, Byte[] content, Boolean retain, Boolean isDup) { SNQoS publisherQos = topic.getQos(); QOS realQos = QOS.AT_MOST_ONCE; switch (publisherQos) { case SNQoS.AT_LEAST_ONCE: SNPuback puback = new SNPuback(); puback.MessageID = packetID; puback.ReturnCode = ReturnCode.ACCEPTED; int topicID = 0; if (topic is IdentifierTopic) { topicID = ((IdentifierTopic)topic).Value; } else if (topic is ShortTopic) { topicID = Int32.Parse(((ShortTopic)topic).Value); } puback.topicID = topicID; _client.Send(puback); realQos = QOS.AT_LEAST_ONCE; break; case SNQoS.EXACTLY_ONCE: realQos = QOS.EXACTLY_ONCE; SNPubrec pubrec = new SNPubrec(packetID.Value); _client.Send(pubrec); break; default: break; } String topicName = String.Empty; if (topic is IdentifierTopic && mappedTopics.ContainsKey(((IdentifierTopic)topic).Value)) { topicName = mappedTopics[((IdentifierTopic)topic).Value]; } if (topicName.Length == 0) { return; } if (!(isDup && publisherQos == SNQoS.EXACTLY_ONCE)) { _dbInterface.StoreMessage(topicName, content, realQos); } if (_listener != null) { _listener.MessageReceived(MessageType.PUBLISH); } }
public void ProcessSuback(Int32 packetID, Int32 topicID, ReturnCode returnCode, SNQoS allowedQos) { SNMessage message = _timers.Remove(packetID); if (returnCode != ReturnCode.ACCEPTED) { throw new CoreLogicException("received invalid message suback"); } else { SNSubscribe subscribe = (SNSubscribe)message; String topicName = String.Empty; if (subscribe.SnTopic is IdentifierTopic) { topicName = mappedTopics[((IdentifierTopic)subscribe.SnTopic).Value]; } else { topicName = ((FullTopic)subscribe.SnTopic).Value; } SNQoS actualQos = allowedQos; QOS realQos = QOS.AT_LEAST_ONCE; switch (actualQos) { case SNQoS.AT_MOST_ONCE: realQos = QOS.AT_MOST_ONCE; break; case SNQoS.EXACTLY_ONCE: realQos = QOS.EXACTLY_ONCE; break; case SNQoS.LEVEL_ONE: realQos = QOS.AT_MOST_ONCE; break; } _dbInterface.StoreTopic(topicName, realQos); if (_listener != null) { _listener.MessageReceived(MessageType.SUBACK); } } }
public void Unsubscribe(String[] topics) { for (int i = 0; i < topics.Length; i++) { SNQoS realQos = SNQoS.AT_LEAST_ONCE; SNTopic topic; if (reverseMappedTopics.ContainsKey(topics[i])) { topic = new IdentifierTopic(reverseMappedTopics[topics[i]], realQos); } else { topic = new FullTopic(topics[i], realQos); } SNUnsubscribe subscribe = new SNUnsubscribe(null, topic); _timers.Store(subscribe); _client.Send(subscribe); } }
public void Publish(Topic topic, byte[] content, Boolean retain, Boolean dup) { SNQoS realQos = SNQoS.AT_LEAST_ONCE; switch (topic.Qos) { case QOS.AT_LEAST_ONCE: realQos = SNQoS.AT_LEAST_ONCE; break; case QOS.AT_MOST_ONCE: realQos = SNQoS.AT_MOST_ONCE; break; case QOS.EXACTLY_ONCE: realQos = SNQoS.EXACTLY_ONCE; break; } if (reverseMappedTopics.ContainsKey(topic.Name)) { IdentifierTopic idTopic = new IdentifierTopic(reverseMappedTopics[topic.Name], realQos); SNPublish publish = new SNPublish(null, idTopic, content, dup, retain); if (topic.Qos != QOS.AT_MOST_ONCE) { _timers.Store(publish); } _client.Send(publish); } else { FullTopic fullTopic = new FullTopic(topic.Name, realQos); pendingMessages.Add(new SNPublish(null, fullTopic, content, dup, retain)); Register register = new Register(0, null, topic.Name); _timers.Store(register); _client.Send(register); } }
public FullTopic reInit(String value, SNQoS qos) { this._value = value; this._qos = qos; return(this); }
public FullTopic(String value, SNQoS qos) { this._value = value; this._qos = qos; }
public IdentifierTopic reInit(Int32 value, SNQoS qos) { this._value = value; this._qos = qos; return(this); }
public IdentifierTopic(Int32 value, SNQoS qos) { this._value = value; this._qos = qos; }
public ShortTopic(String value, SNQoS qos) { this._value = value; this._qos = qos; }
public SNSuback(Int32 topicID, Int32 messageID, ReturnCode code, SNQoS allowedQos) : base(messageID) { this._topicID = topicID; this._code = code; this._allowedQos = allowedQos; }