示例#1
0
        /// <summary>
        /// Obtient les messages de la room courante.
        /// </summary>
        /// <returns></returns>
        private async Task <List <LobbyService.UserMessage> > LoadCurrentRoomMessage(Guid?room)
        {
            List <LobbyService.UserMessage> lstRoomMessagesColl = new List <LobbyService.UserMessage>();

            if (room == null)
            {
                return(lstRoomMessagesColl);
            }

            using (var svcClient = new LobbyServiceClient())
            {
                lstRoomMessagesColl = await Task.Run(() => svcClient.GetRoomMessages(room.Value, 20)
                                                     .Select(um => new LobbyService.UserMessage()
                {
                    Content = um.Content,
                    Date = um.Date.ToLocalTime(),
                    Username = um.Username
                })
                                                     .ToList());
            }

            lstRoomMessagesColl.Reverse();

            return(lstRoomMessagesColl);
        }
示例#2
0
        /// <summary>
        /// Lorsqu'on double clique sur une room.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void lstRooms_MouseDoubleClick(object sender, System.Windows.Input.MouseButtonEventArgs e)
        {
            if (tabCurrentRoom.Visibility != System.Windows.Visibility.Hidden)
            {
                MessageBox.Show("Vous ne pouvez que joindre une seule partie à la fois.", "Erreur");
                return;
            }

            using (var svcClient = new LobbyServiceClient())
            {
                ListView lvRoomsColl = sender as ListView;
                RoomInfo item        = (RoomInfo)lvRoomsColl.SelectedItem;

                bool ok = svcClient.JoinRoom(UserSessionSingleton.Instance.UserToken.Value, item.Token);

                if (!ok)
                {
                    MessageBox.Show("Impossible de joindre la partie sélectionnée.", "Erreur");
                }
                else
                {
                    LoadSelectedRoom(item.Token);
                    tabCurrentRoom.Visibility = System.Windows.Visibility.Visible;
                    tabCurrentRoom.IsSelected = true;
                    btnQuitRoom.IsEnabled     = true;

                    _changedRoom = true;
                }
            }
        }
示例#3
0
        /// <summary>
        /// Lorsqu'on clique sur ce bouton, on quitte la salle courante.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnCreateRoom_Click(object sender, RoutedEventArgs e)
        {
            using (var svcClient = new LobbyServiceClient())
            {
                Guid?room = svcClient.CreateRoom("Nouvelle partie", UserSessionSingleton.Instance.UserToken.Value);

                if (room == null)
                {
                    MessageBox.Show("La création de la salle a échouée. Veuillez réessayer.", "Erreur");
                    return;
                }
                RoomInfo ri = new RoomInfo();
                ri.MasterName = UserSessionSingleton.Instance.Name;
                ri.Name       = "Nouvelle partie";
                ri.Token      = room.Value;

                lstRooms.SelectedItem = ri;
                // Si le guid est existant donc on peut ouvrir l'onglet.
                LoadSelectedRoom(room.Value);
                tabCurrentRoom.Visibility = System.Windows.Visibility.Visible;
                tabCurrentRoom.IsSelected = true;
            }

            btnQuitRoom.IsEnabled   = true;
            btnCreateRoom.IsEnabled = false;
        }
示例#4
0
        /// <summary>
        /// Applique les changements.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnRoomApply_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                using (var svcClient = new LobbyServiceClient())
                {
                    bool ok = false;

                    if (_cmbMasterChanged)
                    {
                        ok = svcClient.SetMaster(UserSessionSingleton.Instance.UserToken.Value,
                                                 (Guid)tabCurrentRoom.DataContext, ((ListViewItem)cmbRoomMaster.SelectedItem).Name);

                        if (txtRoomName.Text.Trim().Length > 0)
                        {
                            ok = svcClient.SetName(UserSessionSingleton.Instance.UserToken.Value,
                                                   (Guid)tabCurrentRoom.DataContext, txtRoomName.Text);
                        }

                        _cmbMasterChanged = false;
                    }

                    if (!ok && _cmbMasterChanged)
                    {
                        MessageBox.Show("Impossible d'appliquer les changements, veuillez réessayer.", "Erreur");
                    }
                }
            }
            catch
            {
                MessageBox.Show("Impossible d'appliquer les changements, veuillez réessayer.", "Erreur");
                return;
            }
        }
