static async Task PrintUserInfoAsync(TwitterContext twitterCtx, string streamID) { var ctrlStrm = await (from strm in twitterCtx.ControlStream where strm.Type == ControlStreamType.Info && strm.StreamID == streamID select strm) .SingleOrDefaultAsync(); if (ctrlStrm != null && ctrlStrm.Info != null && ctrlStrm.Info.Users != null) { Console.WriteLine("\nInfo Details:\n"); ControlStreamInfo info = ctrlStrm.Info; foreach (var user in info.Users) { Console.WriteLine("User ID: {0}, Name: {1}", user.UserID, user.Name); } Console.WriteLine(); } }
static void PrintUserInfo(TwitterContext twitterCtx, string streamID) { var ctrlStrm = (from strm in twitterCtx.ControlStream where strm.Type == ControlStreamType.Info && strm.StreamID == streamID select strm) .SingleOrDefault(); Console.WriteLine("\nInfo Details:\n"); ControlStreamInfo info = ctrlStrm.Info; foreach (var user in info.Users) { Console.WriteLine("User ID: {0}, Name: {1}", user.UserID, user.Name); } Console.WriteLine(); }
static async Task DoControlStreamAsync(TwitterContext twitterCtx) { var evt = new ManualResetEventSlim(false); string streamID = string.Empty; await 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 { await 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 (IOException ex) { // Twitter might have closed the stream, // which they do sometimes. You should // restart the stream, but be sure to // read Twitter documentation on stream // back-off strategies to prevent your // app from being blocked. Console.WriteLine(ex.ToString()); } 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); } }
static void ControlStreamsInfoDemo(TwitterContext twitterCtx) { var evt = new ManualResetEventSlim(false); string streamID = string.Empty; Console.WriteLine("\nStreamed Content: \n"); int count = 0; (from strm in twitterCtx.UserStream where strm.Type == UserStreamType.Site && //strm.With == "followings" && strm.Follow == "15411837" /*, "16761255"*/ select strm) .StreamingCallback(strm => { if (strm.Status == TwitterErrorStatus.RequestProcessingException) { Console.WriteLine(strm.Error.ToString()); return; } Console.WriteLine(strm.Content + "\n"); var json = JsonMapper.ToObject(strm.Content); var jsonDict = json as IDictionary <string, JsonData>; if (jsonDict != null && jsonDict.ContainsKey("control")) { streamID = json["control"]["control_uri"].ToString().Replace("/1.1/site/c/", ""); evt.Set(); } if (count++ >= 10) { Console.WriteLine("Closing stream..."); strm.CloseStream(); } }) .SingleOrDefault(); evt.Wait(); Console.WriteLine("Info Details:\n"); var ctrlStrm = (from strm in twitterCtx.ControlStream where strm.Type == ControlStreamType.Info && strm.StreamID == streamID select strm) .SingleOrDefault(); ControlStreamInfo info = ctrlStrm.Info; ControlStreamUser user = info.Users.First(); Console.WriteLine("User ID: " + user.UserID); Console.WriteLine("User Name: " + user.Name); Console.WriteLine("Can DM: " + user.DM); Console.WriteLine("Delimited: " + info.Delimited); Console.WriteLine("Include Followings Acitity: " + info.IncludeFollowingsActivity); Console.WriteLine("Include User Changes: " + info.IncludeUserChanges); Console.WriteLine("Replies: " + info.Replies); Console.WriteLine("With: " + info.With); }