public bool Insert(EquipamentoViewModel entity)
        {
            try
            {
                ICodigoInfravermelhoService codigoInfravermelhoService = new CodigoInfravermelhoService(_context);

                var equip = SetEntity(entity.EquipamentoModel);

                _context.Add(equip);
                int inserted = _context.SaveChanges();
                _context.Entry(equip).Reload();
                int id            = equip.Id;
                var codigosEntity = new List <CodigoInfravermelhoModel>();
                if (inserted == 1)
                {
                    entity.Codigos.ForEach(c => codigosEntity.Add(new CodigoInfravermelhoModel {
                        Codigo = c.Codigo, IdEquipamento = equip.Id, IdOperacao = c.IdOperacao
                    }));
                    codigoInfravermelhoService.AddAll(codigosEntity);
                }
                return(Convert.ToBoolean(inserted));
            }
            catch (Exception e)
            {
                throw e;
            }
        }
 public bool Remove(int id)
 {
     using (var transaction = _context.Database.BeginTransaction())
     {
         try
         {
             var equipamento   = _context.Equipamento.Where(e => e.Id == id).FirstOrDefault();
             var codigoService = new CodigoInfravermelhoService(_context);
             var codigos       = codigoService.GetAllByEquipamento(id);
             if (codigos != null)
             {
                 codigoService.RemoveAll(codigos);
             }
             if (equipamento != null)
             {
                 _context.Equipamento.Remove(equipamento);
                 var save = _context.SaveChanges() == 1 ? true : false;
                 transaction.Commit();
                 return(save);
             }
             else
             {
                 throw new ServiceException("Algo deu errado, tente novamente em alguns minutos.");
             }
         }
         catch (Exception e)
         {
             transaction.Rollback();
             throw e;
         }
     }
 }
        private bool EnviarComandosMonitoramento(MonitoramentoModel solicitacao)
        {
            var  _hardwareDeSalaService   = new HardwareDeSalaService(_context);
            var  modelDesatualizado       = GetById(solicitacao.Id);
            bool comandoEnviadoComSucesso = true;

            /*
             * Verifica qual o equipamento foi 'monitorado' para ligar/desligar
             */
            if (solicitacao.ArCondicionado != modelDesatualizado.ArCondicionado)
            {
                var _codigosInfravermelhoService = new CodigoInfravermelhoService(_context);
                var _equipamentoServiceService   = new EquipamentoService(_context);
                var idOperacao           = solicitacao.ArCondicionado ? OperacaoModel.OPERACAO_LIGAR : OperacaoModel.OPERACAO_DESLIGAR;
                var equipamento          = _equipamentoServiceService.GetByIdSalaAndTipoEquipamento(solicitacao.SalaId, EquipamentoModel.TIPO_CONDICIONADOR);
                var codigosInfravermelho = _codigosInfravermelhoService.GetByIdOperacaoAndIdEquipamento(equipamento.Id, idOperacao);
                var hardwareDeSala       = _hardwareDeSalaService.GetByIdSalaAndTipoHardware(solicitacao.SalaId, TipoHardwareModel.CONTROLADOR_DE_SALA).FirstOrDefault();

                if (codigosInfravermelho == null)
                {
                    throw new ServiceException("Houve um problema e o monitoramento não pode ser finalizado, por favor tente novamente mais tarde!");
                }

                var mensagem = "CONDICIONADOR;" + codigosInfravermelho.Codigo + ";";

                try
                {
                    var clienteSocket = new ClienteSocketService(hardwareDeSala.Ip);

                    clienteSocket.AbrirConexao();
                    var status = clienteSocket.EnviarComando(mensagem);
                    clienteSocket.FecharConexao();

                    solicitacao.ArCondicionado = status.Contains("AC-ON");
                    comandoEnviadoComSucesso   = status != null;
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                    return(false);
                }
            }
            else if (solicitacao.Luzes != modelDesatualizado.Luzes)
            {
                var hardwareDeSala = _hardwareDeSalaService.GetByIdSalaAndTipoHardware(solicitacao.SalaId, TipoHardwareModel.CONTROLADOR_DE_SALA).FirstOrDefault();

                var mensagem = "LUZES;" + solicitacao.Luzes + ";";

                try
                {
                    var clienteSocket = new ClienteSocketService(hardwareDeSala.Ip);

                    clienteSocket.AbrirConexao();
                    var status = clienteSocket.EnviarComando(mensagem);
                    clienteSocket.FecharConexao();

                    solicitacao.Luzes        = status.Contains("L-ON");
                    comandoEnviadoComSucesso = status != null;
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                    return(false);
                }
            }

            return(comandoEnviadoComSucesso);
        }