static async Task DoControlStreamAsync(TwitterContext twitterCtx) { var evt = new ManualResetEventSlim(false); string streamID = string.Empty; Task.Run(async () => { Console.WriteLine("\nStreamed Content: \n"); int count = 0; var cancelTokenSrc = new CancellationTokenSource(); try { await (from strm in twitterCtx.Streaming where strm.Type == StreamingType.Site && strm.Follow == "15411837,16761255" select strm) .WithCancellation(cancelTokenSrc.Token) .StartAsync(async strm => { if (string.IsNullOrEmpty(strm.Content)) Console.WriteLine("Keep-Alive"); else HandleStreamResponse(strm); if (strm.EntityType == StreamEntityType.Control) { var control = strm.Entity as Control; streamID = control.URL.Replace("/1.1/site/c/", ""); evt.Set(); } if (count++ == 25) cancelTokenSrc.Cancel(); }); } catch (OperationCanceledException) { Console.WriteLine("Stream cancelled."); } }); evt.Wait(); Console.WriteLine("Follower Details:\n"); var ctrlStrmFollowers = await (from strm in twitterCtx.ControlStream where strm.Type == ControlStreamType.Followers && strm.UserID == 15411837 && strm.StreamID == streamID select strm) .SingleOrDefaultAsync(); if (ctrlStrmFollowers != null) { ControlStreamFollow follow = ctrlStrmFollowers.Follow; ControlStreamUser followUser = follow.User; List<ulong> friends = follow.Friends; Cursors cursors = follow.Cursors; Console.WriteLine("User ID: " + followUser.UserID); Console.WriteLine("User Name: " + followUser.Name); Console.WriteLine("Can DM: " + followUser.DM); friends.ForEach(friend => Console.WriteLine(friend)); Console.WriteLine("Prev Cursor: " + cursors.Previous); Console.WriteLine("Next Cursor: " + cursors.Next); Console.WriteLine("Info Details:\n"); } var ctrlStrmInfo = (from strm in twitterCtx.ControlStream where strm.Type == ControlStreamType.Info && strm.StreamID == streamID select strm) .SingleOrDefault(); if (ctrlStrmInfo != null) { ControlStreamInfo infoUser = ctrlStrmInfo.Info; ControlStreamUser user = infoUser.Users.First(); Console.WriteLine("User ID: " + user.UserID); Console.WriteLine("User Name: " + user.Name); Console.WriteLine("Can DM: " + user.DM); Console.WriteLine("Delimited: " + infoUser.Delimited); Console.WriteLine("Include Followings Acitity: " + infoUser.IncludeFollowingsActivity); Console.WriteLine("Include User Changes: " + infoUser.IncludeUserChanges); Console.WriteLine("Replies: " + infoUser.Replies); Console.WriteLine("With: " + infoUser.With); Console.WriteLine("\nInitial Stream Users: "); await PrintUserInfoAsync(twitterCtx, streamID); ControlStream csAdd = await twitterCtx.AddSiteStreamUserAsync(new List<ulong> { 16761255 }, streamID); Console.WriteLine("Command Response: " + csAdd.CommandResponse); Console.WriteLine("\nAfter Adding a User: "******"Command Response: " + csRemove.CommandResponse); Console.WriteLine("\nAfter Removing a User: "); await PrintUserInfoAsync(twitterCtx, streamID); } }