private void ProcessDanmaku(int action, byte[] buffer)
        {
            switch (action)
            {
            case 3:
            {
                var viewer = EndianBitConverter.BigEndian.ToUInt32(buffer, 0);
                ReceivedUserCount?.Invoke(this, new SocketReceivedUserCountArgs()
                    {
                        RoomID    = RoomID,
                        UserCount = viewer
                    });
                break;
            }

            case 5:
            {
                var json = Encoding.UTF8.GetString(buffer, 0, buffer.Length);
                if (IsDebug)
                {
                    LogMessage?.Invoke(this, new SocketLogMessageArgs
                        {
                            RoomID  = RoomID,
                            Message = json
                        });
                }
                try
                {
                    var dama = new BilibiliLiveDanmaku_SocketReceiveData(json, 2);
                    ReceivedDanmaku?.Invoke(this, new SocketReceivedDanmakuArgs()
                        {
                            RoomID  = RoomID,
                            Danmaku = dama
                        });
                }
                catch
                {
                }
                break;
            }

            case 8:
            {
                break;
            }

            default:
            {
                break;
            }
            }
        }
        private void ReceiveMessageLoop()
        {
            try
            {
                var stableBuffer = new byte[Client.ReceiveBufferSize];

                while (IsConnected)
                {
                    NetStream.ReadB(stableBuffer, 0, 4);
                    var packetlength = BitConverter.ToInt32(stableBuffer, 0);
                    packetlength = IPAddress.NetworkToHostOrder(packetlength);
                    if (packetlength < 16)
                    {
                        throw new NotSupportedException("协议失败: (L:" + packetlength + ")");
                    }
                    NetStream.ReadB(stableBuffer, 0, 2);
                    NetStream.ReadB(stableBuffer, 0, 2);
                    NetStream.ReadB(stableBuffer, 0, 4);
                    var typeId = BitConverter.ToInt32(stableBuffer, 0);
                    typeId = IPAddress.NetworkToHostOrder(typeId);
                    Console.WriteLine(typeId);
                    NetStream.ReadB(stableBuffer, 0, 4);
                    var playloadlength = packetlength - 16;
                    if (playloadlength == 0)
                    {
                        continue;
                    }
                    typeId = typeId - 1;
                    var buffer = new byte[playloadlength];
                    NetStream.ReadB(buffer, 0, playloadlength);
                    switch (typeId)
                    {
                    case 0:
                    case 1:
                    case 2:
                    {
                        var viewer = BitConverter.ToUInt32(buffer.Take(4).Reverse().ToArray(), 0);
                        ReceivedUserCount?.Invoke(this, new SocketReceivedUserCountArgs()
                            {
                                RoomID    = RoomID,
                                UserCount = viewer
                            });
                        break;
                    }

                    case 3:
                    case 4:
                    {
                        var json = Encoding.UTF8.GetString(buffer, 0, playloadlength);
                        try
                        {
                            BilibiliLiveDanmaku_SocketReceiveData dama = new BilibiliLiveDanmaku_SocketReceiveData(json, 2);
                            ReceivedDanmaku?.Invoke(this, new SocketReceivedDanmakuArgs()
                                {
                                    RoomID  = RoomID,
                                    Danmaku = dama
                                });
                        }
                        catch (Exception)
                        {
                        }
                        break;
                    }

                    case 5:
                    {
                        break;
                    }

                    case 7:
                    {
                        break;
                    }

                    case 16:
                    {
                        break;
                    }

                    default:
                    {
                        break;
                    }
                    }
                }
            }
            catch (NotSupportedException ex)
            {
                Disconnect(ex);
            }
            catch (Exception ex)
            {
                Disconnect(ex);
            }
        }