示例#5
0
        /// <summary>
        /// Détermine que le joueur est prêt.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnReady_Click(object sender, RoutedEventArgs e)
        {
            bool ok = false;

            try
            {
                using (var svcClient = new LobbyServiceClient())
                {
                    ok = svcClient.SetReady(UserSessionSingleton.Instance.UserToken.Value, (string)btnReady.Content == "Prêt");
                }
            }
            catch
            {
            }

            if (!ok)
            {
                MessageBox.Show("Erreur du serveur, veuillez réessayer", "Erreur");
                return;
            }

            if ((string)btnReady.Content == "Prêt")
            {
                btnReady.Content = "Prêt ✔";
            }
            else
            {
                btnReady.Content = "Prêt";
            }
        }
示例#6
0
        public LobbyView()
        {
            InitializeComponent();
            LobbyServiceClient c = new LobbyServiceClient();
            c.Open();

            tabCurrentRoom.Visibility = System.Windows.Visibility.Hidden;
            tabCurrentRoom.IsSelected = false;
        }
示例#7
0
        public LobbyView()
        {
            InitializeComponent();
            LobbyServiceClient c = new LobbyServiceClient();

            c.Open();

            tabCurrentRoom.Visibility = System.Windows.Visibility.Hidden;
            tabCurrentRoom.IsSelected = false;
        }
示例#8
0
        /// <summary>
        /// Charge les salles de jeu.
        /// </summary>
        /// <returns></returns>
        private async Task <List <RoomInfo> > LoadRooms()
        {
            List <RoomInfo> openedRooms = new List <RoomInfo>();

            using (var svcClient = new LobbyServiceClient())
            {
                openedRooms = await Task.Run(() => svcClient.GetOpenRoomsInfo());
            }

            return(openedRooms);
        }
示例#9
0
        /// <summary>
        /// Obtient le Guid de la partie.
        /// </summary>
        /// <returns></returns>
        private Guid?GetGameGuid()
        {
            if (tabCurrentRoom.DataContext == null)
            {
                return(null);
            }

            using (LobbyServiceClient svcClient = new LobbyServiceClient())
            {
                Guid?guid = svcClient.GetCurrentGameToken((Guid)tabCurrentRoom.DataContext);
                UserSessionSingleton.Instance.CurrentGameToken = guid;
                return(guid);
            }
        }
示例#10
0
        /// <summary>
        /// Vérifie si il n'y a pas de nouveaux messages.
        /// </summary>
        private async void AnyPrivateMessage()
        {
            using (LobbyServiceClient client = new LobbyServiceClient())
            {
                List <string> lstSenders = await Task.Run(() => client.DoTheBigBastardThatWaveHisFlagHasNewMessageFromSomeoneIfSoTellMeLad(UserSessionSingleton.Instance.UserToken.Value));

                foreach (string name in lstSenders)
                {
                    if (_lstChats.Where(p => p.ChattingTo.Trim() == name.Trim()).Count() < 1)
                    {
                        PrivateMessageView pmv = new PrivateMessageView(this, name);
                        pmv.Show();
                        _lstChats.Add(pmv);
                        pmv.Focus();
                    }
                }
            }
        }
示例#11
0
        /// <summary>
        /// Change la sélection de l'équipe pour le joueur actuel.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void cmbTeamChosen_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if (tabCurrentRoom.IsSelected && !_isQuitting)
            {
                using (var svcClient = new LobbyServiceClient())
                {
                    bool ok = svcClient.SetTeam(
                        UserSessionSingleton.Instance.UserToken.Value,
                        (Guid)tabCurrentRoom.DataContext,
                        cmbTeamChosen.SelectedIndex);

                    if (!ok)
                    {
                        MessageBox.Show("Le serveur a été incapable de vous changer d'équipe (vraiment), veuillez réessayer!");
                    }
                }
            }
        }
