/// <summary> /// 处理消息,具体的类型处理 /// </summary> /// <param name="Code">操作码</param> /// <param name="buffer">字节流</param> private void HandleMsg(OperateCode Code, byte[] buffer) { switch (Code) { case OperateCode.客户端发送的心跳包: break; case OperateCode.人气值节整数: var Viewer = EndianBitConverter.BigEndian.ToUInt32(buffer, 0); OutPut?.Invoke(Cmd.NONE, $"直播间人气值:{Viewer}"); break; case OperateCode.表示具体命令Cmd: string sJson = Encoding.UTF8.GetString(buffer, 0, buffer.Length); try { var Jobj = JObject.Parse(sJson); var Cmd = Jobj.Value <string>("cmd"); var CmdCommand = (Cmd)Enum.Parse(typeof(Cmd), Cmd); switch (CmdCommand) { case BilibiliDanMuLib.Cmd.DANMU_MSG: { var Infos = Jobj["info"]; string sUserName = Infos[2][1].Value <string>(); var Medal = Infos[3]; if (Medal.Count() != 0) { string sMedalName = Medal[1].Value <string>(); string sLeavel = Medal[0].Value <string>(); sUserName = $"[{sLeavel} {sMedalName}]" + sUserName; } bool IsAdmin = Infos[2][2].Value <bool>(); if (IsAdmin) { sUserName = "******" + sUserName; } OutPut?.Invoke(BilibiliDanMuLib.Cmd.DANMU_MSG, $"{sUserName}:{Infos[1]}"); } break; case BilibiliDanMuLib.Cmd.SEND_GIFT: { var DataJToken = Jobj["data"]; string sUserName = DataJToken["uname"].Value <string>(); string sAction = DataJToken["action"].Value <string>(); string sgiftName = DataJToken["giftName"].Value <string>(); int iNum = DataJToken["num"].Value <int>(); OutPut?.Invoke(BilibiliDanMuLib.Cmd.SEND_GIFT, $"{sUserName}{sAction}{sgiftName} x {iNum}"); } break; case BilibiliDanMuLib.Cmd.WELCOME: break; case BilibiliDanMuLib.Cmd.WELCOME_GUARD: break; case BilibiliDanMuLib.Cmd.SYS_MSG: break; case BilibiliDanMuLib.Cmd.PREPARING: break; case BilibiliDanMuLib.Cmd.LIVE: break; case BilibiliDanMuLib.Cmd.WISH_BOTTLE: break; case BilibiliDanMuLib.Cmd.INTERACT_WORD: { var DataToken = Jobj["data"]; string sUserName = DataToken["uname"].Value <string>(); OutPut?.Invoke(BilibiliDanMuLib.Cmd.INTERACT_WORD, $"{sUserName}进入直播间"); break; } default: break; } Log?.Invoke(sJson); } catch (Exception ex) { Log?.Invoke(ex.Message); } break; case OperateCode.认证并加入房间: break; case OperateCode.务器发送的心跳包: break; default: break; } }