public void StartListening(IListenerConnection listenerConnection, IListenerFilter listenerFilter, ITrafficHandler trafficHandler) { _logger.Debug("Starting to listen using {Listener} and filters {@Verbs} {@Hostnames} {@Routes}", listenerConnection.GetType().Name, listenerFilter.Verbs, listenerFilter.Hostnames, listenerFilter.Routes); listenerConnection.Connect(); listenerConnection.OnBeforeResponse += session => OnBeforeResponse(session, listenerFilter, trafficHandler); }
public int Broadcast(IMessage msg, IListenerFilter lf) { int retVal = 0; KeyValuePair<IMessageListener, IMessageFilter>[] copied = new KeyValuePair<IMessageListener, IMessageFilter>[generalSubscribers.Count]; generalSubscribers.CopyTo(copied, 0); foreach (KeyValuePair<IMessageListener, IMessageFilter> p in copied) { if (p.Key is IMessageListenerWithSwich && ((IMessageListenerWithSwich) p.Key).Off) continue; if (p.Value.Accept(msg)) { if (lf != null && !lf.Accept(p.Key, msg)) continue; LogManager.GetLogger(typeof (MessageBroadcasterImpl)).Debug("message of type " + msg.GetType() + " was sent to " + p.Key.GetType()); p.Key.Listen(msg); retVal++; } } return retVal; }
private void OnBeforeResponse(Session session, IListenerFilter filter, ITrafficHandler handler) { _logger.Verbose("{ThisMethod} for {Method} {Url}", nameof(OnBeforeResponse), session.RequestMethod, session.url); if (filter.Verbs.Any() && !filter.Verbs.Any(verbFilter => session.RequestMethod.Equals(verbFilter))) { return; } if (filter.ApplyFilters) { if (ShouldFilterHostnameAndRoute(filter)) { if (MatchesHostnameAndRouteFilter(session, filter)) { handler.HandleResponse(session); } } else if (ShouldFilterOnlyOnHostname(filter)) { if (ResponseHostnameMatchesAnyFilterHostname(session, filter)) { handler.HandleResponse(session); } } else if (ShouldFilterOnlyOnRoute(filter)) { if (ResponseRouteMatchesAnyFilterRoute(session, filter)) { handler.HandleResponse(session); } } } else { handler.HandleResponse(session); } }
private static bool ResponseRouteMatchesAnyFilterRoute(Session session, IListenerFilter filter) { return(filter.Routes.Any(session.uriContains)); }
private static bool MatchesHostnameAndRouteFilter(Session session, IListenerFilter filter) { return(ResponseHostnameMatchesAnyFilterHostname(session, filter) && ResponseRouteMatchesAnyFilterRoute(session, filter)); }
private static bool ShouldFilterOnlyOnHostname(IListenerFilter filter) { return(filter.Hostnames.Any() && !filter.Routes.Any()); }
private static bool ShouldFilterHostnameAndRoute(IListenerFilter filter) { return(filter.Hostnames.Any() && filter.Routes.Any()); }
private static bool ResponseHostnameMatchesAnyFilterHostname(Session session, IListenerFilter filter) { return(filter.Hostnames.Any(hostnameFilter => session.hostname.Contains(hostnameFilter.ToLower()))); }