示例#12
0
        /// <summary>
        /// Charge les users connectés.
        /// </summary>
        /// <returns>Dictionnaire avec les status.</returns>
        private async Task <List <ListViewUser> > LoadUsers(bool room, Guid?roomGuid = null)
        {
            List <ListViewUser> lstUsers = new List <ListViewUser>();

            using (var svcClient = new LobbyServiceClient())
            {
                if (!room)
                {
                    var users = await Task.Run(() => svcClient.GetLoggedUsers());

                    foreach (var kp in users)
                    {
                        if (kp.Value == 0)
                        {
                            lstUsers.Add(new ListViewUser(kp.Key, "Green"));
                        }
                        else if (kp.Value == 1)
                        {
                            lstUsers.Add(new ListViewUser(kp.Key, "Orange"));
                        }
                        else
                        {
                            lstUsers.Add(new ListViewUser(kp.Key, "Red"));
                        }
                    }
                }
                else
                {
                    if (roomGuid != null)
                    {
                        var users = await Task.Run(() => svcClient.GetRoomPlayers(roomGuid.Value));

                        foreach (string username in users)
                        {
                            lstUsers.Add(new ListViewUser(username, "Orange"));
                        }
                    }
                }
            }

            return(lstUsers);
        }
示例#13
0
        /// <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);
        }
示例#14
0
        /// <summary>
        /// Envoie le message sur le serveur.
        /// </summary>
        /// <remarks>Va envoyer en fonction du tab ouvert</remarks>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnSend_Click(object sender, RoutedEventArgs e)
        {
            if (tcLobbyTabs.SelectedItem != tabGeneralChat && tcLobbyTabs.SelectedItem != tabCurrentRoom)
            {
                MessageBox.Show("Sélectionner l'onglet où envoyer le message!");
                return;
            }

            txtMessage.IsEnabled = false;
            btnSend.IsEnabled    = false;

            bool ok = false;

            // Dispatch le message à la bonne endroit.
            if (tcLobbyTabs.SelectedItem == tabGeneralChat)
            {
                using (var svcClient = new UserServiceClient())
                    ok = svcClient.SendGlobalMessage(UserSessionSingleton.Instance.UserToken.Value,
                                                     txtMessage.Text.Trim());
            }
            else if (tcLobbyTabs.SelectedItem == tabCurrentRoom)
            {
                using (var svcClient = new LobbyServiceClient())
                    ok = svcClient.SendRoomMessage(UserSessionSingleton.Instance.UserToken.Value,
                                                   (Guid)tabCurrentRoom.DataContext, txtMessage.Text.Trim());
            }

            if (!ok)
            {
                MessageBox.Show("L'envoie du message n'a pas réussi. Veuillez réessayer.",
                                "Erreur d'envoie");
            }
            else
            {
                txtMessage.Text = "";
            }

            txtMessage.IsEnabled = true;
            btnSend.IsEnabled    = true;
        }
示例#15
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="room"></param>
        private void LoadSelectedRoom(Guid room)
        {
            tabCurrentRoom.DataContext = room;

            if (lstRooms.SelectedItem is RoomInfo || (tabCurrentRoom.DataContext != null && tabCurrentRoom.Visibility == System.Windows.Visibility.Visible))
            {
                using (var svcClient = new LobbyServiceClient())
                {
                    string masterName = svcClient.GetMasterName((Guid)tabCurrentRoom.DataContext);

                    if (masterName != UserSessionSingleton.Instance.Name)
                    {
                        btnStart.IsEnabled      = false;
                        btnStart.Visibility     = System.Windows.Visibility.Hidden;
                        btnRoomApply.Visibility = System.Windows.Visibility.Hidden;
                        btnRoomApply.IsEnabled  = false;
                        cmbRoomMaster.IsEnabled = false;
                        txtRoomName.IsEnabled   = false;
                    }

                    var lstPlayersMasters       = svcClient.GetRoomPlayers((Guid)tabCurrentRoom.DataContext);
                    List <ListViewUser> lstLvus = new List <ListViewUser>();

                    foreach (string p in lstPlayersMasters)
                    {
                        ListViewUser lvu = new ListViewUser(p, "Green");
                        lstLvus.Add(lvu);
                    }

                    cmbRoomMaster.ItemsSource = lstLvus;

                    if (!_cmbMasterChanged)
                    {
                        txtRoomName.Text = ((RoomInfo)lstRooms.SelectedItem).Name;
                    }

                    cmbTeamChosen.SelectedIndex = svcClient.GetCurrentTeamIndex(UserSessionSingleton.Instance.UserToken.Value);
                }
            }
        }
