예제 #1
0
 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;
             }
         }
     }
 }
예제 #2
0
        /// <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();
        }
예제 #3
0
        /// <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();
        }
예제 #4
0
 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;
             }
         }
     }
 }