示例#1
0
        /// <summary>
        /// Faz a serializacao do objeto. Retorna um entidadeInfo com o objeto
        /// serializado. Este overload cria um entidadeInfo vazio e o preenche
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="objeto"></param>
        /// <returns></returns>
        private EntidadeInfo serializar <T>(T objeto) where T : ICodigoEntidade
        {
            // Inicializa
            Type     tipoObjeto          = typeof(T);
            Assembly assemblyObjeto      = tipoObjeto.Assembly;
            Type     tipoObjetoSalvo     = objeto.GetType();
            Assembly assemblyObjetoSalvo = tipoObjetoSalvo.Assembly;

            // Pega o código da entidade
            string codigoEntidade = ((ICodigoEntidade)objeto).ReceberCodigo();

            // Cria nova entidadeInfo
            EntidadeInfo entidadeInfo =
                new EntidadeInfo()
            {
                Codigo              = codigoEntidade,
                DataCriacao         = DateTime.Now,
                DataUltimaAlteracao = DateTime.Now,
                TipoSerializacao    = EntidadeTipoSerializacaoEnum.Binaria,
                TipoObjeto          = tipoObjeto.FullName,
                AssemblyObjeto      = assemblyObjeto.FullName,
                TipoObjetoSalvo     = tipoObjetoSalvo.FullName,
                AssemblyObjetoSalvo = assemblyObjetoSalvo.FullName
            };

            // Repassa
            return(serializar <T>(objeto, entidadeInfo));
        }
示例#2
0
        /// <summary>
        /// Faz a desserialização de um entidadeInfo
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="entidadeInfo"></param>
        /// <returns></returns>
        private T desserializar <T>(EntidadeInfo entidadeInfo) where T : ICodigoEntidade
        {
            // Faz a desserializacao do objeto
            BinaryFormatter formatter = new BinaryFormatter();
            MemoryStream    ms        = new MemoryStream(entidadeInfo.Serializacao);
            T retorno = (T)formatter.Deserialize(ms);

            // Retorna
            return(retorno);
        }
示例#3
0
        /// <summary>
        /// Salva um objeto na persistencia.
        /// Overload do método para trabalhar com mensagens
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="objeto"></param>
        public SalvarObjetoResponse <T> SalvarObjeto <T>(SalvarObjetoRequest <T> parametros) where T : ICodigoEntidade
        {
            // Permite que o hook interfira no processamento
            if (this.EventoSalvar != null)
            {
                // Cria eventargs para permitir que o hook crie sua resposta
                PersistenciaArquivoEventoEventArgs eventArgs =
                    new PersistenciaArquivoEventoEventArgs()
                {
                    MensagemRequest = parametros
                };

                // Faz a chamada do hook
                this.EventoSalvar(this, eventArgs);

                // Se tem resposta, é a que deve ser retornada
                if (eventArgs.MensagemResponse != null)
                {
                    return(eventArgs.MensagemResponse as SalvarObjetoResponse <T>);
                }
            }

            // Pega o código da entidade
            string codigoEntidade = ((ICodigoEntidade)parametros.Objeto).ReceberCodigo();

            // Serializa
            EntidadeInfo entidadeInfo = serializar <T>(parametros.Objeto);

            // Verifica se já existe para adicionar ou alterar
            string chave = gerarChaveEntidade(entidadeInfo);

            lock (_persistenciaHelper)
                if (_persistenciaHelper.Entidades.ContainsKey(chave))
                {
                    _persistenciaHelper.Entidades[chave] = entidadeInfo;
                }
                else
                {
                    _persistenciaHelper.Entidades.Add(chave, entidadeInfo);
                }

            // Retorna
            return
                (new SalvarObjetoResponse <T>()
            {
                Objeto = parametros.Objeto
            });
        }
示例#4
0
        /// <summary>
        /// Faz a serializacao do objeto. Retorna um entidadeInfo com o objeto
        /// serializado. Este overload utiliza um entidadeInfo previamente criado
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="objeto"></param>
        /// <returns></returns>
        private EntidadeInfo serializar <T>(T objeto, EntidadeInfo entidadeInfo) where T : ICodigoEntidade
        {
            // Faz a serializacao binaria do objeto
            BinaryFormatter formatter = new BinaryFormatter();
            MemoryStream    ms        = new MemoryStream();

            formatter.Serialize(ms, objeto);

            // Salva na entidade
            ms.Position = 0;
            BinaryReader reader = new BinaryReader(ms);

            entidadeInfo.Serializacao = reader.ReadBytes(Convert.ToInt32(ms.Length));

            // Salva outras propriedades
            entidadeInfo.TipoSerializacao = EntidadeTipoSerializacaoEnum.Binaria;
            entidadeInfo.TipoObjeto       = typeof(T).FullName;

            // Retorna
            return(entidadeInfo);
        }
示例#5
0
 public void UpdateInfo(EntidadeInfo info)
 {
     entidadeNome.GetComponent <EntidadeObjInterativo>().nome = info.id;
     entidadeLogo.GetComponent <EntidadeObjInterativo>().nome = info.id;
     entidadeLogo.GetComponentInChildren <Image>().sprite     = info.spriteImg;
 }
示例#6
0
 /// <summary>
 /// Gera uma chave string para a entidadeInfo ser colocada
 /// em dicionários.
 /// </summary>
 /// <param name="entidadeInfo"></param>
 /// <returns></returns>
 private string gerarChaveEntidade(EntidadeInfo entidadeInfo)
 {
     return(entidadeInfo.TipoObjeto + ";" + entidadeInfo.Codigo);
 }