Esempio n. 1
0
        /// <summary>
        /// Connect to user streams.
        /// </summary>
        /// <param name="accessor">API access preference</param>
        /// <param name="parser">Line handler</param>
        /// <param name="readTimeout">stream read timeout</param>
        /// <param name="cancellationToken">cancellation token object</param>
        /// <param name="tracksOrNull">tracks parameter(can be null)</param>
        /// <param name="stallWarnings">request stall warnings</param>
        /// <param name="filterLevel">stream filtering level</param>
        /// <param name="repliesAll">repliesAll parameter</param>
        /// <param name="followingsActivity">include_followings_activity parameter</param>
        /// <returns></returns>
        public static Task ConnectAsync([NotNull] IApiAccessor accessor,
                                        [NotNull] Action <string> parser, TimeSpan readTimeout, CancellationToken cancellationToken,
                                        [CanBeNull] IEnumerable <string> tracksOrNull = null, bool stallWarnings = false,
                                        StreamFilterLevel filterLevel = StreamFilterLevel.None,
                                        bool repliesAll = false, bool followingsActivity = false)
        {
            if (accessor == null)
            {
                throw new ArgumentNullException(nameof(accessor));
            }
            if (parser == null)
            {
                throw new ArgumentNullException(nameof(parser));
            }

            // remove empty string and remove duplicates, concatenate strings
            var filteredTracks = tracksOrNull?.Select(t => t?.Trim())
                                 .Where(t => !String.IsNullOrEmpty(t))
                                 .Distinct()
                                 .JoinString(",");
            // build parameter
            var param = new Dictionary <string, object>
            {
                { "track", String.IsNullOrEmpty(filteredTracks) ? null : filteredTracks },
                { "stall_warnings", stallWarnings ? "true" : null },
                { "filter_level", filterLevel == StreamFilterLevel.None ? null : filterLevel.ToParamString() },
                { "replies", repliesAll ? "all" : null },
                { "include_followings_activity", followingsActivity ? "true" : null }
            };

            // begin connection
            return(accessor.ConnectStreamAsync("user.json", param,
                                               stream => StreamWinder.Run(stream, parser, readTimeout, cancellationToken),
                                               cancellationToken));
        }