/// <summary> /// Détermine si le user est encore connecté. /// </summary> private async Task <bool> IsStillConnected() { if (_gameStart) { return(true); } // Vérifie si l'utilisateur est loggé. bool ok = await Task <bool> .Run( () => UserSessionSingleton.Instance.GetHeartBeat() ); if (!ok) { try { if (tabCurrentRoom.DataContext != null) { using (var svcClient = new LobbyServiceClient()) { svcClient.LeaveRoom(UserSessionSingleton.Instance.UserToken.Value, (Guid)tabCurrentRoom.DataContext); } } } catch { } if (_madeHimQuit) { tabGeneralChat.IsSelected = true; UserService.UserMessage um = new UserService.UserMessage(); um.Content = "Vous avez été kické de la salle par le maître de jeu."; um.Date = DateTime.Now; um.Username = "******"; lstMessages.Items.Add(um); } } return(ok); }
/// <summary> /// Lorsqu'on clique sur ce bouton, on quitte la salle courante. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnQuitRoom_Click(object sender, RoutedEventArgs e) { if (tabCurrentRoom.DataContext == null) { MessageBox.Show("Vous n'êtes dans aucune salle ;^)"); return; } using (var svcClient = new LobbyServiceClient()) { Guid guid; bool ok = false; try { guid = (Guid)tabCurrentRoom.DataContext; ok = svcClient.LeaveRoom(UserSessionSingleton.Instance.UserToken.Value, guid); } catch { MessageBox.Show("Impossible de quitter la salle", "Erreur"); return; } if (!ok) { MessageBox.Show("Impossible de quitter la salle"); return; } } tabCurrentRoom.DataContext = null; tabCurrentRoom.Visibility = System.Windows.Visibility.Hidden; tabRoomsList.IsSelected = true; btnCreateRoom.IsEnabled = true; btnQuitRoom.IsEnabled = false; }
/// <summary> /// Override le onClosing pour permettre de confirmer avec l'utilisateur si c'est bien ce qu'il veut. /// </summary> /// <remarks>Quitte également la room (important) Et aussi le loggin.</remarks> /// <param name="e"></param> protected override void OnClosing(System.ComponentModel.CancelEventArgs e) { base.OnClosing(e); // Cacher la fenêtre appele le OnClosing aussi, donc _joinedGame est // vrai quand on veut cacher la fenêtre. if (_joinedGame) { e.Cancel = true; return; } _isQuitting = true; if (_madeHimQuit && !_gameStart) { MessageBox.Show("Vous avez été déconnecté, veuillez vous reconnecter!", "Erreur", MessageBoxButton.OK); LoginView logView = new LoginView(); logView.Show(); } else if (_gameStart && !_joinedGame) { if (!_changedRoom) { e.Cancel = true; _isQuitting = false; return; } _joinedGame = true; // Hehe MessageBox.Show(new Window(), "La partie commence"); Guid?gameToken = null; using (var client = new GameProxy.GameServiceClient()) { try { gameToken = client.JoinGame( UserSessionSingleton.Instance.UserToken.Value, (tabCurrentRoom.DataContext as Guid?).Value ); } catch (System.ServiceModel.FaultException fe) { MessageBox.Show( "Impossible de joindre la partie: " + fe.Message ); } } if (gameToken != null) { GameView gv = new GameView(); gv.Closed += ShowLobby; gv.GameToken = gameToken.Value; gv.IsGameMaster = false; gv.Show(); e.Cancel = true; _isQuitting = false; _joinedGame = true; _changedRoom = false; Hide(); } } else if (MessageBox.Show("Vous êtes sur le point de quitter MilleBornes en ligne. Continuer ?", "Quitter MilleBornes en ligne", MessageBoxButton.OKCancel) == MessageBoxResult.OK) { if (tabCurrentRoom.DataContext != null) { try { using (var svcClient = new LobbyServiceClient()) { Guid guid = (Guid)tabCurrentRoom.DataContext; svcClient.LeaveRoom(UserSessionSingleton.Instance.UserToken.Value, guid); } } catch { } } Application.Current.Shutdown(0); } else { e.Cancel = true; _isQuitting = false; } }
/// <summary> /// Override le onClosing pour permettre de confirmer avec l'utilisateur si c'est bien ce qu'il veut. /// </summary> /// <remarks>Quitte également la room (important) Et aussi le loggin.</remarks> /// <param name="e"></param> protected override void OnClosing(System.ComponentModel.CancelEventArgs e) { base.OnClosing(e); // Cacher la fenêtre appele le OnClosing aussi, donc _joinedGame est // vrai quand on veut cacher la fenêtre. if (_joinedGame) { e.Cancel = true; return; } _isQuitting = true; if (_madeHimQuit && !_gameStart) { MessageBox.Show("Vous avez été déconnecté, veuillez vous reconnecter!", "Erreur", MessageBoxButton.OK); LoginView logView = new LoginView(); logView.Show(); } else if (_gameStart && !_joinedGame) { if (!_changedRoom) { e.Cancel = true; _isQuitting = false; return; } _joinedGame = true; // Hehe MessageBox.Show(new Window(), "La partie commence"); Guid? gameToken = null; using (var client = new GameProxy.GameServiceClient()) { try { gameToken = client.JoinGame( UserSessionSingleton.Instance.UserToken.Value, (tabCurrentRoom.DataContext as Guid?).Value ); } catch (System.ServiceModel.FaultException fe) { MessageBox.Show( "Impossible de joindre la partie: " + fe.Message ); } } if (gameToken != null) { GameView gv = new GameView(); gv.Closed += ShowLobby; gv.GameToken = gameToken.Value; gv.IsGameMaster = false; gv.Show(); e.Cancel = true; _isQuitting = false; _joinedGame = true; _changedRoom = false; Hide(); } } else if (MessageBox.Show("Vous êtes sur le point de quitter MilleBornes en ligne. Continuer ?", "Quitter MilleBornes en ligne", MessageBoxButton.OKCancel) == MessageBoxResult.OK) { if (tabCurrentRoom.DataContext != null) { try { using (var svcClient = new LobbyServiceClient()) { Guid guid = (Guid)tabCurrentRoom.DataContext; svcClient.LeaveRoom(UserSessionSingleton.Instance.UserToken.Value, guid); } } catch { } } Application.Current.Shutdown(0); } else { e.Cancel = true; _isQuitting = false; } }
/// <summary> /// Détermine si le user est encore connecté. /// </summary> private async Task<bool> IsStillConnected() { if (_gameStart) return true; // Vérifie si l'utilisateur est loggé. bool ok = await Task<bool>.Run( () => UserSessionSingleton.Instance.GetHeartBeat() ); if (!ok) { try { if (tabCurrentRoom.DataContext != null) { using (var svcClient = new LobbyServiceClient()) { svcClient.LeaveRoom(UserSessionSingleton.Instance.UserToken.Value, (Guid)tabCurrentRoom.DataContext); } } } catch { } if (_madeHimQuit) { tabGeneralChat.IsSelected = true; UserService.UserMessage um = new UserService.UserMessage(); um.Content = "Vous avez été kické de la salle par le maître de jeu."; um.Date = DateTime.Now; um.Username = "******"; lstMessages.Items.Add(um); } } return ok; }