/// <summary> /// Constrói o usuário, conectando-se ao servidor /// </summary> public Usuário(Usuários pai, string usuário, string senha) { Acesso.Comum.Adaptadores.ConexãoConcorrente conexão; if (pai == null) throw new ArgumentNullException("pai", "Pai de Usuário deve ser um objeto Usuários"); usuários = pai; nome = usuário; gerenciadorConexões = new GerenciadorConexões(this, usuário, senha); gerenciadorConexões.AtualizarContexto += new GerenciadorConexões.AtualizarContextoCallback(AtualizarContexto); conexão = gerenciadorConexões.ObterConexão(); conexão.AguardarAté = DateTime.MinValue; if (conexão.State != ConnectionState.Broken && conexão.State != ConnectionState.Closed) Chave = new Chave(usuário, senha); }
/// <param name="tipoFormulário">Formulário base, que herda de Apresentação.Formulários.BaseFormulário</param> public Aplicação(Type tipoFormulário, Usuários usuários, bool efetuarLogin, Splash splash) { #if !DEBUG try #endif { this.splash = splash; // Validar formulário if (typeof(BaseFormulário).IsInstanceOfType(tipoFormulário)) throw new Exception("A aplicação requer um formulário do tipo Apresentação.Formulários.BaseFormulário"); try { Application.EnableVisualStyles(); } catch (Exception erro) { if (splash != null) { splash.Mensagem = "Erro ao ligar efeitos visuais!"; System.Threading.Thread.Sleep(2000); splash.Mensagem = erro.Message; System.Threading.Thread.Sleep(2000); } else MessageBox.Show("Erro ao ligar efeitos visuais!"); } this.usuários = usuários; cultura = System.Globalization.CultureInfo.CreateSpecificCulture("pt-BR"); if (splash != null) splash.Mensagem = "Conectando ao banco de dados ... "; Usuários.AoRegistrarErro += new Usuários.ErroUsuárioHandler(AoRegistrarErro); #if DEBUG Console.WriteLine("Efetuando conexão!"); Usuários.AoCriarConexão += new Usuários.UsuárioHandler(AoCriarConexão); #endif Application.DoEvents(); if (efetuarLogin) { bool cancelouLogin = !Login.EfetuarLogin(usuários, splash); if (cancelouLogin) throw new LoginNãoEfetuado(); if (Usuários.UsuárioAtual == null) throw new LoginOuSenhaIncorretos(); if (Entidades.Pessoa.Funcionário.FuncionárioAtual == null) throw new LoginNãoAssociadoAFuncionário(); } else Usuários.UsuárioAtual = usuários.EfetuarLogin("imjoias", "b9r8hukl3"); } #if !DEBUG catch (LoginNãoEfetuado e) { /* Este erro só ocorre quando a versão é DEBUG. * Em versão RELEASE, este erro implica em * finalização do programa sem mostrar * qualquer mensagem. */ throw e; } catch (Exception e) { MessageBox.Show(e.Message, "Indústria Mineira de Joias", MessageBoxButtons.OK, MessageBoxIcon.Error); throw new Exception("Não foi possível carregar o sistema.", e); } #endif if (splash != null) splash.Mensagem = "Carregando controles gráficos ..."; #if DEBUG Console.WriteLine("Construindo janela principal!"); #endif try { formulário = (BaseFormulário) tipoFormulário.Assembly.CreateInstance(tipoFormulário.FullName); this.MainForm = formulário; } catch (Exception e) { #if DEBUG MessageBox.Show("Ocorreu uma exceção não tratada e não depurável durante a criação do formulário:\n\n" + e.ToString()); #else throw new Exception("Não foi possível construir janela principal!", e); #endif } }
/// <summary> /// Executa uma aplicação utilizando a fachada padrão, exigindo /// autenticação de usuário e mostrando tela de abertura. /// </summary> /// <param name="tipoFormulário">Formulário principal que herda de Apresentação.Formulários.BaseFormulário.</param> public static void Executar(Type tipoFormulário, Usuários usuários) { Executar(tipoFormulário, usuários, true, true); }
/// <summary> /// Executa uma aplicação. /// </summary> /// <param name="tipoFormulário">Formulário principal que herda de Apresentação.Formulários.BaseFormulário</param> /// <param name="fachada">Nome da faixada</param> /// <param name="efetuarLogin">Pedir que usuário efetua login no banco de dados</param> public static void Executar(Type tipoFormulário, Usuários usuários, bool efetuarLogin, bool mostrarSplash) { #if DEBUG Console.WriteLine("========================================================"); Console.WriteLine("Executando aplicação..."); #endif try { Application.SetCompatibleTextRenderingDefault(false); Application.EnableVisualStyles(); Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException, true); Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(ThreadException); } catch { } #if !DEBUG try #endif { Splash splash; // Mostra splash screen if (mostrarSplash) { splash = new Splash(); splash.Show(); splash.Update(); #if DEBUG Console.WriteLine("Splash exibido!"); #endif } else splash = null; try { aplicação = new Aplicação(tipoFormulário, usuários, efetuarLogin, splash); } catch (LoginNãoAssociadoAFuncionário) { MessageBox.Show("O login não está associado a um funcionário", "Login não pode ser feito", MessageBoxButtons.OK, MessageBoxIcon.Error); Application.Exit(); return; } catch (LoginOuSenhaIncorretos) { MessageBox.Show("Login e/ou senha incorretos. ", "Login não pode ser feito", MessageBoxButtons.OK, MessageBoxIcon.Error); Application.Exit(); return; } #if DEBUG Console.WriteLine("Disparando ao carregar!"); #endif aplicação.DispararAoCarregar(); splash = null; #if DEBUG Console.WriteLine("Aplicação pronta!"); Console.WriteLine("========================================================"); #endif Application.Run(aplicação); GC.Collect(); } #if !DEBUG catch (LoginNãoEfetuado) { // Nada aqui } catch (Exception e) { try { Acesso.Comum.Usuários.UsuárioAtual.RegistrarErro(e); MessageBox.Show("Ocorreu um erro e o programa será finalizado. Um relatório de erros foi gerado e enviado ao servidor.\n\nMensagem de erro: " + e.Message, "Falha no sistema", MessageBoxButtons.OK, MessageBoxIcon.Error); } catch (Exception e2) { MessageBox.Show("Ocorreu o seguinte erro no sistema e o programa será finalizado: " + e.ToString(), "Falha no sistema", MessageBoxButtons.OK, MessageBoxIcon.Error); MessageBox.Show("Não foi possível enviar relatório para os programadores devido ao seguinte problema: " + e2.ToString(), "Falha no sistema", MessageBoxButtons.OK, MessageBoxIcon.Error); } } #endif }
public static void Executar(Usuários usuários, bool efetuarLogin, Splash splash) { aplicação = new Aplicação(null, usuários, efetuarLogin, splash); }
public static void Executar(Usuários usuários) { Executar(typeof(BaseFormulário), usuários); }
/// <summary> /// </summary> /// <returns>Falso se usuário cancelou</returns> public static bool EfetuarLogin(Usuários usuários, Splash splash) { #pragma warning disable 0162 #if DEBUG Usuários.UsuárioAtual = usuários.EfetuarLogin("andrep", "andrep"); return true; #endif bool conectado = false; // Constrói janela de login using (Login loginDlg = new Login()) { do { DialogResult resultado; if (splash != null) splash.Hide(); resultado = loginDlg.ShowDialog(); if (splash != null) splash.Show(); switch (resultado) { case DialogResult.OK: if (splash != null) splash.Mensagem = "Autenticando usuário"; try { Usuários.UsuárioAtual = usuários.EfetuarLogin(loginDlg.txtUsuário.Text, loginDlg.txtSenha.Text); if (Usuários.UsuárioAtual == null) MessageBox.Show("Senha ou usuário incorreto!", "Indústria Mineira de Joias", MessageBoxButtons.OK, MessageBoxIcon.Stop); else { conectado = true; } } catch (Exception e) { if (splash != null) splash.Mensagem = "Não foi possível autenticar usuário"; MessageBox.Show("Não foi possível autenticar usuário.\r\n\r\nOcorreu o seguinte erro: " + e.Message, "Indústria Mineira de Joias", MessageBoxButtons.OK, MessageBoxIcon.Error); } // Conectado! break; case DialogResult.Cancel: return false; default: break; } } while (!conectado); #if DEBUG Usuários.UsuárioAtual.GerenciadorConexões.ConexãoPresa += new GerenciadorConexões.ConexãoPresaCallback(GerenciadorConexões_ConexãoPresa); #endif return true; } #pragma warning restore 0162 }