示例#16
0
        /// <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;
        }
示例#17
0
        /// <summary>
        /// 
        /// </summary>
        /// <param name="room"></param>
        private void LoadSelectedRoom(Guid room)
        {
            tabCurrentRoom.DataContext = room;

            if (lstRooms.SelectedItem is RoomInfo || (tabCurrentRoom.DataContext != null && tabCurrentRoom.Visibility == System.Windows.Visibility.Visible))
            {
                using (var svcClient = new LobbyServiceClient())
                {                   
                    string masterName = svcClient.GetMasterName((Guid)tabCurrentRoom.DataContext);

                    if (masterName != UserSessionSingleton.Instance.Name)
                    {
                        btnStart.IsEnabled = false;
                        btnStart.Visibility = System.Windows.Visibility.Hidden;
                        btnRoomApply.Visibility = System.Windows.Visibility.Hidden;
                        btnRoomApply.IsEnabled = false;
                        cmbRoomMaster.IsEnabled = false;
                        txtRoomName.IsEnabled = false;
                    }

                    var lstPlayersMasters = svcClient.GetRoomPlayers((Guid)tabCurrentRoom.DataContext);
                    List<ListViewUser> lstLvus = new List<ListViewUser>();

                    foreach (string p in lstPlayersMasters)
                    {
                        ListViewUser lvu = new ListViewUser(p, "Green");
                        lstLvus.Add(lvu);
                    }

                    cmbRoomMaster.ItemsSource = lstLvus;

                    if (!_cmbMasterChanged)
                    {
                        txtRoomName.Text = ((RoomInfo)lstRooms.SelectedItem).Name;
                    }

                    cmbTeamChosen.SelectedIndex = svcClient.GetCurrentTeamIndex(UserSessionSingleton.Instance.UserToken.Value);
                }
            }
        }
示例#18
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;
            }
        }
示例#19
0
        /// <summary>
        /// Détermine que le joueur est prêt.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnReady_Click(object sender, RoutedEventArgs e)
        {
            bool ok = false;
            try
            {
                using (var svcClient = new LobbyServiceClient())
                {
                    ok = svcClient.SetReady(UserSessionSingleton.Instance.UserToken.Value, (string)btnReady.Content == "Prêt");
                }
            }
            catch
            {
            }

            if (!ok)
            {
                MessageBox.Show("Erreur du serveur, veuillez réessayer", "Erreur");
                return;
            }

            if ((string)btnReady.Content == "Prêt")
                btnReady.Content = "Prêt ✔";
            else
                btnReady.Content = "Prêt";
        }
示例#20
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;
            }
        }
示例#21
0
        /// <summary>
        /// Change la sélection de l'équipe pour le joueur actuel.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void cmbTeamChosen_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if (tabCurrentRoom.IsSelected && !_isQuitting)
            {
                using (var svcClient = new LobbyServiceClient())
                {
                    bool ok = svcClient.SetTeam(
                        UserSessionSingleton.Instance.UserToken.Value,
                        (Guid)tabCurrentRoom.DataContext,
                        cmbTeamChosen.SelectedIndex);

                    if (!ok)
                    {
                        MessageBox.Show("Le serveur a été incapable de vous changer d'équipe (vraiment), veuillez réessayer!");
                    }
                }
            }
        }
示例#22
0
        /// <summary>
        /// Applique les changements.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnRoomApply_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                using (var svcClient = new LobbyServiceClient())
                {
                    bool ok = false;

                    if (_cmbMasterChanged)
                    {
                        ok = svcClient.SetMaster(UserSessionSingleton.Instance.UserToken.Value,
                            (Guid)tabCurrentRoom.DataContext, ((ListViewItem)cmbRoomMaster.SelectedItem).Name);

                        if (txtRoomName.Text.Trim().Length > 0)
                        {
                           ok = svcClient.SetName(UserSessionSingleton.Instance.UserToken.Value,
                                (Guid)tabCurrentRoom.DataContext, txtRoomName.Text);
                        }

                        _cmbMasterChanged = false;
                    }

                    if (!ok && _cmbMasterChanged)
                    {
                        MessageBox.Show("Impossible d'appliquer les changements, veuillez réessayer.", "Erreur");
                    }
                }
            }
            catch
            {
                MessageBox.Show("Impossible d'appliquer les changements, veuillez réessayer.", "Erreur");
                return;
            }
        }
