/// <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}】"); } } } }
/// <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); }