public void SendFriendsPacket(StreamingConnection connection) { Task.Factory.StartNew(() => { var GetFriendsPacket = new PacketFriends { Friends = this.GetFriendsPacket(), }; connection.SendToStream(GetFriendsPacket); }); }
public void RemoveStream(StreamingConnection connection) { lock (this.m_connections) { var befCount = this.m_connections.Count; this.m_connections.Remove(connection); if (befCount == 1) { this.StopTimeLine(); } } }
public void AddConnection(StreamingConnection connection) { this.SendFriendsPacket(connection); lock (this.m_connections) { var befCount = this.m_connections.Count; this.m_connections.Add(connection); if (befCount == 0) { this.StartTimeLine(); } } }
private bool HostStreaming(ProxyContext ctx) { var desc = $"{ctx.Request.RequestUri}"; Debug.WriteLine($"streaming connected : {desc}"); if (!ctx.Request.RequestUri.AbsolutePath.Equals("/1.1/user.json", StringComparison.OrdinalIgnoreCase)) { ctx.Response.StatusCode = HttpStatusCode.NotFound; return(true); } if (!TryGetOwnerId(ctx.Request.RequestUri, ctx.Request.Headers, null, out var ownerId)) { ctx.Response.StatusCode = HttpStatusCode.Unauthorized; return(true); } var twitterClient = TwitterClientFactory.GetClient(ownerId); if (twitterClient == null) { ctx.Response.StatusCode = HttpStatusCode.Unauthorized; return(true); } ctx.Response.StatusCode = HttpStatusCode.OK; ctx.Response.Headers.Set("Content-type", "application/json; charset=utf-8"); ctx.Response.Headers.Set("Connection", "close"); ctx.Response.SetChunked(); using (var sc = new StreamingConnection(new WaitableStream(ctx.Response.ResponseStream), twitterClient)) { twitterClient.AddConnection(sc); sc.Stream.WaitHandle.WaitOne(); twitterClient.RemoveStream(sc); } Debug.WriteLine($"streaming disconnected : {desc}"); return(true); }