Esempio n. 1
0
        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);
                }
            }
        }
Esempio n. 2
0
 private void UpdateState()
 {
     using (var client = new GameProxy.GameServiceClient())
     {
         _gameState = client.GetState(
             Model.UserSessionSingleton.Instance.UserToken.Value,
             GameToken
             );
     }
 }
Esempio n. 3
0
        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
                        );
                }
            }
        }
Esempio n. 4
0
        /// <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...");
            }
        }
Esempio n. 5
0
        /// <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...");
            }
        }
Esempio n. 6
0
        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());
                }
            }
        }
Esempio n. 7
0
        /// <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;
            }
        }
Esempio n. 8
0
        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 = "";
                    }
                }
            }
        }
Esempio n. 9
0
        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
                    );
                }
            }
        }
Esempio n. 10
0
        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");
                }
            }
        }
Esempio n. 11
0
        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);
                }
            }
        }
Esempio n. 12
0
 private void UpdateState()
 {
     using (var client = new GameProxy.GameServiceClient())
     {
         _gameState = client.GetState(
             Model.UserSessionSingleton.Instance.UserToken.Value,
             GameToken
         );
     }
 }
Esempio n. 13
0
        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());
                }
            }
        }
Esempio n. 14
0
        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 = "";
                    }
                }
            }
        }
Esempio n. 15
0
        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");
                }
            }
        }
Esempio n. 16
0
        /// <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;
            }
        }