Пример #1
0
        /// <summary>
        /// 提取弹幕信息
        /// </summary>
        /// <param name="msg"></param>
        void ShowMsg(string msg)
        {
            msg = FIX_TAIL + msg;
            string[] chatmsgArray = Regex.Split(msg, "type@=", RegexOptions.IgnoreCase);
            FIX_TAIL = chatmsgArray[chatmsgArray.Length - 1];   //截取最后的丢弃数据,放在下个包的开头,防止数据丢失
            string[] newChatmsgArrayArr = new string[chatmsgArray.Length - 1];
            Array.Copy(chatmsgArray, 0, newChatmsgArrayArr, 0, chatmsgArray.Length - 1);

            foreach (string t in newChatmsgArrayArr)
            {
                string[] msgType = t.Split('/');
                if (msgType.Length >= 2)
                {
                    string type = msgType[0];
                    //if (!ls.Contains(type))
                    //{
                    //    Console.WriteLine(t);
                    //    Console.WriteLine();
                    //    Console.WriteLine();
                    //    Console.WriteLine();
                    //    Console.WriteLine();
                    //    Console.WriteLine();
                    //    ls.Add(type);
                    //}
                    if (type == "chatmsg")
                    {
                        BrrageMsg brrageMsg = GetMsgType(msgType);
                        brrageMsg.ROOM_ID = ROOM_ID;
                        //通知弹幕来了
                        BarrageNotice?.Invoke(brrageMsg);
                    }
                    else if (type == "spbc")
                    {
                        Console.WriteLine(t);
                    }
                    else if (type == "dgb")
                    {
                        RoomGiftInfo info = GetGift(msgType);
                        Console.WriteLine(t);
                        if (!douyuGifts.ContainsKey(info.GiftId))
                        {
                            Console.WriteLine($"不包含礼物【{info.GiftId}】");
                            continue;
                        }
                        GiftNotice?.Invoke(info);
                        Console.WriteLine($"【{info.NickName}】送了{info.GiftNum}个【{douyuGifts[info.GiftId].Name}】");
                    }
                }
            }
        }
Пример #2
0
        /// <summary>
        /// 获取礼物信息
        /// </summary>
        /// <param name="msgType"></param>
        /// <returns></returns>
        static RoomGiftInfo GetGift(string[] msgType)
        {
            RoomGiftInfo info = new RoomGiftInfo();
            var          gift = msgType.Select(p => Regex.Split(p, "@=", RegexOptions.IgnoreCase))
                                .Where(p => p.Length >= 2)
                                .ToList();

            info.RoomId   = Convert.ToInt32(gift.FirstOrDefault(p => p[0] == "rid")[1]);
            info.GiftId   = Convert.ToInt32(gift.FirstOrDefault(p => p[0] == "gfid")[1]);
            info.UserId   = Convert.ToInt32(gift.FirstOrDefault(p => p[0] == "uid")[1]);
            info.GiftNum  = Convert.ToInt32(gift.FirstOrDefault(p => p[0] == "gfcnt")[1]);
            info.Hits     = Convert.ToInt32(gift.FirstOrDefault(p => p[0] == "hits")[1]);
            info.NickName = gift.FirstOrDefault(p => p[0] == "nn")[1];
            info.Time     = DateTime.Now;
            return(info);
        }