public void ProcessItem(BiliLiveJsonParser.IItem item)
        {
            switch (item.Cmd)
            {
            case BiliLiveJsonParser.Cmds.DANMU_MSG:
                BiliLiveJsonParser.Danmaku danmaku = (BiliLiveJsonParser.Danmaku)item;
                if (danmaku.Type == 0)
                {
                    if (OptionDict[DanmakuSpeechConfig.SpeechFilterOptions.DanmakuSpeech])
                    {
                        SpeakDanmaku(danmaku);
                    }
                }
                break;

            case BiliLiveJsonParser.Cmds.SUPER_CHAT_MESSAGE:
                BiliLiveJsonParser.SuperChat superChat = (BiliLiveJsonParser.SuperChat)item;
                if (OptionDict[DanmakuSpeechConfig.SpeechFilterOptions.SuperChatSpeech])
                {
                    SpeakSuperChat(superChat);
                }
                break;

            case BiliLiveJsonParser.Cmds.SEND_GIFT:
                BiliLiveJsonParser.Gift gift = (BiliLiveJsonParser.Gift)item;
                if (!giftCacheManager.AppendToExist(gift))
                {
                    giftCacheManager.AppendCache(gift);
                }
                break;

            case BiliLiveJsonParser.Cmds.COMBO_SEND:
                BiliLiveJsonParser.ComboSend comboSend = (BiliLiveJsonParser.ComboSend)item;
                if (OptionDict[DanmakuSpeechConfig.SpeechFilterOptions.ComboSendSpeech])
                {
                    SpeakComboSend(comboSend);
                }
                break;
            }
        }
Пример #2
0
        public void ProcessItem(BiliLiveJsonParser.IItem item)
        {
            if (Window == null)
            {
                return;
            }

            switch (item.Cmd)
            {
            case BiliLiveJsonParser.Cmds.DANMU_MSG:
                BiliLiveJsonParser.Danmaku danmaku = (BiliLiveJsonParser.Danmaku)item;
                if (danmaku.Type == 0)
                {
                    if (OptionDict[DanmakuShowConfig.DisplayFilterOptions.Danmaku])
                    {
                        Window.AppendDanmaku(danmaku);
                    }
                }
                else
                if (OptionDict[DanmakuShowConfig.DisplayFilterOptions.RythmStorm])
                {
                    Window.AppendRythmStorm(danmaku);
                }
                break;

            case BiliLiveJsonParser.Cmds.SUPER_CHAT_MESSAGE:
                BiliLiveJsonParser.SuperChat superChat = (BiliLiveJsonParser.SuperChat)item;
                if (OptionDict[DanmakuShowConfig.DisplayFilterOptions.SuperChat])
                {
                    Window.AppendSuperChat(superChat);
                }
                break;

            case BiliLiveJsonParser.Cmds.SEND_GIFT:
                BiliLiveJsonParser.Gift gift = (BiliLiveJsonParser.Gift)item;
                if (!giftCacheManager.AppendToExist(gift))
                {
                    GiftCacheManager.GiftCache giftCache = giftCacheManager.AppendCache(gift);
                    if (gift.CoinType == "gold" && OptionDict[DanmakuShowConfig.DisplayFilterOptions.GoldenGift])
                    {
                        Window.AppendGift(giftCache);
                    }
                    else if (gift.CoinType == "silver" && OptionDict[DanmakuShowConfig.DisplayFilterOptions.SilverGift])
                    {
                        Window.AppendGift(giftCache);
                    }
                }
                break;

            case BiliLiveJsonParser.Cmds.COMBO_SEND:
                BiliLiveJsonParser.ComboSend comboSend = (BiliLiveJsonParser.ComboSend)item;
                if (OptionDict[DanmakuShowConfig.DisplayFilterOptions.ComboSend])
                {
                    Window.AppendComboSend(comboSend);
                }
                break;

            case BiliLiveJsonParser.Cmds.WELCOME:
                BiliLiveJsonParser.Welcome welcome = (BiliLiveJsonParser.Welcome)item;
                if (OptionDict[DanmakuShowConfig.DisplayFilterOptions.Welcome])
                {
                    Window.AppendWelcome(welcome);
                }
                break;

            case BiliLiveJsonParser.Cmds.WELCOME_GUARD:
                BiliLiveJsonParser.WelcomeGuard welcomeGuard = (BiliLiveJsonParser.WelcomeGuard)item;
                if (OptionDict[DanmakuShowConfig.DisplayFilterOptions.WelcomeGuard])
                {
                    Window.AppendWelcomeGuard(welcomeGuard);
                }
                break;

            case BiliLiveJsonParser.Cmds.GUARD_BUY:
                BiliLiveJsonParser.GuardBuy guardBuy = (BiliLiveJsonParser.GuardBuy)item;
                if (OptionDict[DanmakuShowConfig.DisplayFilterOptions.GuardBuy])
                {
                    Window.AppendGuardBuy(guardBuy);
                }
                break;

            case BiliLiveJsonParser.Cmds.INTERACT_WORD:
                BiliLiveJsonParser.InteractWord interactWord = (BiliLiveJsonParser.InteractWord)item;
                if (interactWord.MessageType == BiliLiveJsonParser.InteractWord.MessageTypes.Entry && OptionDict[DanmakuShowConfig.DisplayFilterOptions.InteractEntry])
                {
                    Window.AppendInteractWord(interactWord);
                }
                else if (interactWord.MessageType == BiliLiveJsonParser.InteractWord.MessageTypes.Attention && OptionDict[DanmakuShowConfig.DisplayFilterOptions.InteractAttention])
                {
                    Window.AppendInteractWord(interactWord);
                }
                else if (interactWord.MessageType == BiliLiveJsonParser.InteractWord.MessageTypes.Share && OptionDict[DanmakuShowConfig.DisplayFilterOptions.InteractShare])
                {
                    Window.AppendInteractWord(interactWord);
                }
                else if (interactWord.MessageType == BiliLiveJsonParser.InteractWord.MessageTypes.SpecialAttention && OptionDict[DanmakuShowConfig.DisplayFilterOptions.InteractSpecialAttention])
                {
                    Window.AppendInteractWord(interactWord);
                }
                else if (interactWord.MessageType == BiliLiveJsonParser.InteractWord.MessageTypes.MutualAttention && OptionDict[DanmakuShowConfig.DisplayFilterOptions.InteractMutualAttention])
                {
                    Window.AppendInteractWord(interactWord);
                }
                break;

            case BiliLiveJsonParser.Cmds.ROOM_BLOCK_MSG:
                BiliLiveJsonParser.RoomBlock roomBlock = (BiliLiveJsonParser.RoomBlock)item;
                if (OptionDict[DanmakuShowConfig.DisplayFilterOptions.RoomBlock])
                {
                    Window.AppendRoomBlock(roomBlock);
                }
                break;
            }
        }
