예제 #1
0
 /// <summary>
 /// Returns a task which represents message processing by the event target.
 /// </summary>
 /// <param name="message">Message to process.</param>
 /// <returns>Task which represents message processing.</returns>
 public Task ProcessMessage(NuntiusMessage message)
 {
     return Task.Factory.StartNew(() =>
     {
         lock (_lock)
         {
             _lastMessage = message;
             if (_taskWhichSendsMessage == null)
             {
                 _taskWhichSendsMessage = Task.Factory.StartNew(async () =>
                 {
                     await Task.Delay(_intervalInMs);
                     lock (_lock)
                     {
                         // Save pointer because send is async so the receiver could get null.
                         var msg = _lastMessage;
                         if (!_endInvoked) SafelyInvokeSendEvent(msg);
                         _lastMessage = null;
                         _taskWhichSendsMessage = null;
                     }
                 });
             }
         }
     });
 }
예제 #2
0
 /// <summary>
 /// Returns a task which represents message processing by the event target.
 /// </summary>
 /// <param name="message">Message to process.</param>
 /// <returns>Task which represents message processing.</returns>
 public Task ProcessMessage(NuntiusMessage message)
 {
     Log(message);
     return Task.Factory.StartNew(() =>
     {
         SafelyInvokeSendEvent(message);
     });
 }
예제 #3
0
 private NuntiusMessage MapEventDataToNuntiusMessage(EventData eventData)
 {
     var message = new NuntiusMessage();
     foreach (var keyPair in eventData.Properties)
     {
         message[keyPair.Key] = keyPair.Value.ToString();
     }
     return message;
 }
예제 #4
0
 public Task ProcessMessage(NuntiusMessage message)
 {
     _preTaskBody?.Invoke(message);
     return Task.Factory.StartNew(() =>
     {
         _filterBody?.Invoke(message);
         SafelyInvokeSendEvent(message);
     });
 }
예제 #5
0
 public Task ProcessMessage(NuntiusMessage message)
 {
     var azureMessage = new Message();
     azureMessage.MessageId = _endpointId;
     foreach (var keyValue in message.Properties)
     {
         azureMessage.Properties[keyValue.Key] = keyValue.Value;
     }
     return _deviceClient.SendEventAsync(azureMessage);
 }
예제 #6
0
 /// <summary>
 /// Offers the message to the set which should behave appropriately. If the set if not in k-anonymity
 /// state with the offered message, it should return null; otherwise appropriate output message should
 /// be returned. This method is called from multiple threads.
 /// </summary>
 /// <param name="inputMessage">Message offered to the set.</param>
 /// <returns></returns>
 public virtual NuntiusMessage OfferMessage(NuntiusMessage inputMessage)
 {
     var occurences = Interlocked.Add(ref _occurences, 1);
     Task.Factory.StartNew(async () =>
     {
         await Task.Delay(_lifespanInMilliseconds);
         Interlocked.Add(ref _occurences, -1);
     });
     if (occurences >= _k) return _setToMessage(this);
     return null;
 }
예제 #7
0
 /// <summary>
 /// Returns a task which represents message processing by the event target.
 /// </summary>
 /// <param name="message">Message to process.</param>
 /// <returns>Task which represents message processing.</returns>
 public Task ProcessMessage(NuntiusMessage message)
 {
     return Task.Factory.StartNew(() =>
     {
         foreach (var key in _keysToDelete)
         {
             if (!message.RemoveProperty(key) && _checkKeyPressenceInMessage)
                 throw new KeyNotFoundException($"Key {key} was not found in the message: {message}.");
         }
         SafelyInvokeSendEvent(message);
     });
 }
예제 #8
0
        /// <summary>
        /// Returns a task which represents message processing by the event target.
        /// </summary>
        /// <param name="message">Message to process.</param>
        /// <returns>Task which represents message processing.</returns>
        public Task ProcessMessage(NuntiusMessage message)
        {
            return Task.Factory.StartNew(() =>
            {
                var setId = _chooseSet(message);
                IKAnonymitySet set;
                if (!_sets.TryGetValue(setId, out set))
                {
                    throw new KeyNotFoundException(
                        $"Element for message {message} returned set id {setId} which was not present between sets.");
                }
                var result = set.OfferMessage(message);
                if (result != null) SafelyInvokeSendEvent(result);
            });

        }
예제 #9
0
 /// <summary>
 /// Returns a task which represents message processing by the event target.
 /// </summary>
 /// <param name="message">Message to process.</param>
 /// <returns>Task which represents message processing.</returns>
 public Task ProcessMessage(NuntiusMessage message)
 {
     return Task.Factory.StartNew(() =>
     {
         foreach (var key in _keysToHash)
         {
             var value = message[key];
             if (value == null)
             {
                 throw new KeyNotFoundException($"Key {key} was not present in the message.");
             }
             if (_salt != null) value += _salt();
             var hash = _hashProvider.ComputeHash(Encoding.UTF8.GetBytes(value));
             message[key] = GetHexaString(hash);
         }
         SafelyInvokeSendEvent(message);
     });
 }
예제 #10
0
 /// <summary>
 /// Logs a message.
 /// </summary>
 /// <param name="message">Message to log.</param>
 public void Log(NuntiusMessage message)
 {
     _writer.WriteLine(_messageToString(message));
 }
예제 #11
0
 /// <summary>
 /// Returns a task which represents message processing by the event target.
 /// </summary>
 /// <param name="message">Message to process.</param>
 /// <returns>Task which represents message processing.</returns>
 public Task ProcessMessage(NuntiusMessage message)
 {
     _lastMessage = message;
     return Task.FromResult<object>(null);
 }
 /// <summary>
 /// Sends a new message. 
 /// </summary>
 /// <param name="message">Message to send.</param>
 public virtual void SendMessage(NuntiusMessage message)
 {
     SafelyInvokeSendEvent(message);
 }