public async Task ProcessTweetsAsync() { List <TweetModel> tweetsToProcess = new List <TweetModel>(); try { if (this.GetStreamStateAsync().Result == StreamStateEnum.Running) { tweetsToProcess = TweetMapper.MapTweets(Tweets.GetRange(0, Tweets.Count)); if (tweetsToProcess != null && tweetsToProcess.Count > 0) { Tweets.RemoveRange(0, tweetsToProcess.Count); List <Task> tasks = new List <Task>(); tasks.Add(ProcessEmojisAsync(tweetsToProcess)); tasks.Add(ProcessHashTagsAsync(tweetsToProcess)); tasks.Add(SaveStatisticsAsync(tweetsToProcess)); tasks.Add(SaveTweetsAsync(tweetsToProcess)); tasks.Add(PrintStatisticsAsync()); Task.WaitAll(tasks.ToArray()); } } } catch (Exception ex) { Logger.LogError(ex, "Error at ProcessTweets", null); } }
public async Task Handle(StartCatchUp message, IMessageHandlerContext context) { ColorConsole.WriteLine( "Catching up on".Gray(), " ", $" {message.Track} ".DarkCyan().OnWhite(), " ", "tweets since tweet".Gray(), " ", $"{message.TweetId}".White()); var count = 0; foreach (var analyzeTweet in this.tweetService.Get(message.Track, message.TweetId).Select(tweet => TweetMapper.Map(tweet, message.Track))) { ++count; Writer.Write(analyzeTweet.Tweet); await context.Send(analyzeTweet) .ConfigureAwait(false); } ColorConsole.WriteLine( "Found".Gray(), " ", $"{count:N0}".White(), " ", $" {message.Track} ".DarkCyan().OnWhite(), " ", $"tweet{(count == 1 ? "" : "s")} since tweet".Gray(), " ", $"{message.TweetId}".White()); }
public static async Task StartAsync( IEndpointInstance endpointInstance, string track, string consumerKey, string consumerSecret, string accessToken, string accessTokenSecret) { var credentials = new TwitterCredentials(consumerKey, consumerSecret, accessToken, accessTokenSecret); while (true) { try { var stream = Stream.CreateFilteredStream(credentials); stream.AddTrack(track); var sessionId = Guid.NewGuid(); stream.StreamStarted += (sender, args) => { sessionId = Guid.NewGuid(); ColorConsole.WriteLine( $"{DateTime.UtcNow.ToLocalTime()}".DarkGray(), " ", $" {track} ".DarkCyan().OnWhite(), " ", "stream started with session ID".Gray(), " ", $"{sessionId}".White()); }; stream.StreamStopped += (sender, args) => ColorConsole.WriteLine( $"{DateTime.UtcNow.ToLocalTime()} ".DarkGray(), $" {track} ".DarkCyan().OnWhite(), " stream stopped.".Red(), args.Exception == null ? string.Empty : $" {args.Exception.Message}".DarkRed()); stream.MatchingTweetReceived += async(sender, e) => { var analyzeTweet = TweetMapper.Map(e.Tweet, track); Writer.Write(analyzeTweet.Tweet); await endpointInstance.Send(analyzeTweet) .ConfigureAwait(false); var tweetReceived = new TweetReceived() { SessionId = sessionId, Track = track, TweetId = e.Tweet.Id }; await endpointInstance.Publish(tweetReceived) .ConfigureAwait(false); }; await stream.StartStreamMatchingAnyConditionAsync(); } catch (Exception ex) { ColorConsole.WriteLine($"{DateTime.UtcNow.ToLocalTime()} ".DarkGray(), "Error listening to Twitter stream.".Red(), $" {ex.Message}".DarkRed()); Thread.Sleep(1000); } } }