/// <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)); }
/// <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); }
/// <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 }); }
/// <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); }
public void UpdateInfo(EntidadeInfo info) { entidadeNome.GetComponent <EntidadeObjInterativo>().nome = info.id; entidadeLogo.GetComponent <EntidadeObjInterativo>().nome = info.id; entidadeLogo.GetComponentInChildren <Image>().sprite = info.spriteImg; }
/// <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); }