Пример #1
0
        public void Send(string name, string message)
        {
            Message mess = new Message(name, message);
            messList.Add(mess);
            string jsonString = JsonConvert.SerializeObject(messList, Formatting.Indented);
            System.Diagnostics.Debug.WriteLine(jsonString);

            // Call the broadcastMessage method to update clients.
            Clients.All.broadcastMessage(jsonString);
        }
        protected override Task Send(Message[] messages)
        {
            return Task.Factory.StartNew(msgs =>
            {
                var messagesToSend = msgs as Message[];
                messagesToSend.GroupBy(m => m.Source).ToList().ForEach(group =>
                {
                    var message = new RabbitMqMessageWrapper(group.Key, group.ToArray());
                    _rabbitConnection.Send(message);

                 });
            },
            messages);
        }
 public async Task SendMessage(MessageViewModel messageViewModel)
 {
     var userIdentity = this.Context.User.Identity as CustomIdentity;
     int receiverKey = 0;
     if (userIdentity != null && int.TryParse(messageViewModel.Author, out receiverKey))
     {
         User sender = this._membershipService.GetUserByKey(userIdentity.Id);
         User receiver = this._membershipService.GetUserByKey(receiverKey);
         var message = new Message(
             messageViewModel.Text,
             sender.UserProfile,
             receiver.UserProfile);
         message.SendDate = messageViewModel.Date ?? DateTime.Now;
         messageViewModel.Sender = string.Format(
             "{0} {1}",
             sender.UserProfile.FirstName,
             sender.UserProfile.LastName);
         await this._messageService.SendMessageAsync(message);
         await this.Clients.User(messageViewModel.Author).ShowMessage(messageViewModel);
     }
 }
Пример #4
0
        /// <summary>
        /// Invoked when a payload is received from the backplane. There should only be one active call at any time.
        /// </summary>
        /// <param name="streamId">id of the stream</param>
        /// <param name="id">id of the payload within that stream</param>
        /// <param name="messages">List of messages associated</param>
        /// <returns></returns>
        protected Task OnReceived(string streamId, ulong id, Message[] messages)
        {
            // Create a local dictionary for this payload
            var dictionary = new ConcurrentDictionary<string, LocalEventKeyInfo>();

            foreach (var m in messages)
            {
                // Get the payload info
                var info = dictionary.GetOrAdd(m.Key, _ => new LocalEventKeyInfo());

                // Save the min and max for this payload for later
                ulong localId = Save(m);

                // Set the topic pointer for this event key so we don't need to look it up later
                info.Store = _topics[m.Key].Store;

                info.MinLocal = Math.Min(localId, info.MinLocal);
                info.Count++;
            }

            // Create the mapping for this payload
            var mapping = new ScaleoutMapping(dictionary);

            // Get the stream for this payload
            var stream = _streams.GetOrAdd(streamId, _ => new Linktionary<ulong, ScaleoutMapping>());

            // Publish only after we've setup the mapping fully
            stream.Add(id, mapping);

            // Schedule after we're done
            foreach (var eventKey in dictionary.Keys)
            {
                ScheduleEvent(eventKey);
            }

            return TaskAsyncHelper.Empty;
        }
Пример #5
0
        protected ulong Save(Message message)
        {
            if (message == null)
            {
                throw new ArgumentNullException("message");
            }

            Topic topic = GetTopic(message.Key);

            ulong id = topic.Store.Add(message);

            Counters.MessageBusMessagesPublishedTotal.Increment();
            Counters.MessageBusMessagesPublishedPerSec.Increment();

            return id;
        }
Пример #6
0
        /// <summary>
        /// Publishes a new message to the specified event on the bus.
        /// </summary>
        /// <param name="message">The message to publish.</param>
        public virtual Task Publish(Message message)
        {
            if (message == null)
            {
                throw new ArgumentNullException("message");
            }

            Topic topic = GetTopic(message.Key);

            topic.Store.Add(message);

            Counters.MessageBusMessagesPublishedTotal.Increment();
            Counters.MessageBusMessagesPublishedPerSec.Increment();

            ScheduleTopic(topic);

            return TaskAsyncHelper.Empty;
        }
Пример #7
0
        private bool ExcludeMessage(Message message)
        {
            if (String.IsNullOrEmpty(message.Filter))
            {
                return false;
            }

            string[] exclude = message.Filter.Split('|');

            return exclude.Any(signal => Identity.Equals(signal, StringComparison.OrdinalIgnoreCase) ||
                                                    _signals.Contains(signal) ||
                                                    _groups.Contains(signal));
        }
Пример #8
0
        private Message CreateMessage(string key, object value)
        {
            var command = value as Command;
            var message = new Message(_connectionId, key, _serializer.Stringify(value));

            if (command != null)
            {
                // Set the command id
                message.CommandId = command.Id;
                message.WaitForAck = command.WaitForAck;
            }

            return message;
        }
Пример #9
0
 public void Signal(Message data)
 {
     // Call the addNewMessageToPage method to update clients.
     Clients.Others.signal(data);
 }
Пример #10
0
 public async Task SendMessage(string to, string text)
 {
     var userName = HttpContext.User.Identity.Name;
     var message = new Message() { ConversationId = to, Text  = text, Date = DateTime.Now };
     var conv = await _chatManager.AddMessageAsync(userName, to, message);
     if (conv == null)
         return;
     foreach(var attendee in conv.Attendees)
     {
         var user = await _userManager.FindByIdAsync(attendee.UserId);
         if (user != null && user.UserName != userName)
             _hub.Clients.Group(user.UserName).messageReceived(new MessageViewModel() { ConversationId = to, Date = message.Date, From = HttpContext.User.Identity.Name, Text = text });
     }            
 }
 public RabbitMqMessageWrapper(string key, Message[] message)
 {
     Id = GetNext();
     Key = key;
     Messages = message;
 }
Пример #12
0
        /// <summary>
        /// Publishes a new message to the specified event on the bus.
        /// </summary>
        /// <param name="source">A value representing the source of the data sent.</param>
        public virtual Task Publish(Message message)
        {
            Topic topic = GetTopic(message.Key);

            topic.Store.Add(message);

            _counters.MessageBusMessagesPublishedTotal.Increment();
            _counters.MessageBusMessagesPublishedPerSec.Increment();

            ScheduleTopic(topic);

            return TaskAsyncHelper.Empty;
        }
Пример #13
0
        protected ulong Save(Message message)
        {
            Topic topic = GetTopic(message.Key);

            ulong id = topic.Store.Add(message);

            _counters.MessageBusMessagesPublishedTotal.Increment();
            _counters.MessageBusMessagesPublishedPerSec.Increment();

            return id;
        }
Пример #14
0
 /// <summary>
 /// Sends messages to the backplane
 /// </summary>
 /// <param name="messages"></param>
 /// <returns></returns>
 protected abstract Task Send(Message[] messages);
Пример #15
0
 public override Task Publish(Message message)
 {
     // TODO: Buffer messages here and make it configurable
     return Send(new[] { message });
 }