/// <summary> /// Récupération des informations de connexion /// </summary> /// <returns></returns> private static InfosEcranConnexion RecupererInfosConnexion() { Settings prm = new Settings(); // Si c'est les paramètres par défaut, on essaie de récupérer les parametres de la version précédente if (prm.NomUtilisateur == Settings.Default.NomUtilisateur && prm.Langue == Settings.Default.Langue && prm.EstServeur == Settings.Default.EstServeur && prm.ListeServeurs == Settings.Default.ListeServeurs && prm.EstSpectateur == Settings.Default.EstSpectateur) { prm.Upgrade(); } InfosEcranConnexion resInfos; if (prm.ListeServeurs == null) { resInfos = new InfosEcranConnexion(prm.NomUtilisateur, string.Empty, prm.Langue, prm.EstServeur, prm.EstSpectateur, null); } else { List <String> listeServeurs = new List <string>(); foreach (string srv in prm.ListeServeurs) { listeServeurs.Add(srv); } resInfos = new InfosEcranConnexion(prm.NomUtilisateur, prm.ListeServeurs[0], prm.Langue, prm.EstServeur, prm.EstSpectateur, listeServeurs); } return(resInfos); }
/// <summary> /// Sauvegarde des informations de connexion /// </summary> /// <param name="infosConn"></param> private static void SauvegarderInfosConnexion(InfosEcranConnexion infos) { Settings prm = new Settings(); prm.NomUtilisateur = infos.NomJoueur; prm.ListeServeurs = new System.Collections.Specialized.StringCollection(); prm.ListeServeurs.AddRange(infos.ListeServeurs.ToArray()); prm.EstServeur = infos.EstServeur; prm.Langue = infos.Langue; prm.Save(); }
/// <summary> /// Traite la ligne de commande et modifie les informations de connexion en fonction /// </summary> /// <param name="infos">Les informations de connexion (initialisé par la récupération des paramètres)</param> /// <param name="args">la ligne de commande</param> /// <remarks>La ligne de commande étant prioritaire sur les informations sauvegardées, cette fonction sera toujours appelée après la récupération des paramètres</remarks> /// <returns>Toutes les informations nécessaires à l'affichage de l'écran de connexion</returns> private static InfosEcranConnexion TraiterLigneCommande(InfosEcranConnexion infos, params string[] args) { InfosEcranConnexion resInfos = infos.Clone() as InfosEcranConnexion; resInfos.EstServeur = false; resInfos.ModeLancementClient = ModeClient.Jeu; foreach (string param in args) { switch (param.Substring(0, 2)) { case "/P": resInfos.NomJoueur = param.Substring(3).Trim('\"'); break; case "/L": resInfos.Langue = param.Substring(3).Trim('\"'); break; case "/H": resInfos.EstServeur = true; break; case "/J": resInfos.EstServeur = false; resInfos.AdresseServeur = param.Substring(3).Trim('\"'); break; case "/R": resInfos.ModeLancementClient = ModeClient.LecturePartie; break; default: break; } } return(resInfos); }
public static void Main(params string[] args) { Program monApp = new Program(); monApp.ShutdownMode = ShutdownMode.OnExplicitShutdown; try { // On boucle tant que l'utilisateur n'a pas cliqué sur "Annuler" ou qu'il n'a pas réussi à se connecter bool clicAnnuler = false; InfosEcranConnexion infos = null; while (!clicAnnuler) { // 1er chargement : on récupère la sauvegarde et on applique la ligne de commande // 2ème chargement : Les infos ont déjà été récupérées par la fenetre de connexion if (infos == null) { infos = RecupererInfosConnexion(); infos = TraiterLigneCommande(infos, args); } DemarrageApplication formDemarrage = new DemarrageApplication(infos); clicAnnuler = !(bool)formDemarrage.ShowDialog(); if (!clicAnnuler) { infos = new InfosEcranConnexion(formDemarrage.NomJoueur, formDemarrage.AdresseServeur, formDemarrage.Langue, formDemarrage.EstServeur, formDemarrage.EstSpectateur, infos.ListeServeurs); infos.ModeLancementClient = formDemarrage.EstClientEnModeLecture ? ModeClient.LecturePartie : ModeClient.Jeu; infos.EstSpectateur = formDemarrage.EstSpectateur; if (infos.ListeServeurs == null) { infos.ListeServeurs = new List <String>(); } if (infos.ListeServeurs.Contains(infos.AdresseServeur)) { // Une seule instance de l'adresse déjà choisie infos.ListeServeurs.Remove(infos.AdresseServeur); } infos.ListeServeurs.Insert(0, infos.AdresseServeur); Joueur joueurConnecte = new Joueur(infos.NomJoueur); joueurConnecte.EstSpectateur = infos.EstSpectateur; // On considére que le serveur est démarré si on rejoint une partie bool serveurDemarre = true; // Démarrage du serveur if (infos.EstServeur && infos.ModeLancementClient == ModeClient.Jeu) { serveurDemarre = Serveur.DemarrerServeur(string.Format(ADRESSE_SERVEUR, "localhost")); if (!serveurDemarre) { MessageBox.Show(OutilsTraduction.Traducteur.Traduire("ErreurDemarrageServeur"), Constantes.NOM_APPLICATION, MessageBoxButton.OK, MessageBoxImage.Error); } } if (serveurDemarre) { // Démarrage du client IServeur serveur = null; CommunicationServeur comm = null; ResultatConnection res; if (infos.ModeLancementClient == ModeClient.Jeu) { res = ConnecterServeur(joueurConnecte, string.Format(ADRESSE_SERVEUR, infos.AdresseServeur), out serveur, out comm); } else { res = new ResultatConnection(RetourConnection.Ok); } if (res != null) { if (res.Connection == RetourConnection.Ok) { try { SauvegarderInfosConnexion(infos); clicAnnuler = true; TablePoker table = new TablePoker(joueurConnecte, comm, serveur, res, formDemarrage.TraducteurChoisi, infos.ModeLancementClient); monApp.Run(table); } catch (Exception ex) { MessageBox.Show(formDemarrage.TraducteurChoisi.Traduire("ErreurApplication") + ex.Message, Constantes.NOM_APPLICATION, MessageBoxButton.OK, MessageBoxImage.Error); } } else { MessageBox.Show(formDemarrage.TraducteurChoisi.Traduire("ErreurConnection" + res.Connection.ToString()), Constantes.NOM_APPLICATION, MessageBoxButton.OK, MessageBoxImage.Error); } } else { MessageBox.Show(formDemarrage.TraducteurChoisi.Traduire("ErreurConnection"), Constantes.NOM_APPLICATION, MessageBoxButton.OK, MessageBoxImage.Error); } } } } } catch (Exception ex) { MessageBox.Show("Erreur de l'application : " + ex.Message, Constantes.NOM_APPLICATION, MessageBoxButton.OK, MessageBoxImage.Error); } }
public DemarrageApplication(InfosEcranConnexion infos) { this.InitializeComponent(); // Initialisation des différents champs de l'écran this.AdresseServeur = infos.AdresseServeur; this.EstServeur = infos.EstServeur; this.NomJoueur = infos.NomJoueur; cboAdresse.ItemsSource = infos.ListeServeurs; cboAdresse.Text = infos.AdresseServeur; // Ecoute spécifique du TextChanged de la combo cboAdresse DependencyPropertyDescriptor dpd = DependencyPropertyDescriptor.FromProperty(ComboBox.TextProperty, typeof(ComboBox)); dpd.AddValueChanged(cboAdresse, cboAdresse_OnTextChanged); // On récupère toutes les langues disponibles & on affiche la bonne ITraducteur tradChoisi = null; _initialisationComboLangue = true; foreach (string cheminAssembly in Directory.GetFiles("lang", "*.dll")) { Assembly asm = Assembly.LoadFile(Path.Combine(Environment.CurrentDirectory, cheminAssembly)); // Remplissage de la lstView par Recupération de toutes les classes implémentant ITraducteur foreach (Type t in asm.GetTypes()) { Type typeTrad = t.GetInterface("ITraducteur"); if (typeTrad != null) { ITraducteur traducteur = Activator.CreateInstance(t) as ITraducteur; cboLangue.Items.Add(traducteur); cboLangue.DisplayMemberPath = "LangueTraduction"; if (traducteur.LangueTraduction.Equals(infos.Langue)) { tradChoisi = traducteur; } } } } if (!cboLangue.HasItems) { throw new ApplicationException("Aucune langue trouvée pour l'application"); } if (tradChoisi == null) { cboLangue.SelectedIndex = 0; } else { cboLangue.SelectedItem = tradChoisi; } _initialisationComboLangue = false; TraduireEcran(cboLangue.SelectedItem as ITraducteur); this.EstClientEnModeLecture = false; txtNomJoueur.Focus(); txtNomJoueur.SelectAll(); }