/// <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)); }
/// <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); }