/// <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); } }
public void ReceiveMessage(IrisMessage message) { if (message.TargetChannel == null) { PublishToBroadcast(message.Content); } else { Publish(message.TargetChannel, message.Content, message.PropagateThroughHierarchy); } }
/// <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);