Beispiel #1
0
        private static void HandleSignal(string messagetType, ByteString payload)
        {
            switch (messagetType)
            {
            // Includes comment, gift, enter room, like, follower
            case PushMessage.ACTION_SIGNAL:
                var actionSignal = ZtLiveScActionSignal.Parser.ParseFrom(payload);
                foreach (var item in actionSignal.Item)
                {
                    switch (item.SignalType)
                    {
                    case PushMessage.ActionSignal.COMMENT:
                        foreach (var pl in item.Payload)
                        {
                            var comment = CommonActionSignalComment.Parser.ParseFrom(pl);
                            SendMessage(MessageType.Comment, new Comment {
                                Name = comment.UserInfo.Nickname, Content = comment.Content
                            });
                        }
                        break;

                    case PushMessage.ActionSignal.LIKE:
                        if (config.ShowLike)
                        {
                            foreach (var pl in item.Payload)
                            {
                                var like = CommonActionSignalLike.Parser.ParseFrom(pl);
                                SendMessage(MessageType.Like, new Like {
                                    Name = like.UserInfo.Nickname
                                });
                            }
                        }
                        break;

                    case PushMessage.ActionSignal.ENTER_ROOM:
                        if (config.ShowEnter)
                        {
                            foreach (var pl in item.Payload)
                            {
                                var enter = CommonActionSignalUserEnterRoom.Parser.ParseFrom(pl);
                                SendMessage(MessageType.Enter, new Enter {
                                    Name = enter.UserInfo.Nickname
                                });
                            }
                        }
                        break;

                    case PushMessage.ActionSignal.FOLLOW:
                        if (config.ShowFollow)
                        {
                            foreach (var pl in item.Payload)
                            {
                                var follow = CommonActionSignalUserFollowAuthor.Parser.ParseFrom(pl);
                                SendMessage(MessageType.Follow, new Follow {
                                    Name = follow.UserInfo.Nickname
                                });
                            }
                        }
                        break;

                    case PushMessage.ActionSignal.THROW_BANANA:
                        //foreach (var pl in item.Payload)
                        //{
                        //    var banana = AcfunActionSignalThrowBanana.Parser.ParseFrom(pl);
                        //    UpdateDanmaku(new Banana { Name = banana.Visitor.Name, Count = banana.Count });
                        //}
                        break;

                    case PushMessage.ActionSignal.GIFT:
                        foreach (var pl in item.Payload)
                        {
                            var gift = CommonActionSignalGift.Parser.ParseFrom(pl);
                            if (!config.GiftList.Contains(gift.GiftId))
                            {
                                var info = Client.Gifts[gift.GiftId];
                                SendMessage(MessageType.Gift, new Gift {
                                    Name = gift.User.Nickname, ComboId = gift.ComboId, Count = gift.Count, Value = gift.Value, Combo = gift.Combo, Detail = info
                                });
                            }
                        }
                        break;

                    default:
                        break;
                    }
                }
                break;

            //Includes current banana counts, watching count, like count and top 3 users sent gifts
            case PushMessage.STATE_SIGNAL:
                ZtLiveScStateSignal signal = ZtLiveScStateSignal.Parser.ParseFrom(payload);

                foreach (var item in signal.Item)
                {
                    switch (item.SignalType)
                    {
                    case PushMessage.StateSignal.ACFUN_DISPLAY_INFO:
                        //var acInfo = AcfunStateSignalDisplayInfo.Parser.ParseFrom(item.Payload);
                        //Console.WriteLine("Current banada count: {0}", acInfo.BananaCount);
                        break;

                    case PushMessage.StateSignal.DISPLAY_INFO:
                        //var stateInfo = CommonStateSignalDisplayInfo.Parser.ParseFrom(item.Payload);
                        //Console.WriteLine("{0} watching, {1} likes", stateInfo.WatchingCount, stateInfo.LikeCount);
                        break;

                    case PushMessage.StateSignal.TOP_USRES:
                        //var users = CommonStateSignalTopUsers.Parser.ParseFrom(item.Payload);
                        //Console.WriteLine("Top 3 users: {0}", string.Join(", ", users.User.Select(user => user.Detail.Name)));
                        break;

                    case PushMessage.StateSignal.RECENT_COMMENT:
                        var comments = CommonStateSignalRecentComment.Parser.ParseFrom(item.Payload);
                        foreach (var comment in comments.Comment)
                        {
                            SendMessage(MessageType.Comment, new Comment {
                                Name = comment.UserInfo.Nickname, Content = comment.Content
                            });
                        }
                        break;

                    default:
                        //                            var pi = Parse(item.SignalType, item.Payload);
                        //#if DEBUG
                        //                            Console.WriteLine("Unhandled state type: {0}, content: {1}", item.SignalType, pi);
                        //#endif
                        break;
                    }
                }
                break;
            }
        }
