Exemplo n.º 1
0
        /// <summary>
        /// Broadcast message to the given channel(s)
        /// </summary>
        /// <param name="msg"></param>
        public void BroadcastMessage(INyxMessage msg)
        {
            if (!_isStarted || _hubActor == null)
            {
                _logger.Warn("Hub is not started.");
                return;
            }
            _logger.Debug("Broadcasting message to channel {0}...", StringExtensions.Trimmer(msg.Target));
            ((NyxMessage)msg).Direction = MessageDirection.Out;
            var error = string.Empty;

            try
            {
                var filterFound = _plugman.GetFilters(f => f.Direction.HasFlag(MessageDirection.Out) && f.CanFilter(this)).FirstOrDefault(filter => !filter.AllowMessage(msg, this, out error));
                if (filterFound != null)
                {
                    _logger.Warn("Message not sent. Was filtered by {0}. {1}", filterFound.GetType().Name, error);
                    return;
                }
            }
            catch (Exception ex)
            {
                _logger.Error("Error filtering message.", ex);
            }

            _hubActor.SendMoreFrame("broadcast").SendMoreFrame(msg.Target).SendFrame(msg.ToDefault());
            _outMessageStatus.OnNext(msg.AsReadOnly().SuccessfullSent(this));
        }
Exemplo n.º 2
0
        /// <summary>
        /// Converts a NyxMessage to the default type and then to a NetMQMessage.
        /// This should be plugable... for future proof
        /// </summary>
        /// <param name="msg">Nyx message</param>
        /// <returns>Converted NetMQMessage</returns>
        public static NetMQMessage ToNetMQMessage(this INyxMessage msg)
        {
            // TODO: Add plugin support or atleast configuration support, so we can
            var zmsg = new NetMQMessage();

            zmsg.Push(msg.ToDefault());
            return(zmsg);
        }