Пример #1
0
        public void SendFriendsPacket(StreamingConnection connection)
        {
            Task.Factory.StartNew(() =>
            {
                var GetFriendsPacket = new PacketFriends
                {
                    Friends = this.GetFriendsPacket(),
                };

                connection.SendToStream(GetFriendsPacket);
            });
        }
Пример #2
0
        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();
                }
            }
        }
Пример #3
0
        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();
                }
            }
        }
Пример #4
0
        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);
        }