private void ProcessMessages()
{
Task.Factory.StartNew(ReadLines, CancelStream.Token);
readLinesObservable.Subscribe(line =>
{
#region Main Observer work here
#if (DEBUG)
Debug.WriteLine(line);
#endif
#if (TRACE)
if (line == "ENDBOXKITEUSERSTREAMTEST")
{
Stop();
}
#endif
if (string.IsNullOrWhiteSpace(line)) return;
var obj = JsonConvert.DeserializeObject<JObject>(line);
//https://dev.twitter.com/docs/streaming-apis/messages
if (obj["direct_message"] != null)
{
_directmessages.OnNext(MapFromStreamTo<DirectMessage>(obj["direct_message"].ToString()));
return;
}
if (obj["in_reply_to_user_id"] != null)
{
_tweets.OnNext(MapFromStreamTo<Tweet>(obj.ToString()));
return;
}
if (obj["friends"] != null)
{
SendFriendsMessage(obj["friends"].Values<long>());
return;
}
// source: https://dev.twitter.com/docs/streaming-apis/messages#Events_event
if (obj["event"] != null)
{
_events.OnNext(MapFromEventInStream(obj));
return;
}
if (obj["scrub_geo"] != null)
{
_scrubgeorequests.OnNext(MapFromStreamTo<StreamScrubGeo>(obj["scrub_geo"].ToString()));
return;
}
if (obj["limit"] != null)
{
_limitnotices.OnNext(MapFromStreamTo<StreamLimitNotice>(obj["limit"].ToString()));
return;
}
if (obj["delete"] != null)
{
_deleteevents.OnNext(MapFromStreamTo<DeleteEvent>(obj["delete"].ToString()));
return;
}
if (obj["status_withheld"] != null)
{
_statuswithheld.OnNext(
MapFromStreamTo<StreamStatusWithheld>(obj["status_withheld"].ToString()));
return;
}
if (obj["user_withheld"] != null)
{
_userwithheld.OnNext(MapFromStreamTo<StreamUserWithheld>(obj["user_withheld"].ToString()));
return;
}
if (obj["disconnect"] != null)
{
MapFromStreamTo<StreamDisconnect>(obj["disconnect"].ToString());
Stop();
// check for non-hard disconnects & attempt reconnect
}
if (obj["warning"] == null) return; // no warnings, so start loop from beginning again
if (obj["warning"]["percent_full"] != null)
{
MapFromStreamTo<StreamStallWarning>(obj["warning"].ToString());
// do something something stall warning.
}
if (obj["warning"]["user_id"] != null)
{
MapFromStreamTo<StreamToManyFollowsWarning>(obj["warning"].ToString());
// do something something user follows warning this is pretty final, actually.
Stop();
}
#endregion
});
}