/// <summary>
 /// Método para adicionar uma nova mensagem na lista de envio para o cliente
 /// </summary>
 /// <param name="mensagem">Mensagem que será enviada para o Cliente</param>
 public void EnfileirarMensagem(MensagemDto mensagem)
 {
     if (FilaEscrita != null)
     {
         FilaEscrita.Enqueue(mensagem);
     }
     if (processarMensagensAsync != null)
     {
         processarMensagensAsync.BeginInvoke(null, null);
     }
 }
        /// <summary>
        /// Efetuar o envio das mensagens para o respectivo cliente
        /// </summary>
        public void RnProcessarFilaEscrita()
        {
            lock (lockerProcessarEscrita)
            {
                if (executandoEnvioMensagens)
                {
                    return;
                }
                executandoEnvioMensagens = true;
                MensagemDto mensagemTemporaria;
                while (TcpUtil.ConexaoTcpValida(TcpCliente) && FilaEscrita.Count > 0)
                {
                    //Desenfileirar uma mensagemDto efetuando um clone da mensagem
                    mensagemTemporaria = FilaEscrita.Dequeue();
                    if (mensagemTemporaria == null)
                    {
                        break;
                    }

                    mensagemTemporaria = mensagemTemporaria.Clone();
                    mensagemTemporaria.Dump(string.Format("Clone para processamento(ConexaoCliente-{0}|Mensagem-{1}):", LoginCliente, ConverterTipoMensagemParaString(mensagemTemporaria)));
                    switch (mensagemTemporaria.Tipo)
                    {
                    case CsTipoMensagem.NovosUsuariosConectados:
                    case CsTipoMensagem.UsuarioDesconectado:
                        RnEnviarMensagensQuePossuemUsuarios(mensagemTemporaria);
                        break;

                    case CsTipoMensagem.EdicaoTarefaAutorizada:
                        if (SeMensagemForUmaAutoNotificacao(mensagemTemporaria))
                        {
                            RnEnviarMensagemAoAccessClient(mensagemTemporaria);
                        }
                        else
                        if (AoReceberMensagemErrada != null)
                        {
                            AoReceberMensagemErrada(mensagemTemporaria);
                        }
                        break;

                    case CsTipoMensagem.EdicaoTarefaRecusada:
                    case CsTipoMensagem.ConexaoRecusadaServidor:
                    case CsTipoMensagem.ServidorDesconectando:
                    case CsTipoMensagem.ExclusaoTarefaPermitida:
                    case CsTipoMensagem.EdicaoNomeCronogramaPermitida:
                    case CsTipoMensagem.EdicaoNomeCronogramaRecusada:
                        RnEnviarMensagemAoAccessClient(mensagemTemporaria);
                        break;

                    case CsTipoMensagem.NovaTarefaCriada:
                    case CsTipoMensagem.ExclusaoTarefaFinalizada:
                    case CsTipoMensagem.MovimentacaoPosicaoTarefa:
                    case CsTipoMensagem.DadosCronogramaAlterados:
                    case CsTipoMensagem.InicioEdicaoNomeCronograma:
                    case CsTipoMensagem.InicioEdicaoTarefa:
                    case CsTipoMensagem.EdicaoTarefaFinalizada:
                        if (!SeMensagemForUmaAutoNotificacao(mensagemTemporaria))
                        {
                            RnEnviarMensagemAoAccessClient(mensagemTemporaria);
                        }
                        break;
                    }
                }
                executandoEnvioMensagens = false;
            }
        }