Esempio n. 1
0
        /// <summary>
        /// Submits a message to its channel's subscribers.
        /// </summary>
        /// <param name="sender">The submitter node.</param>
        /// <param name="message">The message to submit.</param>
        /// <returns>True if the operation succeeded.</returns>
        public bool SubmitMessage(IMessageSubscriber sender, IrisMessage message)
        {
            if (message.PublisherId == null || !_nodes.ContainsKey(sender))
            {
                return(false);
            }

            IrisConcurrentHashSet <Guid> _deliveryNodes            = new IrisConcurrentHashSet <Guid>();
            Action <IMessageSubscriber>  sendMessageToOthersAction = (n) =>
            {
                if (n != sender && !_deliveryNodes.Contains(n.Id))
                {
                    _deliveryNodes.Add(n.Id);
                    n.ReceiveMessage(message);
                }
            };

            if (message.TargetChannel == null)
            {
                // Broadcast
                _nodes.Keys.ForEach(sendMessageToOthersAction);
                return(true);
            }
            else
            {
                var irisNodes = _subsDictionary.GetSubscriptions(message.TargetChannel, message.PropagateThroughHierarchy);
                if (irisNodes != null)
                {
                    irisNodes.ForEach(sendMessageToOthersAction);
                }

                return(irisNodes != null);
            }
        }
Esempio n. 2
0
 public void ReceiveMessage(IrisMessage message)
 {
     if (message.TargetChannel == null)
     {
         PublishToBroadcast(message.Content);
     }
     else
     {
         Publish(message.TargetChannel, message.Content, message.PropagateThroughHierarchy);
     }
 }
Esempio n. 3
0
 /// <summary>
 /// Invoked when a new message is sent to this subscriber.
 /// </summary>
 /// <param name="message">The message sent.</param>
 public void ReceiveMessage(IrisMessage message) => OnClientSubmittedPacketReceived(message);