Ejemplo n.º 1
0
        private V2MessageList CreateMessageList(int count, int startId = 1)
        {
            var result = new V2MessageList();

            for (var i = 0; i < count; ++i)
            {
                result.Add(new V2Message("msg" + (startId + i), "1477297302", "messageType", "streamId", "message", 1));
            }
            ;
            return(result);
        }
        protected void ProcessMessageList(V2MessageList messageList)
        {
            if (messageList == null || _onMessage == null)
            {
                return;
            }

            foreach (var eventHandler in _onMessage.GetInvocationList())
            {
                NotifyAsync((EventHandler <MessageEventArgs>)eventHandler, messageList);
            }
        }
 private void Notify(EventHandler <MessageEventArgs> messageEventHandler, V2MessageList messageList)
 {
     foreach (var message in messageList)
     {
         TraceSource.TraceEvent(
             TraceEventType.Verbose, 0,
             "Notifying listener about message with ID \"{0}\" in stream \"{1}\"",
             (message as V2Message)?.Id, (message as V2Message)?.StreamId);
         try
         {
             messageEventHandler.Invoke(this, new MessageEventArgs(message));
         }
         catch (Exception e)
         {
             TraceSource.TraceEvent(
                 TraceEventType.Error, 0,
                 "Unhandled exception caught when notifying listener about message with ID \"{0}\": {1}",
                 message.Id, e);
         }
     }
 }
        protected async void NotifyAsync(EventHandler <MessageEventArgs> messageEventHandler, V2MessageList messageList)
        {
            // Notify each handler in a separate task, maintaining the order of messages in the list, and
            // get back to reading the data feed again without waiting for listeners to process messages.
            Task task;

            if (_tasks.TryGetValue(messageEventHandler, out task))
            {
                await task;
            }
            _tasks[messageEventHandler] = Task.Run(() => Notify(messageEventHandler, messageList));
        }