Beispiel #2
0
        static void HandleSignal(string messagetType, byte[] payload)
        {
            switch (messagetType)
            {
            // Includes comment, gift, enter room, like, follower
            case PushMessage.ACTION_SIGNAL:
                var actionSignal = ZtLiveScActionSignal.Parser.ParseFrom(payload);

                foreach (var item in actionSignal.Item)
                {
                    switch (item.SingalType)
                    {
                    case PushMessage.ActionSignal.COMMENT:
                        foreach (var pl in item.Payload)
                        {
                            var comment = CommonActionSignalComment.Parser.ParseFrom(pl);
                            Console.WriteLine("{0} - {1}({2}): {3}", comment.SendTimeMs, comment.UserInfo.Nickname, comment.UserInfo.UserId, comment.Content);
                        }
                        break;

                    case PushMessage.ActionSignal.LIKE:
                        foreach (var pl in item.Payload)
                        {
                            var like = CommonActionSignalLike.Parser.ParseFrom(pl);
                            Console.WriteLine("{0} - {1}({2}) liked", like.SendTimeMs, like.UserInfo.Nickname, like.UserInfo.UserId);
                        }
                        break;

                    case PushMessage.ActionSignal.ENTER_ROOM:
                        foreach (var pl in item.Payload)
                        {
                            var enter = CommonActionSignalUserEnterRoom.Parser.ParseFrom(pl);
                            Console.WriteLine("{0} - {1}({2}) entered", enter.SendTimeMs, enter.UserInfo.Nickname, enter.UserInfo.UserId);
                        }
                        break;

                    case PushMessage.ActionSignal.FOLLOW:
                        foreach (var pl in item.Payload)
                        {
                            var follower = CommonActionSignalUserFollowAuthor.Parser.ParseFrom(pl);
                            Console.WriteLine("{0} - {1}({2} followed", follower.SendTimeMs, follower.UserInfo.Nickname, follower.UserInfo.UserId);
                        }
                        break;

                    case PushMessage.ActionSignal.KICKED_OUT:
                    case PushMessage.ActionSignal.VIOLATION_ALERT:
                        break;

                    case PushMessage.ActionSignal.THROW_BANANA:
                        foreach (var pl in item.Payload)
                        {
                            var enter = AcfunActionSignalThrowBanana.Parser.ParseFrom(pl);
                            Console.WriteLine("{0} - {1}({2}) throwed {3} banana(s)", enter.SendTimeMs, enter.Visitor.Name, enter.Visitor.UserId, enter.Count);
                        }
                        break;

                    case PushMessage.ActionSignal.GIFT:
                        foreach (var pl in item.Payload)
                        {
                            /*
                             * Item Id
                             * 1 - 香蕉
                             * 2 - 吃瓜
                             * 3 -
                             * 4 - 牛啤
                             * 5 - 手柄
                             * 6 - 魔法棒
                             * 7 - 好人卡
                             * 8 - 星蕉雨
                             * 9 - 告白
                             * 10 - 666
                             * 11 - 菜鸡
                             * 12 - 打Call
                             * 13 - 立FLAG
                             * 14 - 窜天猴
                             * 15 - AC机娘
                             * 16 - 猴岛
                             * 17 - 快乐水
                             * 18 -
                             * 19 -
                             * 20 -
                             * 21 - 生日快乐
                             * 22 - 六一快乐
                             */
                            var gift     = CommonActionSignalGift.Parser.ParseFrom(pl);
                            var giftName = Client.Gifts[gift.GiftId];
                            Console.WriteLine("{0} - {1}({2}) sent gift {3} × {4}, Combo: {5}, value: {6}", gift.SendTimeMs, gift.User.Nickname, gift.User.UserId, giftName, gift.Count, gift.Combo, gift.Value);
#if DEBUG
                            if (string.IsNullOrEmpty(giftName))
                            {
                                Console.WriteLine("ItemId: {0}, Value: {1}", gift.GiftId, gift.Value);
                            }
#endif
                        }
                        break;

                    default:
                        foreach (var p in item.Payload)
                        {
                            var pi = Parse(item.SingalType, p);
#if DEBUG
                            Console.WriteLine("Unhandled action type: {0}, content: {1}", item.SingalType, pi);
#endif
                        }
                        break;
                    }
                }
                break;

            // Includes current banana counts, watching count, like count and top 3 users sent gifts
            case PushMessage.STATE_SIGNAL:
                ZtLiveScStateSignal signal = ZtLiveScStateSignal.Parser.ParseFrom(payload);

                foreach (var item in signal.Item)
                {
                    switch (item.SingalType)
                    {
                    case PushMessage.StateSignal.ACFUN_DISPLAY_INFO:
                        var acInfo = AcfunStateSignalDisplayInfo.Parser.ParseFrom(item.Payload);
                        //Console.WriteLine("Current banada count: {0}", acInfo.BananaCount);
                        break;

                    case PushMessage.StateSignal.DISPLAY_INFO:
                        var stateInfo = CommonStateSignalDisplayInfo.Parser.ParseFrom(item.Payload);
                        //Console.WriteLine("{0} watching, {1} likes", stateInfo.WatchingCount, stateInfo.LikeCount);
                        break;

                    case PushMessage.StateSignal.TOP_USRES:
                        var users = CommonStateSignalTopUsers.Parser.ParseFrom(item.Payload);
                        //Console.WriteLine("Top 3 users: {0}", string.Join(", ", users.User.Select(user => user.Detail.Name)));
                        break;

                    case PushMessage.StateSignal.RECENT_COMMENT:
                        var comments = CommonStateSignalRecentComment.Parser.ParseFrom(item.Payload);
                        foreach (var comment in comments.Comment)
                        {
                            Console.WriteLine("{0} - {1}({2}): {3}", comment.SendTimeMs, comment.UserInfo.Nickname, comment.UserInfo.UserId, comment.Content);
                        }
                        break;

                    default:
                        var pi = Parse(item.SingalType, item.Payload);
#if DEBUG
                        Console.WriteLine("Unhandled state type: {0}, content: {1}", item.SingalType, pi);
#endif
                        break;
                    }
                }
                break;
            }
        }
