private void UpdateMatchesBasedOnHashTagEntities(ITweet tweet, MatchOn matchOn, Dictionary <string, Action <ITweet> > matchingTrackAndActions, MatchedTweetReceivedEventArgs matchingTracksEventArgs, Dictionary <string, Action <ITweet> > matchingQuotedTrackAndActions) { if (matchOn.HasFlag(MatchOn.Everything) || matchOn.HasFlag(MatchOn.AllEntities) || matchOn.HasFlag(MatchOn.HashTagEntities)) { var hashTags = tweet.Entities.Hashtags.Select(x => x.Text); hashTags.ForEach(x => { var tracksMatchingHashTag = _streamTrackManager.GetMatchingTracksAndActions(x); tracksMatchingHashTag.ForEach(t => { matchingTrackAndActions.TryAdd(t.Item1, t.Item2); }); if (tracksMatchingHashTag.Count > 0) { matchingTracksEventArgs.MatchOn |= MatchOn.HashTagEntities; } }); if (tweet.QuotedTweet != null) { var quotedHashTags = tweet.QuotedTweet.Entities.Hashtags.Select(x => x.Text); quotedHashTags.ForEach(x => { var tracksMatchingHashTag = _streamTrackManager.GetMatchingTracksAndActions(x); tracksMatchingHashTag.ForEach(t => { matchingQuotedTrackAndActions.TryAdd(t.Item1, t.Item2); }); if (tracksMatchingHashTag.Count > 0) { matchingTracksEventArgs.QuotedTweetMatchOn |= MatchOn.HashTagEntities; } }); } } }
private void UpdateMatchesBasedOnTweetInReplyToUser(ITweet tweet, MatchOn matchOn, Dictionary <long, Action <ITweet> > matchingFollowersAndActions, MatchedTweetReceivedEventArgs matchingTracksEventArgs, Dictionary <long, Action <ITweet> > matchingQuotedFollowersAndActions) { if (matchOn.HasFlag(MatchOn.Everything) || matchOn.HasFlag(MatchOn.FollowerInReplyTo)) { var userId = tweet.InReplyToUserId; Action <ITweet> actionToExecuteWhenMatchingFollower; if (userId != null && _followingUserIds.TryGetValue(userId, out actionToExecuteWhenMatchingFollower)) { matchingFollowersAndActions.TryAdd(userId.Value, actionToExecuteWhenMatchingFollower); matchingTracksEventArgs.MatchOn |= MatchOn.FollowerInReplyTo; } if (tweet.QuotedTweet != null) { var quotedTweetCreatorId = tweet.QuotedTweet.InReplyToUserId; Action <ITweet> actionToExecuteWhenMatchingFollowerFromQuotedTweet; if (quotedTweetCreatorId != null && _followingUserIds.TryGetValue(quotedTweetCreatorId, out actionToExecuteWhenMatchingFollowerFromQuotedTweet)) { matchingQuotedFollowersAndActions.TryAdd(quotedTweetCreatorId.Value, actionToExecuteWhenMatchingFollowerFromQuotedTweet); matchingTracksEventArgs.QuotedTweetMatchOn |= MatchOn.FollowerInReplyTo; } } } }
private void UpdateMatchesBasedOnUserMentions(ITweet tweet, MatchOn matchOn, Dictionary <string, Action <ITweet> > matchingTrackAndActions, MatchedTweetReceivedEventArgs matchingTracksEventArgs, Dictionary <string, Action <ITweet> > matchingQuotedTrackAndActions) { if (matchOn.HasFlag(MatchOn.Everything) || matchOn.HasFlag(MatchOn.AllEntities) || matchOn.HasFlag(MatchOn.UserMentionEntities)) { var mentionsScreenName = tweet.Entities.UserMentions.Select(x => x.ScreenName); mentionsScreenName.ForEach(x => { var tracksMatchingMentionScreenName = _streamTrackManager.GetMatchingTracksAndActions(x); tracksMatchingMentionScreenName.ForEach(t => { matchingTrackAndActions.TryAdd(t.Item1, t.Item2); }); if (tracksMatchingMentionScreenName.Count > 0) { matchingTracksEventArgs.MatchOn |= MatchOn.UserMentionEntities; } }); if (tweet.QuotedTweet != null) { var quotedMentionsScreenName = tweet.QuotedTweet.Entities.UserMentions.Select(x => x.ScreenName); quotedMentionsScreenName.ForEach(x => { var tracksMatchingMentionScreenName = _streamTrackManager.GetMatchingTracksAndActions(x); tracksMatchingMentionScreenName.ForEach(t => { matchingQuotedTrackAndActions.TryAdd(t.Item1, t.Item2); }); if (tracksMatchingMentionScreenName.Count > 0) { matchingTracksEventArgs.QuotedTweetMatchOn |= MatchOn.UserMentionEntities; } }); } } }
public FilteredStreamMatcherConfig(MatchOn matchOn) { MatchOn = matchOn; TweetMatchingTrackAndActions = new Dictionary <T, Action <ITweet> >(); RetweetMatchingTrackAndActions = new Dictionary <T, Action <ITweet> >(); QuotedTweetMatchingTrackAndActions = new Dictionary <T, Action <ITweet> >(); }
// Constructor public FilteredStream( ITwitterClient client, IStreamTrackManager <ITweet> streamTrackManager, IFilterStreamTweetMatcherFactory filterStreamTweetMatcherFactory, IJsonObjectConverter jsonObjectConverter, IJObjectStaticWrapper jObjectStaticWrapper, IStreamResultGenerator streamResultGenerator, ITwitterClientFactories factories, ICreateFilteredTweetStreamParameters createFilteredTweetStreamParameters) : base(client, streamTrackManager, jsonObjectConverter, jObjectStaticWrapper, streamResultGenerator, factories, createFilteredTweetStreamParameters) { StreamTrackManager = streamTrackManager; _client = client; _filterStreamTweetMatcherFactory = filterStreamTweetMatcherFactory; _factories = factories; _followingUserIds = new Dictionary <long?, Action <ITweet> >(); _locations = new Dictionary <ILocation, Action <ITweet> >(); MatchOn = MatchOn.Everything; }
public void FillQueue(List <Piece> queue, PieceTypes type) { if (queue[0].PieceType == PieceTypes.Empty) { queue[0] = new Piece() { PieceType = type }; } for (int i = 1; i < queue.Count; i++) { if (queue[i].PieceType == PieceTypes.Empty) { var values = Enum.GetValues(typeof(PieceTypes)); var pieceType = PieceTypes.Empty; while (pieceType == PieceTypes.Empty) { pieceType = (PieceTypes)values.GetValue(rand.Next(values.Length - 1)); if (MatchOn.Contains(pieceType)) { pieceType = PieceTypes.Empty; } } queue[i] = new Piece() { PieceType = pieceType }; } } }
// Update Event Args private void UpdateMatchesBasedOnTweetText(ITweet tweet, MatchOn matchOn, Dictionary <string, Action <ITweet> > matchingTrackAndActions, MatchedTweetReceivedEventArgs matchingTracksEventArgs, Dictionary <string, Action <ITweet> > matchingQuotedTrackAndActions) { if (matchOn.HasFlag(MatchOn.Everything) || matchOn.HasFlag(MatchOn.TweetText)) { var tracksMatchingTweetText = _streamTrackManager.GetMatchingTracksAndActions(tweet.FullText); tracksMatchingTweetText.ForEach(x => { matchingTrackAndActions.TryAdd(x.Item1, x.Item2); }); if (tracksMatchingTweetText.Count > 0) { matchingTracksEventArgs.MatchOn |= MatchOn.TweetText; } if (tweet.QuotedTweet != null) { var tracksMatchingQuotedTweetText = _streamTrackManager.GetMatchingTracksAndActions(tweet.QuotedTweet.FullText); tracksMatchingQuotedTweetText.ForEach(x => { matchingQuotedTrackAndActions.TryAdd(x.Item1, x.Item2); }); if (tracksMatchingQuotedTweetText.Count > 0) { matchingTracksEventArgs.QuotedTweetMatchOn |= MatchOn.TweetText; } } } }
private void UpdateMatchesBasedOnTweetLocation(ITweet tweet, MatchOn matchOn, Dictionary <ILocation, Action <ITweet> > matchingLocationAndActions, MatchedTweetReceivedEventArgs matchingTracksEventArgs, Dictionary <ILocation, Action <ITweet> > matchingQuotedLocationAndActions) { if (matchOn.HasFlag(MatchOn.Everything) || matchOn.HasFlag(MatchOn.TweetLocation)) { var matchedLocations = GetMatchedLocations(tweet).ToArray(); matchedLocations.ForEach(x => { matchingLocationAndActions.TryAdd(x.Key, x.Value); }); if (matchedLocations.Length > 0) { matchingTracksEventArgs.MatchOn |= MatchOn.TweetLocation; } if (tweet.QuotedTweet != null) { var quotedMatchedLocations = GetMatchedLocations(tweet.QuotedTweet).ToArray(); quotedMatchedLocations.ForEach(x => { matchingQuotedLocationAndActions.TryAdd(x.Key, x.Value); }); if (quotedMatchedLocations.Length > 0) { matchingTracksEventArgs.QuotedTweetMatchOn |= MatchOn.TweetLocation; } } } }
public MatchedTweetReceivedEventArgs GetMatchingTweetEventArgsAndRaiseMatchingElements(ITweet tweet, string json, MatchOn matchOn) { var result = new MatchedTweetReceivedEventArgs(tweet, json); var trackMatcherConfig = new FilteredStreamMatcherConfig <string>(matchOn); var locationMatcherConfig = new FilteredStreamMatcherConfig <ILocation>(matchOn); var followersMatcherConfig = new FilteredStreamMatcherConfig <long>(matchOn); UpdateMatchesBasedOnTweetText(tweet, trackMatcherConfig, result); UpdateMatchesBasedOnUrlEntities(tweet, trackMatcherConfig, result); UpdateMatchesBasedOnHashTagEntities(tweet, trackMatcherConfig, result); UpdateMatchesBasedOnUserMentions(tweet, trackMatcherConfig, result); UpdateMatchesBasedOnSymbols(tweet, trackMatcherConfig, result); UpdateMatchesBasedOnTweetLocation(tweet, locationMatcherConfig, result); UpdateMatchesBasedOnTweetCreator(tweet, followersMatcherConfig, result); UpdateMatchesBasedOnTweetInReplyToUser(tweet, followersMatcherConfig, result); result.MatchingTracks = trackMatcherConfig.TweetMatchingTrackAndActions.Select(x => x.Key).ToArray(); result.MatchingLocations = locationMatcherConfig.TweetMatchingTrackAndActions.Select(x => x.Key).ToArray(); result.MatchingFollowers = followersMatcherConfig.TweetMatchingTrackAndActions.Select(x => x.Key).ToArray(); result.RetweetMatchingTracks = trackMatcherConfig.RetweetMatchingTrackAndActions.Select(x => x.Key).ToArray(); result.RetweetMatchingLocations = locationMatcherConfig.RetweetMatchingTrackAndActions.Select(x => x.Key).ToArray(); result.RetweetMatchingFollowers = followersMatcherConfig.RetweetMatchingTrackAndActions.Select(x => x.Key).ToArray(); result.QuotedTweetMatchingTracks = trackMatcherConfig.QuotedTweetMatchingTrackAndActions.Select(x => x.Key).ToArray(); result.QuotedTweetMatchingLocations = locationMatcherConfig.QuotedTweetMatchingTrackAndActions.Select(x => x.Key).ToArray(); result.QuotedTweetMatchingFollowers = followersMatcherConfig.QuotedTweetMatchingTrackAndActions.Select(x => x.Key).ToArray(); CallMultipleActions(tweet, trackMatcherConfig.GetAllMatchingTracks().Select(x => x.Value)); CallMultipleActions(tweet, locationMatcherConfig.GetAllMatchingTracks().Select(x => x.Value)); CallMultipleActions(tweet, followersMatcherConfig.GetAllMatchingTracks().Select(x => x.Value)); return(result); }
public MatchedTweetReceivedEventArgs GetMatchingTweetEventArgsAndRaiseMatchingElements(ITweet tweet, string json, MatchOn matchOn) { var matchingTracksEventArgs = new MatchedTweetReceivedEventArgs(tweet, json); var matchingTrackAndActions = new Dictionary <string, Action <ITweet> >(); var matchingLocationsAndActions = new Dictionary <ILocation, Action <ITweet> >(); var matchingFollowersAndActions = new Dictionary <long, Action <ITweet> >(); var matchingQuotedTrackAndActions = new Dictionary <string, Action <ITweet> >(); var matchingQuotedLocationsAndActions = new Dictionary <ILocation, Action <ITweet> >(); var matchingQuotedFollowersAndActions = new Dictionary <long, Action <ITweet> >(); UpdateMatchesBasedOnTweetText(tweet, matchOn, matchingTrackAndActions, matchingTracksEventArgs, matchingQuotedTrackAndActions); UpdateMatchesBasedOnUrlEntities(tweet, matchOn, matchingTrackAndActions, matchingTracksEventArgs, matchingQuotedTrackAndActions); UpdateMatchesBasedOnHashTagEntities(tweet, matchOn, matchingTrackAndActions, matchingTracksEventArgs, matchingQuotedTrackAndActions); UpdateMatchesBasedOnUserMentions(tweet, matchOn, matchingTrackAndActions, matchingTracksEventArgs, matchingQuotedTrackAndActions); UpdateMatchesBasedOnTweetLocation(tweet, matchOn, matchingLocationsAndActions, matchingTracksEventArgs, matchingQuotedLocationsAndActions); UpdateMatchesBasedOnTweetCreator(tweet, matchOn, matchingFollowersAndActions, matchingTracksEventArgs, matchingQuotedFollowersAndActions); UpdateMatchesBasedOnTweetInReplyToUser(tweet, matchOn, matchingFollowersAndActions, matchingTracksEventArgs, matchingQuotedFollowersAndActions); var matchingTracks = matchingTrackAndActions.Select(x => x.Key).ToArray(); var matchingLocations = matchingLocationsAndActions.Select(x => x.Key).ToArray(); var matchingFollowers = matchingFollowersAndActions.Select(x => x.Key).ToArray(); matchingTracksEventArgs.MatchingTracks = matchingTracks; matchingTracksEventArgs.MatchingLocations = matchingLocations; matchingTracksEventArgs.MatchingFollowers = matchingFollowers; var matchingQuotedTracks = matchingQuotedTrackAndActions.Select(x => x.Key).ToArray(); var matchingQuotedLocations = matchingQuotedLocationsAndActions.Select(x => x.Key).ToArray(); var matchingQuotedFollowers = matchingQuotedFollowersAndActions.Select(x => x.Key).ToArray(); matchingTracksEventArgs.QuotedTweetMatchingTracks = matchingQuotedTracks; matchingTracksEventArgs.QuotedTweetMatchingLocations = matchingQuotedLocations; matchingTracksEventArgs.QuotedTweetMatchingFollowers = matchingQuotedFollowers; var allMatchingTracks = matchingTrackAndActions.MergeWith(matchingQuotedTrackAndActions); var allMatchingLocations = matchingLocationsAndActions.MergeWith(matchingQuotedLocationsAndActions); var allMatchingFollowers = matchingFollowersAndActions.MergeWith(matchingQuotedFollowersAndActions); CallMultipleActions(tweet, allMatchingTracks.Select(x => x.Value)); CallMultipleActions(tweet, allMatchingLocations.Select(x => x.Value)); CallMultipleActions(tweet, allMatchingFollowers.Select(x => x.Value)); return(matchingTracksEventArgs); }
private void UpdateMatchesBasedOnUrlEntities( ITweet tweet, MatchOn matchOn, Dictionary <string, Action <ITweet> > matchingTrackAndActions, MatchedTweetReceivedEventArgs matchingTracksEventArgs, Dictionary <string, Action <ITweet> > matchingQuotedTrackAndActions) { if (matchOn.HasFlag(MatchOn.Everything) || matchOn.HasFlag(MatchOn.AllEntities) || matchOn.HasFlag(MatchOn.URLEntities)) { var expandedURLs = tweet.Entities.Urls.Select(x => x.ExpandedURL); expandedURLs = expandedURLs.Union(tweet.Entities.Medias.Select(x => x.ExpandedURL)); expandedURLs.ForEach(x => { var tracksMatchingExpandedURL = _streamTrackManager.GetMatchingTracksAndActions(x); tracksMatchingExpandedURL.ForEach(t => { matchingTrackAndActions.TryAdd(t.Item1, t.Item2); }); if (tracksMatchingExpandedURL.Count > 0) { matchingTracksEventArgs.MatchOn |= MatchOn.URLEntities; } }); var displayedURLs = tweet.Entities.Urls.Select(x => x.DisplayedURL); displayedURLs = displayedURLs.Union(tweet.Entities.Medias.Select(x => x.DisplayURL)); displayedURLs.ForEach(x => { var tracksMatchingDisplayedURL = _streamTrackManager.GetMatchingTracksAndActions(x); tracksMatchingDisplayedURL.ForEach(t => { matchingTrackAndActions.TryAdd(t.Item1, t.Item2); }); if (tracksMatchingDisplayedURL.Count > 0) { matchingTracksEventArgs.MatchOn |= MatchOn.URLEntities; } }); if (tweet.QuotedTweet != null) { var quotedTweetExpandedURLs = tweet.QuotedTweet.Entities.Urls.Select(x => x.ExpandedURL); quotedTweetExpandedURLs = quotedTweetExpandedURLs.Union(tweet.QuotedTweet.Entities.Medias.Select(x => x.ExpandedURL)); quotedTweetExpandedURLs.ForEach(x => { var tracksMatchingExpandedURL = _streamTrackManager.GetMatchingTracksAndActions(x); tracksMatchingExpandedURL.ForEach(t => { matchingQuotedTrackAndActions.TryAdd(t.Item1, t.Item2); }); if (tracksMatchingExpandedURL.Count > 0) { matchingTracksEventArgs.QuotedTweetMatchOn |= MatchOn.URLEntities; } }); var quotedTweetDisplayedURLs = tweet.QuotedTweet.Entities.Urls.Select(x => x.DisplayedURL); quotedTweetDisplayedURLs = quotedTweetDisplayedURLs.Union(tweet.QuotedTweet.Entities.Medias.Select(x => x.DisplayURL)); quotedTweetDisplayedURLs.ForEach(x => { var tracksMatchingDisplayedURL = _streamTrackManager.GetMatchingTracksAndActions(x); tracksMatchingDisplayedURL.ForEach(t => { matchingQuotedTrackAndActions.TryAdd(t.Item1, t.Item2); }); if (tracksMatchingDisplayedURL.Count > 0) { matchingTracksEventArgs.QuotedTweetMatchOn |= MatchOn.URLEntities; } }); } } }
private MatchedTweetReceivedEventArgs GetMatchingTweetEventArgsAndRaiseMatchingElements(ITweet tweet, string json) { var matchingTracksEventArgs = new MatchedTweetReceivedEventArgs(tweet, json); var matchingTrackAndActions = new Dictionary <string, Action <ITweet> >(); var matchingLocationAndActions = new Dictionary <ILocation, Action <ITweet> >(); var matchingFollowersAndActions = new Dictionary <long, Action <ITweet> >(); if (MatchOn.HasFlag(MatchOn.Everything) || MatchOn.HasFlag(MatchOn.TweetText)) { var tracksMatchingTweetText = _streamTrackManager.GetMatchingTracksAndActions(tweet.FullText); tracksMatchingTweetText.ForEach(x => { matchingTrackAndActions.TryAdd(x.Item1, x.Item2); }); if (tracksMatchingTweetText.Count > 0) { matchingTracksEventArgs.MatchOn |= MatchOn.TweetText; } } if (MatchOn.HasFlag(MatchOn.Everything) || MatchOn.HasFlag(MatchOn.AllEntities) || MatchOn.HasFlag(MatchOn.URLEntities)) { var expandedURLs = tweet.Entities.Urls.Select(x => x.ExpandedURL); expandedURLs = expandedURLs.Union(tweet.Entities.Medias.Select(x => x.ExpandedURL)); expandedURLs.ForEach(x => { var tracksMatchingExpandedURL = _streamTrackManager.GetMatchingTracksAndActions(x); tracksMatchingExpandedURL.ForEach(t => { matchingTrackAndActions.TryAdd(t.Item1, t.Item2); }); if (tracksMatchingExpandedURL.Count > 0) { matchingTracksEventArgs.MatchOn |= MatchOn.URLEntities; } }); var displayedURLs = tweet.Entities.Urls.Select(x => x.DisplayedURL); displayedURLs = displayedURLs.Union(tweet.Entities.Medias.Select(x => x.DisplayURL)); displayedURLs.ForEach(x => { var tracksMatchingDisplayedURL = _streamTrackManager.GetMatchingTracksAndActions(x); tracksMatchingDisplayedURL.ForEach(t => { matchingTrackAndActions.TryAdd(t.Item1, t.Item2); }); if (tracksMatchingDisplayedURL.Count > 0) { matchingTracksEventArgs.MatchOn |= MatchOn.URLEntities; } }); } if (MatchOn.HasFlag(MatchOn.Everything) || MatchOn.HasFlag(MatchOn.AllEntities) || MatchOn.HasFlag(MatchOn.HashTagEntities)) { var hashTags = tweet.Entities.Hashtags.Select(x => x.Text); hashTags.ForEach(x => { var tracksMatchingHashTag = _streamTrackManager.GetMatchingTracksAndActions(x); tracksMatchingHashTag.ForEach(t => { matchingTrackAndActions.TryAdd(t.Item1, t.Item2); }); if (tracksMatchingHashTag.Count > 0) { matchingTracksEventArgs.MatchOn |= MatchOn.HashTagEntities; } }); } if (MatchOn.HasFlag(MatchOn.Everything) || MatchOn.HasFlag(MatchOn.AllEntities) || MatchOn.HasFlag(MatchOn.UserMentionEntities)) { var mentionsScreenName = tweet.Entities.UserMentions.Select(x => x.ScreenName); mentionsScreenName.ForEach(x => { var tracksMatchingMentionScreenName = _streamTrackManager.GetMatchingTracksAndActions(x); tracksMatchingMentionScreenName.ForEach(t => { matchingTrackAndActions.TryAdd(t.Item1, t.Item2); }); if (tracksMatchingMentionScreenName.Count > 0) { matchingTracksEventArgs.MatchOn |= MatchOn.UserMentionEntities; } }); } if (MatchOn.HasFlag(MatchOn.Everything) || MatchOn.HasFlag(MatchOn.TweetLocation)) { var matchedLocations = GetMatchedLocations(tweet).ToArray(); matchedLocations.ForEach(x => { matchingLocationAndActions.TryAdd(x.Key, x.Value); }); if (matchedLocations.Length > 0) { matchingTracksEventArgs.MatchOn |= MatchOn.TweetLocation; } } if (MatchOn.HasFlag(MatchOn.Everything) || MatchOn.HasFlag(MatchOn.Follower)) { var userId = tweet.CreatedBy?.Id; Action <ITweet> actionToExecuteWhenMatchingFollower; if (userId != null && _followingUserIds.TryGetValue(userId, out actionToExecuteWhenMatchingFollower)) { matchingFollowersAndActions.TryAdd(userId.Value, actionToExecuteWhenMatchingFollower); matchingTracksEventArgs.MatchOn |= MatchOn.Follower; } } if (MatchOn.HasFlag(MatchOn.Everything) || MatchOn.HasFlag(MatchOn.FollowerInReplyTo)) { var userId = tweet.InReplyToUserId; Action <ITweet> actionToExecuteWhenMatchingFollower; if (userId != null && _followingUserIds.TryGetValue(userId, out actionToExecuteWhenMatchingFollower)) { matchingFollowersAndActions.TryAdd(userId.Value, actionToExecuteWhenMatchingFollower); matchingTracksEventArgs.MatchOn |= MatchOn.FollowerInReplyTo; } } var matchingTracks = matchingTrackAndActions.Select(x => x.Key).ToArray(); var matchingLocations = matchingLocationAndActions.Select(x => x.Key).ToArray(); var matchingFollowers = matchingFollowersAndActions.Select(x => x.Key).ToArray(); matchingTracksEventArgs.MatchingTracks = matchingTracks; matchingTracksEventArgs.MatchingLocations = matchingLocations; matchingTracksEventArgs.MatchingFollowers = matchingFollowers; CallMultipleActions(tweet, matchingTrackAndActions.Select(x => x.Value)); CallMultipleActions(tweet, matchingLocationAndActions.Select(x => x.Value)); CallMultipleActions(tweet, matchingFollowersAndActions.Select(x => x.Value)); return(matchingTracksEventArgs); }