private void UpdateMessages() { using (var client = new GameProxy.GameServiceClient()) { DateTime lastMessageTimestamp; lastMessageTimestamp = _lastMessageTimestamp; var messages = client.GetGameMessagesSinceDate(GameToken, lastMessageTimestamp); if (messages.Length > 0) { foreach (var message in messages) { _pendingMessages.Enqueue(new GameProxy.UserMessage() { Username = message.Username, Date = message.Date.ToLocalTime(), Content = message.Content }); } _lastMessageTimestamp = messages.Max(um => um.Date); } } }
private void UpdateState() { using (var client = new GameProxy.GameServiceClient()) { _gameState = client.GetState( Model.UserSessionSingleton.Instance.UserToken.Value, GameToken ); } }
private void UpdateHeartbeat() { using (var client = new GameProxy.GameServiceClient()) { bool result = client.DoHeartbeat( Model.UserSessionSingleton.Instance.UserToken.Value, GameToken ); if (!result) { _connected = false; MessageBox.Show( "Vous avez été déconnecté de la partie.", "Erreur", MessageBoxButton.OK ); } } }
/// <summary> /// Petit hacks pour préloader les connexions et certains symboles. /// </summary> private async void LoadConnections() { await Task.Delay(1000); try { LobbyService.LobbyServiceClient ddd = new LobbyService.LobbyServiceClient(); ddd.Open(); UserServiceClient ccc = new UserServiceClient(); ccc.Open(); using (var gsc = new GameProxy.GameServiceClient()) { gsc.Open(); } } catch { MessageBox.Show("Il semble que la connexion est inexistante..."); } }
/// <summary> /// Petit hacks pour préloader les connexions et certains symboles. /// </summary> private async void LoadConnections() { await Task.Delay(1000); try { LobbyService.LobbyServiceClient ddd = new LobbyService.LobbyServiceClient(); ddd.Open(); UserServiceClient ccc = new UserServiceClient(); ccc.Open(); using (var gsc = new GameProxy.GameServiceClient()) { gsc.Open(); } } catch { MessageBox.Show("Il semble que la connexion est inexistante..."); } }
private void LoadInitialMessages() { _lastMessageTimestamp = DateTime.UtcNow; using (var client = new GameProxy.GameServiceClient()) { var messages = client.GetAllGameMessages(GameToken); if (messages.Length > 0) { foreach (var message in messages) { _messageList.Add(new GameProxy.UserMessage() { Username = message.Username, Date = message.Date.ToLocalTime(), Content = message.Content }); } _lastMessageTimestamp = messages.Max(um => um.Date); lstGameMessages.ScrollIntoView(_messageList.Last()); } } }
/// <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; } }
private void SendMessage() { if (!_connected) { return; } if (string.IsNullOrEmpty(txtMessage.Text)) { return; } using (var client = new GameProxy.GameServiceClient()) { string trimmedMessage = txtMessage.Text.Trim(); bool isContinueCommand = trimmedMessage == "/continuer"; bool isStopCommand = trimmedMessage == "/arreter"; if (isContinueCommand || isStopCommand) { if (_lastDecisionValue) { try { client.TakePlayerDisconnectionDecision( Model.UserSessionSingleton.Instance.UserToken.Value, GameToken, isContinueCommand ); if (isContinueCommand) { SendSystemMessage("Décision prise, la partie va continuer."); } else { SendSystemMessage("Décision prise, la partie va s'arrêter."); } txtMessage.Text = ""; } catch (System.ServiceModel.FaultException fe) { SendSystemMessage("Impossible de prendre la décision: " + fe); } } else { SendSystemMessage("La commande n'est pas valide dans le cas courant."); } } else { bool success = client.SendGameMessage( Model.UserSessionSingleton.Instance.UserToken.Value, GameToken, txtMessage.Text ); if (!success) { MessageBox.Show( "L'envoi du message n'a pas réussi. Veuillez réessayer.", "Erreur d'envoi"); } else { txtMessage.Text = ""; } } } }
private void UpdateHeartbeat() { using (var client = new GameProxy.GameServiceClient()) { bool result = client.DoHeartbeat( Model.UserSessionSingleton.Instance.UserToken.Value, GameToken ); if (!result) { _connected = false; MessageBox.Show( "Vous avez été déconnecté de la partie.", "Erreur", MessageBoxButton.OK ); } } }
private void teamState_MouseDown(object sender, MouseButtonEventArgs e) { if (!_connected) { return; } if (_lastEndGameValue) { return; } if (_currentCardToken == null) { return; } int teamIndex; FrameworkElement element = sender as FrameworkElement; if (element == null) { return; } int? elementData = element.DataContext as int?; if (elementData == null) { return; } teamIndex = elementData.Value; using (var client = new GameProxy.GameServiceClient()) { var result = client.PlayCard( GameToken, Model.UserSessionSingleton.Instance.UserToken.Value, _currentCardToken.Value, teamIndex ); if (result == GameProxy.PlayCardResult.SUCCESS) { _currentCardToken = null; SetGameState(client.GetState( Model.UserSessionSingleton.Instance.UserToken.Value, GameToken )); } else { string message; switch (result) { case Lobby.GameProxy.PlayCardResult.CANNOT_PLAY: { message = "Vous ne pouvez pas jouer cette carte dans l'état actuel."; break; } case Lobby.GameProxy.PlayCardResult.WRONG_TURN: { message = "Ce n'est pas votre tour à jouer."; break; } case Lobby.GameProxy.PlayCardResult.NOT_ALL_PLAYERS_PRESENT: { message = "Les joueurs n'ont pas tous rejoint la partie."; break; } case Lobby.GameProxy.PlayCardResult.SUCCESS: case Lobby.GameProxy.PlayCardResult.WRONG_TOKEN: case Lobby.GameProxy.PlayCardResult.WRONG_TOKEN_PLAYER: case Lobby.GameProxy.PlayCardResult.ALREADY_PLAYED: default: { message = "Une erreur non spécifiée s'est produite lors du jeu de la carte."; break; } } MessageBox.Show(message, "Erreur"); } } }
private void UpdateMessages() { using (var client = new GameProxy.GameServiceClient()) { DateTime lastMessageTimestamp; lastMessageTimestamp = _lastMessageTimestamp; var messages = client.GetGameMessagesSinceDate(GameToken, lastMessageTimestamp); if (messages.Length > 0) { foreach (var message in messages) { _pendingMessages.Enqueue(new GameProxy.UserMessage() { Username = message.Username, Date = message.Date.ToLocalTime(), Content = message.Content }); } _lastMessageTimestamp = messages.Max(um => um.Date); } } }
private void UpdateState() { using (var client = new GameProxy.GameServiceClient()) { _gameState = client.GetState( Model.UserSessionSingleton.Instance.UserToken.Value, GameToken ); } }
private void LoadInitialMessages() { _lastMessageTimestamp = DateTime.UtcNow; using (var client = new GameProxy.GameServiceClient()) { var messages = client.GetAllGameMessages(GameToken); if (messages.Length > 0) { foreach (var message in messages) { _messageList.Add(new GameProxy.UserMessage() { Username = message.Username, Date = message.Date.ToLocalTime(), Content = message.Content }); } _lastMessageTimestamp = messages.Max(um => um.Date); lstGameMessages.ScrollIntoView(_messageList.Last()); } } }
private void SendMessage() { if (!_connected) { return; } if (string.IsNullOrEmpty(txtMessage.Text)) { return; } using (var client = new GameProxy.GameServiceClient()) { string trimmedMessage = txtMessage.Text.Trim(); bool isContinueCommand = trimmedMessage == "/continuer"; bool isStopCommand = trimmedMessage == "/arreter"; if (isContinueCommand || isStopCommand) { if (_lastDecisionValue) { try { client.TakePlayerDisconnectionDecision( Model.UserSessionSingleton.Instance.UserToken.Value, GameToken, isContinueCommand ); if (isContinueCommand) { SendSystemMessage("Décision prise, la partie va continuer."); } else { SendSystemMessage("Décision prise, la partie va s'arrêter."); } txtMessage.Text = ""; } catch (System.ServiceModel.FaultException fe) { SendSystemMessage("Impossible de prendre la décision: " + fe); } } else { SendSystemMessage("La commande n'est pas valide dans le cas courant."); } } else { bool success = client.SendGameMessage( Model.UserSessionSingleton.Instance.UserToken.Value, GameToken, txtMessage.Text ); if (!success) { MessageBox.Show( "L'envoi du message n'a pas réussi. Veuillez réessayer.", "Erreur d'envoi"); } else { txtMessage.Text = ""; } } } }
private void teamState_MouseDown(object sender, MouseButtonEventArgs e) { if (!_connected) { return; } if (_lastEndGameValue) { return; } if (_currentCardToken == null) { return; } int teamIndex; FrameworkElement element = sender as FrameworkElement; if (element == null) { return; } int?elementData = element.DataContext as int?; if (elementData == null) { return; } teamIndex = elementData.Value; using (var client = new GameProxy.GameServiceClient()) { var result = client.PlayCard( GameToken, Model.UserSessionSingleton.Instance.UserToken.Value, _currentCardToken.Value, teamIndex ); if (result == GameProxy.PlayCardResult.SUCCESS) { _currentCardToken = null; SetGameState(client.GetState( Model.UserSessionSingleton.Instance.UserToken.Value, GameToken )); } else { string message; switch (result) { case Lobby.GameProxy.PlayCardResult.CANNOT_PLAY: { message = "Vous ne pouvez pas jouer cette carte dans l'état actuel."; break; } case Lobby.GameProxy.PlayCardResult.WRONG_TURN: { message = "Ce n'est pas votre tour à jouer."; break; } case Lobby.GameProxy.PlayCardResult.NOT_ALL_PLAYERS_PRESENT: { message = "Les joueurs n'ont pas tous rejoint la partie."; break; } case Lobby.GameProxy.PlayCardResult.SUCCESS: case Lobby.GameProxy.PlayCardResult.WRONG_TOKEN: case Lobby.GameProxy.PlayCardResult.WRONG_TOKEN_PLAYER: case Lobby.GameProxy.PlayCardResult.ALREADY_PLAYED: default: { message = "Une erreur non spécifiée s'est produite lors du jeu de la carte."; break; } } MessageBox.Show(message, "Erreur"); } } }
/// <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; } }