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); } } }