private void Remove(MessageStoreData data) { lock (_lock) { for (int i = 0; i < _pendingMessageData.Count; i++) { var test = (MessageStoreData)_pendingMessageData.GetAt(i); if (test == data) { _pendingMessageData.RemoveAt(i); break; } } } }
/// <summary> /// Saves a message into the store and begins the response timer. If the message is not pulled from the store /// before the response timer ends, the MessageTimeout event is fired. /// </summary> /// <param name="message">The message sent to the remote endpoint. I.e. Publish, Subscribe, etc.</param> /// <param name="eventData">Client defined data associated with the message.</param> /// <param name="clientUid">The socket connection context.</param> public void Add(IMqttMessage message, object eventData, string clientUid) { var storeData = new MessageStoreData { Message = message, MessageId = MqttMessageBase.GetMessageIdOrDefault(message), EventData = eventData, ResponseTimer = new TimeoutTimer(MqttProtocolInformation.Settings.NetworkTimeout), ClientUid = clientUid }; lock (_lock) { _pendingMessageData.Add(storeData); } storeData.ResponseTimer.TimeOutData = storeData; storeData.ResponseTimer.Timeout += ResponseTimerOnTimeout; storeData.ResponseTimer.Start(); }