Example #1
0
        public byte[] ToBytes()
        {
            CarregarListaVideos();
            List <byte> dados = new List <byte>();

            unsafe
            {
                Byte[] resultado = new Byte[sizeof(FormatoPlaylist) - sizeof(UInt32)];

                fixed(byte *pSrc = resultado)
                {
                    FormatoPlaylist *listaArquivos = (FormatoPlaylist *)pSrc;

                    //paths.CopyTo(resultado, sizeof(FormatoPlaylist));

                    listaArquivos->versao = this.versao;

                    listaArquivos->qtdArquivos = this.qtdArquivos;

                    for (int i = 0; i < this.formato.Count(); i++)
                    {
                        listaArquivos->formato[i] = this.formato[i];
                    }

                    dados.AddRange(resultado);

                    foreach (IVideo video in listaVideos)
                    {
                        if (video is VideoV01)
                        {
                            dados.AddRange((video as VideoV01).ToBytes());
                        }
                        else if (video is VideoV02)
                        {
                            dados.AddRange((video as VideoV02).ToBytes());
                        }
                        else if (video is VideoV04)
                        {
                            dados.AddRange((video as VideoV04).ToBytes());
                        }
                    }
                    listaArquivos->Tamanho = (UInt32)dados.Count;

                    resultado = dados.ToArray();
                    BitConverter.GetBytes((UInt32)resultado.Length).CopyTo(resultado, 0);
                }

                return(resultado);
            }
        }
Example #2
0
        public void LoadFromBytes(byte[] dados)
        {
            unsafe
            {
                fixed(byte *pSrc = dados)
                {
                    FormatoPlaylist *listaArquivos = (FormatoPlaylist *)pSrc;

                    Byte[] temporario = new byte[listaArquivos->qtdArquivos];

                    listaArquivos->Tamanho = (UInt32)dados.Length;

                    this.versao = listaArquivos->versao;

                    this.qtdArquivos = listaArquivos->qtdArquivos;

                    // Limpa a lista
                    this.listaVideos.Clear();
                    int indice = sizeof(FormatoPlaylist) - sizeof(UInt32);

                    for (int i = 0; i < this.qtdArquivos; i++)
                    {
                        int indiceInicial = indice;
                        // Pegar o tamanho do Arquivo
                        uint   tamanhoArquivo = BitConverter.ToUInt32(dados, indice);
                        byte[] dadosVideo     = new byte[tamanhoArquivo];
                        // Atualiza o indice com o tamanho do arquivo
                        indice += sizeof(uint);
                        // Pular a versão
                        indice++;

                        Array.Copy(dados, indiceInicial, dadosVideo, 0, tamanhoArquivo);


                        // Pegar o formato do Arquivo Ex.: V02
                        if (Encoding.ASCII.GetString(dados, indice, 3).ToUpper().Equals("V01"))
                        {
                            // Instancia o video a partir do formato
                            VideoV01 video = new VideoV01();
                            // Carrega através do ARRAY
                            video.LoadFromBytes(dadosVideo);
                            // Adiciona o video
                            listaVideos.Add(video);
                        }
                        else if (Encoding.ASCII.GetString(dados, indice, 3).ToUpper().Equals("V02"))
                        {
                            // Instancia o video a partir do formato
                            VideoV02 video = new VideoV02();
                            // Carrega através do ARRAY
                            video.LoadFromBytes(dadosVideo);
                            // Adiciona o video
                            listaVideos.Add(video);
                        }
                        else if (Encoding.ASCII.GetString(dados, indice, 3).ToUpper().Equals("V04"))
                        {
                            // Instancia o video a partir do formato
                            VideoV04 video = new VideoV04();
                            // Carrega através do ARRAY
                            video.LoadFromBytes(dadosVideo);
                            // Adiciona o video
                            listaVideos.Add(video);
                        }

                        indice = indice + dadosVideo.Length;
                        indice = indice - sizeof(uint);
                        indice = indice - 1;
                    }
                }
            }
        }