Example #1
0
        /// <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;
            }
        }