Пример #3
0
        private void StartEventListener()
        {
            EventListenerThread = new Thread(delegate()
            {
                IsEventListenerRunning = true;
                while (IsEventListenerRunning)
                {
                    try
                    {
                        BiliPackReader.IPack[] packs = PackReader.ReadPacksAsync();

                        List <Json.Value> jsons = new List <Json.Value>();
                        List <BiliLiveJsonParser.IItem> items = new List <BiliLiveJsonParser.IItem>();

                        foreach (BiliPackReader.IPack pack in packs)
                        {
                            switch (pack.PackType)
                            {
                            case BiliPackReader.PackTypes.Popularity:
                                PopularityRecieved?.Invoke(((BiliPackReader.PopularityPack)pack).Popularity);
                                break;

                            case BiliPackReader.PackTypes.Command:
                                Json.Value value = ((BiliPackReader.CommandPack)pack).Value;
                                jsons.Add(value);
                                BiliLiveJsonParser.IItem item = BiliLiveJsonParser.Parse(value);
                                if (item != null)
                                {
                                    items.Add(item);
                                }
                                break;

                            case BiliPackReader.PackTypes.Heartbeat:
                                ServerHeartbeatRecieved?.Invoke();
                                break;
                            }
                        }

                        if (jsons.Count > 0)
                        {
                            JsonsRecieved?.Invoke(jsons.ToArray());
                        }
                        if (items.Count > 0)
                        {
                            ItemsRecieved?.Invoke(items.ToArray());
                        }
                    }
                    catch (SocketException)
                    {
                        ConnectionFailed?.Invoke("数据读取失败");
                        Disconnect();
                    }
                    catch (IOException)
                    {
                        ConnectionFailed?.Invoke("数据读取失败");
                        Disconnect();
                    }
                }
            });
            EventListenerThread.Start();
        }