public void CancelaEncomenda(object aux)
    {
        ComunicacaoBD comunicacaoBD = new ComunicacaoBD();
        WEBooksDistribuidorAp.LogMensagens text = new WEBooksDistribuidorAp.LogMensagens();

        ComunicacaoFila comFila = new ComunicacaoFila();

        string idEncomenda = EncomendaWEBooks.IdEncomenda;
        try
        {
            string ultimoEstado = servico.getEstado(idEncomenda, comunicacaoBD);

            if (ultimoEstado == "colocada" || ultimoEstado == "pendente")
            {
                servico.alteraEstado(idEncomenda, "cancelada", comunicacaoBD);

                //Espera 5 seg antes de responder a WEBooks
                Thread.Sleep(new TimeSpan(0, 0, 5));
                EncomendaWEBooks.TipoMensagem = "cancelada";
                comFila.escreveFilaWeb(EncomendaWEBooks);

                text.actualizaLog(EncomendaWEBooks.TipoMensagem, false);
            }
            else
            {
                comunicacaoBD.Transacao.Rollback();
                throw new Exception("Erro: estado da encomenda nao permite que seja cancelada");
            }
        }
        catch (SqlException es) {
            comunicacaoBD.Transacao.Rollback();
            throw new Exception("ERRO: Nao é possivel Cancelar encomenda");
        }
        comunicacaoBD.Transacao.Commit();
    }
Пример #2
0
        /// <summary>
        /// Thread que fica a escuta no fila de mensagens
        /// </summary>
        public void Receiver()
        {
            ComunicacaoFila comFila = new ComunicacaoFila();

            while (true)
            {
                //Thread.Sleep(new TimeSpan(0,0,10));

                System.Messaging.Message mensagem;

                try
                {
                    mensagem = mqDist.Receive(new TimeSpan(0, 0, 3));

                    EncomendaWEBooks encomendaWEbooks = new EncomendaWEBooks((XmlDocument)mensagem.Body);

                    //Envia para o log o tipo de mensagem que recebeu
                    actualizaLog(encomendaWEbooks.TipoMensagem, true);

                    if (encomendaWEbooks.TipoMensagem.ToLower() == "colocar")
                    {
                        WEBooksDistribuidorService servicoDistribuidor = new WEBooksDistribuidorService();
                        servicoDistribuidor.EncomendaWEBooks = encomendaWEbooks;

                        WaitCallback EncomendaCallBack = new WaitCallback(servicoDistribuidor.TempoVidaEncomenda);
                        ThreadPool.QueueUserWorkItem(EncomendaCallBack);

                        actualizaLog(encomendaWEbooks.IdEncomenda, false);

                    }
                    else if (encomendaWEbooks.TipoMensagem.ToLower() == "cancelar")
                    {
                        WEBooksDistribuidorService servicoDistribuidor = new WEBooksDistribuidorService();
                        servicoDistribuidor.EncomendaWEBooks = encomendaWEbooks;

                        WaitCallback CancelaCallBack = new WaitCallback(servicoDistribuidor.CancelaEncomenda);
                        ThreadPool.QueueUserWorkItem(CancelaCallBack);
                    }
                }
                catch
                {
                    //nao faz nada, significa que nao existem mensagens na fila
                }

            }
        }
    public void TempoVidaEncomenda(object aux)
    {
        WEBooksDistribuidorAp.LogMensagens text = new WEBooksDistribuidorAp.LogMensagens();

        Encomenda encomenda = new Encomenda(EncomendaWEBooks);

        ComunicacaoFila comFila = new ComunicacaoFila();

        InsereEncomenda(ref encomenda); //fica logo no estado colocada

        //Envia mensagem de aviso de mensagem colocada, na WEBooks fica pendente

        if (encomenda.TempoEspera != 0) {
            PendenteEncomenda(encomenda.IdEncomenda);

            //Espera 5 segundos antes de enviar a resposta a WEBooks
            EncomendaWEBooks.TipoMensagem = "pendente";
            Thread.Sleep(new TimeSpan(0,0,5));
            comFila.escreveFilaWeb(EncomendaWEBooks);

            text.escreveNoLog =  "Enviada: " + EncomendaWEBooks.TipoMensagem;
        }

        Thread.Sleep(new TimeSpan(0, 0, encomenda.TempoEspera));//vai esperar que fiquem todos os livros disponiveis

        try
        {
            EncomendaWEBooks.TipoMensagem = "entregue";
            Thread.Sleep(new TimeSpan(0, 0, 5));
            comFila.escreveFilaWeb(EncomendaWEBooks);

            EntregueEncomenda(encomenda.IdEncomenda);
            text.actualizaLog(EncomendaWEBooks.TipoMensagem, false);

        }
        catch (Exception) {
            //nao faz nada, significa que mensagem foi cancelada anteriormente
        }

        //fim do tempo de vida da encomenda
    }