Beispiel #3
0
        static void HandleSignal(string messagetType, ByteString payload)
        {
            switch (messagetType)
            {
            // Includes comment, gift, enter room, like, follower
            case PushMessage.ACTION_SIGNAL:
                var actionSignal = ZtLiveScActionSignal.Parser.ParseFrom(payload);

                foreach (var item in actionSignal.Item)
                {
                    switch (item.SignalType)
                    {
                    case PushMessage.ActionSignal.COMMENT:
                        foreach (var pl in item.Payload)
                        {
                            var comment = CommonActionSignalComment.Parser.ParseFrom(pl);
                            Log.Information("{0} - {1}({2}): {3}", comment.SendTimeMs, comment.UserInfo.Nickname, comment.UserInfo.UserId, comment.Content);
                        }
                        break;

                    case PushMessage.ActionSignal.LIKE:
                        foreach (var pl in item.Payload)
                        {
                            var like = CommonActionSignalLike.Parser.ParseFrom(pl);
                            Log.Information("{0} - {1}({2}) liked", like.SendTimeMs, like.UserInfo.Nickname, like.UserInfo.UserId);
                        }
                        break;

                    case PushMessage.ActionSignal.ENTER_ROOM:
                        foreach (var pl in item.Payload)
                        {
                            var enter = CommonActionSignalUserEnterRoom.Parser.ParseFrom(pl);
                            Log.Information("{0} - {1}({2}) entered", enter.SendTimeMs, enter.UserInfo.Nickname, enter.UserInfo.UserId);
                        }
                        break;

                    case PushMessage.ActionSignal.FOLLOW:
                        foreach (var pl in item.Payload)
                        {
                            var follower = CommonActionSignalUserFollowAuthor.Parser.ParseFrom(pl);
                            Log.Information("{0} - {1}({2}) followed", follower.SendTimeMs, follower.UserInfo.Nickname, follower.UserInfo.UserId);
                        }
                        break;

                    case PushMessage.NotifySignal.KICKED_OUT:
                    case PushMessage.NotifySignal.VIOLATION_ALERT:
                    case PushMessage.NotifySignal.LIVE_MANAGER_STATE:
                        break;

                    case PushMessage.ActionSignal.THROW_BANANA:
                        foreach (var pl in item.Payload)
                        {
                            var enter = AcfunActionSignalThrowBanana.Parser.ParseFrom(pl);
                            Log.Information("{0} - {1}({2}) throwed {3} banana(s)", enter.SendTimeMs, enter.Visitor.Name, enter.Visitor.UserId, enter.Count);
                        }
                        break;

                    case PushMessage.ActionSignal.GIFT:
                        foreach (var pl in item.Payload)
                        {
                            /*
                             * Item Id
                             * 1 - 香蕉
                             * 2 - 吃瓜
                             * 3 -
                             * 4 - 牛啤
                             * 5 - 手柄
                             * 6 - 魔法棒
                             * 7 - 好人卡
                             * 8 - 星蕉雨
                             * 9 - 告白
                             * 10 - 666
                             * 11 - 菜鸡
                             * 12 - 打Call
                             * 13 - 立FLAG
                             * 14 - 窜天猴
                             * 15 - AC机娘
                             * 16 - 猴岛
                             * 17 - 快乐水
                             * 18 -
                             * 19 -
                             * 20 -
                             * 21 - 生日快乐
                             * 22 - 六一快乐
                             * 23 -
                             * 24 -
                             * 25 -
                             * 26 -
                             * 27 -
                             * 28 -
                             * 29 - 大触
                             * 30 - 鸽鸽
                             * 31 - 金坷垃
                             * 32 - 变身腰带
                             * 33 - 情书
                             * 34 - 狗粮
                             * 35 - 氧气瓶
                             */
                            var gift = CommonActionSignalGift.Parser.ParseFrom(pl);
                            if (Client.Gifts.ContainsKey(gift.GiftId))
                            {
                                var giftInfo = Client.Gifts[gift.GiftId];
                                Log.Information("{0} - {1}({2}) sent gift {3} × {4}, Combo: {5}, value: {6}", gift.SendTimeMs, gift.User.Nickname, gift.User.UserId, giftInfo.Name, gift.Count, gift.Combo, gift.Value);
                            }
#if DEBUG
                            else
                            {
                                Log.Information("ItemId: {0}, Value: {1}", gift.GiftId, gift.Value);
                            }
#endif
                        }
                        break;

                    default:
                        foreach (var p in item.Payload)
                        {
                            var pi = Parse(item.SignalType, p);
#if DEBUG
                            Log.Information("Unhandled action type: {0}, content: {1}", item.SignalType, pi);
#endif
                        }
                        break;
                    }
                }
                break;

            // Includes current banana counts, watching count, like count and top 3 users sent gifts
            case PushMessage.STATE_SIGNAL:
                ZtLiveScStateSignal stateSignal = ZtLiveScStateSignal.Parser.ParseFrom(payload);

                foreach (var item in stateSignal.Item)
                {
                    switch (item.SignalType)
                    {
                    case PushMessage.StateSignal.ACFUN_DISPLAY_INFO:
                        var acInfo = AcfunStateSignalDisplayInfo.Parser.ParseFrom(item.Payload);
                        //Log.Information("Current banada count: {0}", acInfo.BananaCount);
                        break;

                    case PushMessage.StateSignal.DISPLAY_INFO:
                        var stateInfo = CommonStateSignalDisplayInfo.Parser.ParseFrom(item.Payload);
                        //Log.Information("{0} watching, {1} likes", stateInfo.WatchingCount, stateInfo.LikeCount);
                        break;

                    case PushMessage.StateSignal.TOP_USRES:
                        var users = CommonStateSignalTopUsers.Parser.ParseFrom(item.Payload);
                        //Log.Information("Top 3 users: {0}", string.Join(", ", users.User.Select(user => user.Detail.Name)));
                        break;

                    case PushMessage.StateSignal.RECENT_COMMENT:
                        var comments = CommonStateSignalRecentComment.Parser.ParseFrom(item.Payload);
                        foreach (var comment in comments.Comment)
                        {
                            Log.Information("{0} - {1}({2}): {3}", comment.SendTimeMs, comment.UserInfo.Nickname, comment.UserInfo.UserId, comment.Content);
                        }
                        break;

                    case PushMessage.StateSignal.CHAT_CALL:
                    case PushMessage.StateSignal.CHAT_ACCEPT:
                    case PushMessage.StateSignal.CHAT_READY:
                    case PushMessage.StateSignal.CHAT_END:
                    case PushMessage.StateSignal.CURRENT_RED_PACK_LIST:
                        break;

                    default:
                        var pi = Parse(item.SignalType, item.Payload);
#if DEBUG
                        Log.Information("Unhandled state type: {0}, content: {1}", item.SignalType, pi);
#endif
                        break;
                    }
                }
                break;

            case PushMessage.NOTIFY_SIGNAL:
                ZtLiveScNotifySignal notifySignal = ZtLiveScNotifySignal.Parser.ParseFrom(payload);
                foreach (var item in notifySignal.Item)
                {
                    switch (item.SignalType)
                    {
                    case PushMessage.NotifySignal.KICKED_OUT:
                    case PushMessage.NotifySignal.VIOLATION_ALERT:
                    case PushMessage.NotifySignal.LIVE_MANAGER_STATE:
                        break;

                    default:
                        var pi = Parse(item.SignalType, item.Payload);
#if DEBUG
                        Log.Information("Unhandled notify type: {0}, content: {1}", item.SignalType, pi);
#endif
                        break;
                    }
                }
                break;

            default:
                var unknown = Parse(messagetType, payload);
#if DEBUG
                Log.Information("Unhandled message type: {0}, content: {1}", messagetType, unknown);
#endif
                break;
            }
        }