示例#23
0
        /// <summary>
        /// Envoie le message sur le serveur.
        /// </summary>
        /// <remarks>Va envoyer en fonction du tab ouvert</remarks>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnSend_Click(object sender, RoutedEventArgs e)
        {
            if (tcLobbyTabs.SelectedItem != tabGeneralChat && tcLobbyTabs.SelectedItem != tabCurrentRoom)
            {
                MessageBox.Show("Sélectionner l'onglet où envoyer le message!");
                return;
            }

            txtMessage.IsEnabled = false;
            btnSend.IsEnabled = false;

            bool ok = false;

            // Dispatch le message à la bonne endroit.
            if (tcLobbyTabs.SelectedItem == tabGeneralChat)
            {
                using (var svcClient = new UserServiceClient())
                    ok = svcClient.SendGlobalMessage(UserSessionSingleton.Instance.UserToken.Value,
                        txtMessage.Text.Trim());
            }
            else if (tcLobbyTabs.SelectedItem == tabCurrentRoom)
            {
                using (var svcClient = new LobbyServiceClient())
                    ok = svcClient.SendRoomMessage(UserSessionSingleton.Instance.UserToken.Value,
                        (Guid)tabCurrentRoom.DataContext, txtMessage.Text.Trim());
            }

            if (!ok)
            {
                MessageBox.Show("L'envoie du message n'a pas réussi. Veuillez réessayer.",
                    "Erreur d'envoie");
            }
            else
                txtMessage.Text = "";

            txtMessage.IsEnabled = true;
            btnSend.IsEnabled = true;
        }
示例#24
0
        /// <summary>
        /// Charge les users connectés.
        /// </summary>
        /// <returns>Dictionnaire avec les status.</returns>
        private async Task<List<ListViewUser>> LoadUsers(bool room, Guid? roomGuid = null)
        {
            List<ListViewUser> lstUsers = new List<ListViewUser>();

            using (var svcClient = new LobbyServiceClient())
            {
                if (!room)
                {
                    var users = await Task.Run(() => svcClient.GetLoggedUsers());

                    foreach (var kp in users)
                    {
                        if (kp.Value == 0)
                            lstUsers.Add(new ListViewUser(kp.Key, "Green"));
                        else if (kp.Value == 1)
                            lstUsers.Add(new ListViewUser(kp.Key, "Orange"));
                        else
                            lstUsers.Add(new ListViewUser(kp.Key, "Red"));
                    }
                }
                else
                {
                    if (roomGuid != null)
                    {
                        var users = await Task.Run(() => svcClient.GetRoomPlayers(roomGuid.Value));

                        foreach (string username in users)
                            lstUsers.Add(new ListViewUser(username, "Orange"));
                    }
                }
            }

            return lstUsers;
        }
示例#25
0
        /// <summary>
        /// Obtient les messages de la room courante.
        /// </summary>
        /// <returns></returns>
        private async Task<List<LobbyService.UserMessage>> LoadCurrentRoomMessage(Guid? room)
        {
            List<LobbyService.UserMessage> lstRoomMessagesColl = new List<LobbyService.UserMessage>();

            if (room == null)
                return lstRoomMessagesColl;

            using (var svcClient = new LobbyServiceClient())
            {
                lstRoomMessagesColl = await Task.Run(() => svcClient.GetRoomMessages(room.Value, 20)
                        .Select(um => new LobbyService.UserMessage()
                        {
                            Content = um.Content,
                            Date = um.Date.ToLocalTime(),
                            Username = um.Username
                        })
                        .ToList());
            }

            lstRoomMessagesColl.Reverse();

            return lstRoomMessagesColl;
        }
