Пример #1
0
        public static void Dispatch(Tweet tweet, ITweetHandler handler)
        {
            if (tweet.IsRetweet)
            {
                return;
            }

            if (tweet.AuthorFollowers < 10)
            {
                return; // attempt to cut down on spam.
            }
            var encodedWords  = ConfigManager.LoadConfig <string>("word-filter");
            var decodedString = Encoding.UTF8.GetString(Convert.FromBase64String(encodedWords));

            // Bad words base 64 encoded for obvious reasons.
            var badWords   = decodedString.ToLower().Split("\r\n");
            var tweetWords = tweet.Message.ToLower().Replace("#", "").Split(" ");

            var badTweetWords = tweetWords.Intersect(badWords);

            if (badTweetWords.Count() > 0)
            {
                Console.WriteLine("Filtering tweet: ", tweet);
                return;
            }

            handler.Handle(tweet);
        }
Пример #2
0
        public static bool TryGetHandler(string handlerName, out ITweetHandler handler)
        {
            if (_loadedHandlers == null)
            {
                throw new NullReferenceException("Handlers must be loaded before attempting to access them.");
            }

            _loadedHandlers.TryGetValue(handlerName, out handler);

            return(handler != null);
        }
Пример #3
0
        public static void LoadRegistered()
        {
            _loadedHandlers.Clear();

            var settings = ConfigManager.LoadConfig <HandlerRegistry>("handlers");

            var handlerDetails = new List <HandlerDetails>();

            var assemblyTypes = Assembly.GetExecutingAssembly().GetTypes();

            foreach (var handler in settings.Handlers)
            {
                var  name        = handler.Name;
                Type correctType = null;
                try
                {
                    correctType = assemblyTypes.First(t => {
                        return(t.Name == handler.Type &&
                               typeof(ITweetHandler).IsAssignableFrom(t) &&
                               typeof(ITweetHandler).Name != t.Name);
                    });
                }
                catch (InvalidOperationException ex)
                {
                    throw new InvalidOperationException($"Could not find tweet handler type for '{handler.Type}'", ex);
                }

                var data = handler.Data;

                HandlerDetails details = new HandlerDetails(name, correctType, data);
                handlerDetails.Add(details);
            }

            foreach (var details in handlerDetails)
            {
                ITweetHandler createdHandler = Create(details.Type, details.Data);
                _loadedHandlers.Add(details.Name, createdHandler);
            }
        }
Пример #4
0
 public TweetEventWorker(ITweetHandler tweetHandler, IHubContext <TweetHub> tweetHub, ILogger <TweetEventWorker> logger)
 {
     _tweetHandler = tweetHandler;
     _tweetHub     = tweetHub;
     _logger       = logger;
 }