Ejemplo n.º 1
0
        /// <summary>
        /// Starts the Twitter stream.
        /// </summary>
        /// <param name="type">Type of streaming.</param>
        /// <param name="parameters">The parameters of streaming.</param>
        /// <returns>The stream messages.</returns>
        public IEnumerable <StreamingMessage> StartStream(StreamingType type, StreamingParameters parameters = null)
        {
            if (parameters == null)
            {
                parameters = new StreamingParameters();
            }

            var url = type == StreamingType.User ? "https://userstream.twitter.com/1.1/user.json" :
                      type == StreamingType.Site ? " https://sitestream.twitter.com/1.1/site.json " :
                      type == StreamingType.Filter ? "https://stream.twitter.com/1.1/statuses/filter.json" :
                      type == StreamingType.Sample ? "https://stream.twitter.com/1.1/statuses/sample.json" :
                      type == StreamingType.Firehose ? "https://stream.twitter.com/1.1/statuses/firehose.json" : "";

            var str = this.Connect(parameters, type == StreamingType.Filter ? MethodType.Post : MethodType.Get, url)
                      .Where(x => !string.IsNullOrEmpty(x));

            foreach (var s in str)
            {
                StreamingMessage m;
#if !DEBUG
                try
                {
#endif
                m = StreamingMessage.Parse(s);
#if !DEBUG
            }
            catch
            {
                m = RawJsonMessage.Create(s);
            }
#endif
                yield return(m);
            }
        }
Ejemplo n.º 2
0
 internal static EnvelopesMessage Parse(JObject j)
 {
     return(new EnvelopesMessage()
     {
         ForUser = (long)j["for_user"],
         Message = StreamingMessage.Parse(j["message"].ToString(Formatting.None))
     });
 }
Ejemplo n.º 3
0
        public async void Start(IObserver <StreamingMessage> observer, StreamingApi client, StreamingType type, KeyValuePair <string, object>[] parameters)
        {
            var token = this.cancel.Token;

            try
            {
                // Make sure that all the operations are run in background
                var firstTask = Task.Run(() => client.IncludedTokens.SendStreamingRequestAsync(GetMethodType(type), client.GetUrl(type), parameters, token), token);

                // Setting the buffer size is a workaround for streaming delay
                // https://github.com/CoreTweet/CoreTweet/pull/155
                using (var res = await firstTask.ConfigureAwait(false))
                    using (var reader = new StreamReader(await res.GetResponseStreamAsync().ConfigureAwait(false), Encoding.UTF8, true, 16384))
                    {
                        while (!reader.EndOfStream)
                        {
                            if (token.IsCancellationRequested)
                            {
                                return;
                            }

                            var line = await reader.ReadLineAsync().ConfigureAwait(false);

                            if (!string.IsNullOrEmpty(line))
                            {
                                StreamingMessage message;
                                try
                                {
                                    message = StreamingMessage.Parse(line);
                                }
                                catch (ParsingException ex)
                                {
                                    message = RawJsonMessage.Create(line, ex);
                                }

                                if (token.IsCancellationRequested)
                                {
                                    return;
                                }
                                observer.OnNext(message);
                            }
                        }
                    }

                observer.OnCompleted();
            }
            catch (Exception ex)
            {
                if (!token.IsCancellationRequested)
                {
                    observer.OnError(ex);
                }
            }
        }
Ejemplo n.º 4
0
        public void Start(IObserver <StreamingMessage> observer, StreamingApi client, StreamingType type, KeyValuePair <string, object>[] parameters)
        {
            var token = this.cancel.Token;

            client.IncludedTokens.SendStreamingRequestAsync(GetMethodType(type), client.GetUrl(type), parameters, token)
            .Done(res => res.GetResponseStreamAsync(), token)
            .Unwrap()
            .Done(stream =>
            {
                using (var reader = new StreamReader(stream))
                    using (token.Register(reader.Dispose))
                    {
                        foreach (var s in reader.EnumerateLines().Where(x => !string.IsNullOrEmpty(x)))
                        {
                            try
                            {
                                observer.OnNext(StreamingMessage.Parse(s));
                            }
                            catch (ParsingException ex)
                            {
                                observer.OnNext(RawJsonMessage.Create(s, ex));
                            }
                        }
                    }
                observer.OnCompleted();
            }, token, true)
            .ContinueWith(t =>
            {
                if (!token.IsCancellationRequested)
                {
                    if (t.Exception != null)
                    {
                        observer.OnError(t.Exception.InnerExceptions.Count == 1 ? t.Exception.InnerException : t.Exception);
                    }
                    else if (t.IsCanceled)
                    {
                        observer.OnError(new TaskCanceledException(t));
                    }
                }
            });
        }
Ejemplo n.º 5
0
 private static IEnumerable <StreamingMessage> EnumerateMessages(Stream stream)
 {
     using (var reader = new StreamReader(stream))
     {
         foreach (var s in reader.EnumerateLines())
         {
             if (!string.IsNullOrEmpty(s))
             {
                 StreamingMessage m;
                 try
                 {
                     m = StreamingMessage.Parse(s);
                 }
                 catch (ParsingException ex)
                 {
                     m = RawJsonMessage.Create(s, ex);
                 }
                 yield return(m);
             }
         }
     }
 }