Beispiel #4
0
        private void HandleSignal(string messagetType, byte[] payload)
        {
            switch (messagetType)
            {
            // Includes comment, gift, enter room, like, follower
            case PushMessage.ACTION_SIGNAL:
                var actionSignal = ZtLiveScActionSignal.Parser.ParseFrom(payload);

                foreach (var item in actionSignal.Item)
                {
                    switch (item.SingalType)
                    {
                    case PushMessage.ActionSignal.COMMENT:
                        foreach (var pl in item.Payload)
                        {
                            var comment = CommonActionSignalComment.Parser.ParseFrom(pl);
                            Trace.WriteLine($"{comment.SendTimeMs} - {comment.UserInfo.Nickname}({comment.UserInfo.UserId}): {comment.Content}");
                            //System.Windows.Application.Current.Dispatcher.Invoke(() =>
                            //{
                            //    AddComment(comment);
                            //});
                            AddComment(comment);
                        }
                        break;

                    case PushMessage.ActionSignal.LIKE:
                        foreach (var pl in item.Payload)
                        {
                            var like = CommonActionSignalLike.Parser.ParseFrom(pl);
                            Trace.WriteLine($"{like.SendTimeMs} - {like.UserInfo.Nickname}({like.UserInfo.UserId}) liked");
                        }
                        break;

                    case PushMessage.ActionSignal.ENTER_ROOM:
                        foreach (var pl in item.Payload)
                        {
                            var enter = CommonActionSignalUserEnterRoom.Parser.ParseFrom(pl);
                            Trace.WriteLine($"{enter.SendTimeMs} - {enter.UserInfo.Nickname}({enter.UserInfo.UserId}) entered");
                        }
                        break;

                    case PushMessage.ActionSignal.FOLLOW:
                        foreach (var pl in item.Payload)
                        {
                            var follower = CommonActionSignalUserFollowAuthor.Parser.ParseFrom(pl);
                            Trace.WriteLine($"{follower.SendTimeMs} - {follower.UserInfo.Nickname}({follower.UserInfo.UserId}) followed");
                        }
                        break;

                    case PushMessage.ActionSignal.KICKED_OUT:
                    case PushMessage.ActionSignal.VIOLATION_ALERT:
                        break;

                    case PushMessage.ActionSignal.THROW_BANANA:
                        foreach (var pl in item.Payload)
                        {
                            var acer = AcfunActionSignalThrowBanana.Parser.ParseFrom(pl);
                            Trace.WriteLine($"{acer.SendTimeMs} - {acer.Visitor.Name}({acer.Visitor.UserId})  throwed {acer.Count} banana(s)");
                        }
                        break;

                    case PushMessage.ActionSignal.GIFT:
                        foreach (var pl in item.Payload)
                        {
                            /*
                             * Item Id
                             * 1 - 香蕉
                             * 2 - 吃瓜
                             * 3 -
                             * 4 - 牛啤
                             * 5 - 手柄
                             * 6 - 魔法棒
                             * 7 - 好人卡
                             * 8 - 星蕉雨
                             * 9 - 告白
                             * 10 - 666
                             * 11 - 菜鸡
                             * 12 - 打Call
                             * 13 - 立FLAG
                             * 14 - 窜天猴
                             * 15 - AC机娘
                             * 16 - 猴岛
                             * 17 - 快乐水
                             * 18 -
                             * 19 -
                             * 20 -
                             * 21 - 生日快乐
                             * 22 - 六一快乐
                             */
                            var gift     = CommonActionSignalGift.Parser.ParseFrom(pl);
                            var giftName = Client.Gifts[gift.ItemId];
                            Trace.WriteLine($"{gift.SendTimeMs} - {gift.User.Name}({gift.User.UserId}) sent gift {giftName} × {gift.Count}, Combo: {gift.Combo}, value: {gift.Value}");
#if DEBUG
                            if (string.IsNullOrEmpty(giftName))
                            {
                                Trace.WriteLine($"ItemId: {gift.ItemId}, Value: {gift.Value}");
                            }
#endif
                        }
                        break;

                    default:
                        foreach (var p in item.Payload)
                        {
                            var pi = Client.Parse(item.SingalType, p);
#if DEBUG
                            Trace.WriteLine($"Unhandled action type: {item.SingalType}, content: {pi}");
#endif
                        }
                        break;
                    }
                }
                break;

            // Includes current banana counts, watching count, like count and top 3 users sent gifts
            case PushMessage.STATE_SIGNAL:
                ZtLiveScStateSignal signal = ZtLiveScStateSignal.Parser.ParseFrom(payload);

                foreach (var item in signal.Item)
                {
                    switch (item.SingalType)
                    {
                    case PushMessage.StateSignal.ACFUN_DISPLAY_INFO:
                        var acInfo = AcfunStateSignalDisplayInfo.Parser.ParseFrom(item.Payload);
                        //Trace.WriteLine("Current banada count: {0}", acInfo.BananaCount);
                        break;

                    case PushMessage.StateSignal.DISPLAY_INFO:
                        var stateInfo = CommonStateSignalDisplayInfo.Parser.ParseFrom(item.Payload);
                        //Trace.WriteLine("{0} watching, {1} likes", stateInfo.WatchingCount, stateInfo.LikeCount);
                        CurrentStatus = $"观众数: {stateInfo.WatchingCount} | 点赞数: {stateInfo.LikeCount}";
                        break;

                    case PushMessage.StateSignal.TOP_USRES:
                        var users = CommonStateSignalTopUsers.Parser.ParseFrom(item.Payload);
                        //Trace.WriteLine("Top 3 users: {0}", string.Join(", ", users.User.Select(user => user.Detail.Name)));
                        break;

                    case PushMessage.StateSignal.RECENT_COMMENT:
                        var comments = CommonStateSignalRecentComment.Parser.ParseFrom(item.Payload);
                        foreach (var comment in comments.Comment)
                        {
                            Trace.WriteLine($"{comment.SendTimeMs} - {comment.UserInfo.Nickname}({comment.UserInfo.UserId}): {comment.Content}");
                            //System.Windows.Application.Current.Dispatcher.Invoke(() =>
                            //{
                            //    AddComment(comment);
                            //});
                            AddComment(comment);
                        }
                        break;

                    default:
                        var pi = Client.Parse(item.SingalType, item.Payload);
#if DEBUG
                        Trace.WriteLine($"Unhandled state type: {item.SingalType}, content: {pi}");
#endif
                        break;
                    }
                }
                break;
            }
        }