示例#26
0
        /// <summary>
        /// Vérifie si il n'y a pas de nouveaux messages.
        /// </summary>
        private async void AnyPrivateMessage()
        {
            using (LobbyServiceClient client = new LobbyServiceClient())
            {
                List<string> lstSenders = await Task.Run(() => client.DoTheBigBastardThatWaveHisFlagHasNewMessageFromSomeoneIfSoTellMeLad(UserSessionSingleton.Instance.UserToken.Value));

                foreach (string name in lstSenders)
                {
                    if (_lstChats.Where(p => p.ChattingTo.Trim() == name.Trim()).Count() < 1)
                    {
                        PrivateMessageView pmv = new PrivateMessageView(this, name);
                        pmv.Show();
                        _lstChats.Add(pmv);
                        pmv.Focus();
                    }
                }
            }
        }
示例#27
0
        /// <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;
        }
示例#28
0
        /// <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;
        }
示例#29
0
        /// <summary>
        /// Charge les salles de jeu.
        /// </summary>
        /// <returns></returns>
        private async Task<List<RoomInfo>> LoadRooms()
        {
            List<RoomInfo> openedRooms = new List<RoomInfo>();

            using (var svcClient = new LobbyServiceClient())
            {
                openedRooms = await Task.Run(() => svcClient.GetOpenRoomsInfo());
            }

            return openedRooms;
        }
示例#30
0
        /// <summary>
        /// Lorsqu'on clique sur ce bouton, on quitte la salle courante.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnCreateRoom_Click(object sender, RoutedEventArgs e)
        {
            using (var svcClient = new LobbyServiceClient())
            {
                Guid? room = svcClient.CreateRoom("Nouvelle partie", UserSessionSingleton.Instance.UserToken.Value);

                if (room == null)
                {
                    MessageBox.Show("La création de la salle a échouée. Veuillez réessayer.", "Erreur");
                    return;
                }
                RoomInfo ri = new RoomInfo();
                ri.MasterName = UserSessionSingleton.Instance.Name;
                ri.Name = "Nouvelle partie";
                ri.Token = room.Value;

                lstRooms.SelectedItem = ri;
                // Si le guid est existant donc on peut ouvrir l'onglet.
                LoadSelectedRoom(room.Value);
                tabCurrentRoom.Visibility = System.Windows.Visibility.Visible;
                tabCurrentRoom.IsSelected = true;
            }

            btnQuitRoom.IsEnabled = true;
            btnCreateRoom.IsEnabled = false;
        }
示例#31
0
        /// <summary>
        /// Obtient le Guid de la partie.
        /// </summary>
        /// <returns></returns>
        private Guid? GetGameGuid()
        {
            if (tabCurrentRoom.DataContext == null)
                return null;

            using (LobbyServiceClient svcClient = new LobbyServiceClient())
            {
                Guid? guid = svcClient.GetCurrentGameToken((Guid)tabCurrentRoom.DataContext);
                UserSessionSingleton.Instance.CurrentGameToken = guid;
                return guid;
            }
        }
示例#32
0
        /// <summary>
        /// Lorsqu'on double clique sur une room.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void lstRooms_MouseDoubleClick(object sender, System.Windows.Input.MouseButtonEventArgs e)
        {
            if (tabCurrentRoom.Visibility != System.Windows.Visibility.Hidden)
            {
                MessageBox.Show("Vous ne pouvez que joindre une seule partie à la fois.", "Erreur");
                return;
            }

            using (var svcClient = new LobbyServiceClient())
            {
                ListView lvRoomsColl = sender as ListView;
                RoomInfo item = (RoomInfo)lvRoomsColl.SelectedItem;
  
                bool ok = svcClient.JoinRoom(UserSessionSingleton.Instance.UserToken.Value, item.Token);

                if (!ok)
                {
                    MessageBox.Show("Impossible de joindre la partie sélectionnée.", "Erreur");
                }
                else
                {
                    LoadSelectedRoom(item.Token);
                    tabCurrentRoom.Visibility = System.Windows.Visibility.Visible;
                    tabCurrentRoom.IsSelected = true;
                    btnQuitRoom.IsEnabled = true;

                    _changedRoom = true;
                }
            }
        }