コード例 #1
0
ファイル: TrafficListener.cs プロジェクト: eaardal/spindelvev
        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);
        }
コード例 #2
0
 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;
 }
コード例 #3
0
ファイル: TrafficListener.cs プロジェクト: eaardal/spindelvev
        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);
            }
        }
コード例 #4
0
ファイル: TrafficListener.cs プロジェクト: eaardal/spindelvev
 private static bool ResponseRouteMatchesAnyFilterRoute(Session session, IListenerFilter filter)
 {
     return(filter.Routes.Any(session.uriContains));
 }
コード例 #5
0
ファイル: TrafficListener.cs プロジェクト: eaardal/spindelvev
 private static bool MatchesHostnameAndRouteFilter(Session session, IListenerFilter filter)
 {
     return(ResponseHostnameMatchesAnyFilterHostname(session, filter) &&
            ResponseRouteMatchesAnyFilterRoute(session, filter));
 }
コード例 #6
0
ファイル: TrafficListener.cs プロジェクト: eaardal/spindelvev
 private static bool ShouldFilterOnlyOnHostname(IListenerFilter filter)
 {
     return(filter.Hostnames.Any() && !filter.Routes.Any());
 }
コード例 #7
0
ファイル: TrafficListener.cs プロジェクト: eaardal/spindelvev
 private static bool ShouldFilterHostnameAndRoute(IListenerFilter filter)
 {
     return(filter.Hostnames.Any() && filter.Routes.Any());
 }
コード例 #8
0
ファイル: TrafficListener.cs プロジェクト: eaardal/spindelvev
 private static bool ResponseHostnameMatchesAnyFilterHostname(Session session, IListenerFilter filter)
 {
     return(filter.Hostnames.Any(hostnameFilter => session.hostname.Contains(hostnameFilter.ToLower())));
 }