Beispiel #5
0
        private void HandleSignal(string avupId, string messagetType, byte[] payload)
        {
            switch (messagetType)
            {
            // Includes comment, gift, enter room, like, follower
            case PushMessage.ACTION_SIGNAL:
                var actionSignal = ZtLiveScActionSignal.Parser.ParseFrom(payload);

                foreach (var item in actionSignal.Item)
                {
                    switch (item.SingalType)
                    {
                    case PushMessage.ActionSignal.COMMENT:
                        foreach (var pl in item.Payload)
                        {
                            var comment = CommonActionSignalComment.Parser.ParseFrom(pl);
                            _hub.Clients.Group(avupId).SendComment(new Comment {
                                Name = comment.UserInfo.Nickname, Content = comment.Content
                            });
                            _logger.LogDebug(comment.ToString());
                        }
                        break;

                    case PushMessage.ActionSignal.LIKE:
                        foreach (var pl in item.Payload)
                        {
                            var like = CommonActionSignalLike.Parser.ParseFrom(pl);
                            _hub.Clients.Group(avupId).SendLike(new Like {
                                Name = like.UserInfo.Nickname
                            });
                            _logger.LogDebug(like.ToString());
                        }
                        break;

                    case PushMessage.ActionSignal.ENTER_ROOM:
                        foreach (var pl in item.Payload)
                        {
                            var enter = CommonActionSignalUserEnterRoom.Parser.ParseFrom(pl);
                            _hub.Clients.Group(avupId).SendEnter(new Enter {
                                Name = enter.UserInfo.Nickname
                            });
                            _logger.LogDebug(enter.ToString());
                        }
                        break;

                    case PushMessage.ActionSignal.FOLLOW:
                        foreach (var pl in item.Payload)
                        {
                            var follower = CommonActionSignalUserFollowAuthor.Parser.ParseFrom(pl);
                            _hub.Clients.Group(avupId).SendFollow(new Follow {
                                Name = follower.UserInfo.Nickname
                            });
                            _logger.LogDebug(follower.ToString());
                        }
                        break;

                    case PushMessage.ActionSignal.KICKED_OUT:
                    case PushMessage.ActionSignal.VIOLATION_ALERT:
                        break;

                    case PushMessage.ActionSignal.THROW_BANANA:
                        //foreach (var pl in item.Payload)
                        //{
                        //    var banana = AcfunActionSignalThrowBanana.Parser.ParseFrom(pl);
                        //    UpdateDanmaku(new Banana { Name = banana.Visitor.Name, Count = banana.Count });
                        //}
                        break;

                    case PushMessage.ActionSignal.GIFT:
                        foreach (var pl in item.Payload)
                        {
                            var gift = CommonActionSignalGift.Parser.ParseFrom(pl);
                            var info = AcFunDanmu.Client.Gifts[gift.GiftId];
                            _hub.Clients.Group(avupId).SendGift(new Gift {
                                Name = gift.User.Nickname, ComboId = gift.ComboId, Count = gift.Combo, Detail = new Gift.GiftInfo {
                                    Name = info.Name, Pic = info.Pic
                                }
                            });
                            _logger.LogDebug(gift.ToString());
                        }
                        break;

                    default:
                        break;
                    }
                }
                break;

            //Includes current banana counts, watching count, like count and top 3 users sent gifts
            case PushMessage.STATE_SIGNAL:
                ZtLiveScStateSignal signal = ZtLiveScStateSignal.Parser.ParseFrom(payload);

                foreach (var item in signal.Item)
                {
                    switch (item.SingalType)
                    {
                    case PushMessage.StateSignal.ACFUN_DISPLAY_INFO:
                        //var acInfo = AcfunStateSignalDisplayInfo.Parser.ParseFrom(item.Payload);
                        //Console.WriteLine("Current banada count: {0}", acInfo.BananaCount);
                        break;

                    case PushMessage.StateSignal.DISPLAY_INFO:
                        //var stateInfo = CommonStateSignalDisplayInfo.Parser.ParseFrom(item.Payload);
                        //Console.WriteLine("{0} watching, {1} likes", stateInfo.WatchingCount, stateInfo.LikeCount);
                        break;

                    case PushMessage.StateSignal.TOP_USRES:
                        //var users = CommonStateSignalTopUsers.Parser.ParseFrom(item.Payload);
                        //Console.WriteLine("Top 3 users: {0}", string.Join(", ", users.User.Select(user => user.Detail.Name)));
                        break;

                    case PushMessage.StateSignal.RECENT_COMMENT:
                        var comments = CommonStateSignalRecentComment.Parser.ParseFrom(item.Payload);
                        foreach (var comment in comments.Comment)
                        {
                            _hub.Clients.Group(avupId).SendComment(new Comment {
                                Name = comment.UserInfo.Nickname, Content = comment.Content
                            });
                            _logger.LogDebug(comment.ToString());
                        }
                        break;

                    default:
                        //                            var pi = Parse(item.SingalType, item.Payload);
                        //#if DEBUG
                        //                            Console.WriteLine("Unhandled state type: {0}, content: {1}", item.SingalType, pi);
                        //#endif
                        break;
                    }
                }
                break;
            }
        }