示例#1
0
        /// <summary>
        /// Défini l'équipe laquelle le joueur join.
        /// </summary>
        /// <param name="player"></param>
        /// <param name="room"></param>
        /// <param name="team"></param>
        /// <returns></returns>
        public bool SetTeam(Guid player, Guid room, int team)
        {
            if (team > 2)
            {
                return(false);
            }

            try
            {
                using (MilleBornesEntities context = new MilleBornesEntities())
                {
                    var user = context.LoggedInUser
                               .First(p => p.Token == player);

                    PlayerRoomState prs = context.PlayerRoomState.First(p => p.UserId == user.UserId);
                    prs.Team = team;

                    context.SaveChanges();

                    SendRoomMessage(Guid.ParseExact("00000000-0000-0000-0000-000000000000", "D"),
                                    room,
                                    "**Le joueur " + user.User.Name + " a rejoint l'équipe #" + (team + 1).ToString() + ". **");

                    return(true);
                }
            }
            catch
            {
            }

            return(false);
        }
示例#2
0
        /// <summary>
        /// Set un joueur "prêt".
        /// </summary>
        /// <param name="player"></param>
        /// <param name="room"></param>
        /// <param name="ready"></param>
        /// <returns>True si succès, false autrement</returns>
        public bool SetReady(Guid player, bool ready)
        {
            try
            {
                using (MilleBornesEntities tities = new MilleBornesEntities())
                {
                    LoggedInUser    liu     = tities.LoggedInUser.First(p => p.Token == player);
                    PlayerRoomState prsUser = tities.PlayerRoomState.First(p => p.UserId == liu.UserId);
                    prsUser.IsReady = ready;

                    tities.SaveChanges();

                    if (ready)
                    {
                        SendRoomMessage(Guid.ParseExact("00000000-0000-0000-0000-000000000000", "D"), prsUser.Room.Token, "**" + prsUser.User.Name + " est prêt! ☺**");
                    }
                    else
                    {
                        SendRoomMessage(Guid.ParseExact("00000000-0000-0000-0000-000000000000", "D"), prsUser.Room.Token, "**" + prsUser.User.Name + " n'est pas prêt! ☹**");
                    }
                }

                return(true);
            }
            catch
            {
                return(false);
            }
        }
示例#3
0
        /// <summary>
        /// Crée la room avec le master associé.
        /// </summary>
        /// <param name="name">Nom de la salle</param>
        /// <param name="roomMaster">Guid du créateur.</param>
        /// <returns>Le guid de la room. </returns>
        public Guid?CreateRoom(string name, Guid roomMaster)
        {
            try
            {
                using (MilleBornesEntities context = new MilleBornesEntities())
                {
                    // Fetch le master id.
                    int mId = context.LoggedInUser.First(p => p.Token == roomMaster).UserId;
                    // Vérifie si déjà master d'une room ou membre d'une room.
                    bool alreadyInRoom = context.Room
                                         .Where(p => p.MasterUserId == mId)
                                         .Count() > 0;

                    if (alreadyInRoom)
                    {
                        return(null);
                    }

                    alreadyInRoom = context.PlayerRoomState
                                    .Where(p => p.UserId == mId)
                                    .Count() > 0;

                    if (alreadyInRoom)
                    {
                        return(null);
                    }

                    Guid roomGuid = Guid.NewGuid();
                    Room r        = new Room();
                    r.Name             = name;
                    r.Started          = false;
                    r.Token            = roomGuid;
                    r.MasterUserId     = mId;
                    r.GameInProgressId = null;

                    // Crée le playerroomstate du roommaster
                    PlayerRoomState prs = new PlayerRoomState();
                    prs.Room          = r;
                    prs.UserId        = mId;
                    prs.IsReady       = false;
                    prs.Order         = 0;
                    prs.Team          = 0;
                    prs.LastHeartbeat = DateTime.UtcNow;

                    context.Room.Add(r);
                    context.PlayerRoomState.Add(prs);
                    context.SaveChanges();

                    return(roomGuid);
                }
            }
            catch
            {
                return(null);
            }
        }
示例#4
0
        /// <summary>
        /// Permet de joindre une room!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
        /// </summary>
        /// <param name="player"></param>
        /// <param name="room"></param>
        /// <returns>True si succès, false autrement.</returns>
        public bool JoinRoom(Guid player, Guid room)
        {
            try
            {
                using (MilleBornesEntities context = new MilleBornesEntities())
                {
                    LoggedInUser liu = context.LoggedInUser.First(p => p.Token == player);

                    // On vérifie si le user est dans la room...
                    // vérifie si déjà dans une room
                    bool alreadyInRoom = context.PlayerRoomState
                                         .Where(p => p.UserId == liu.UserId)
                                         .Count() > 0;

                    Room r = context.Room.First(p => p.Token == room);

                    // Si il est dans une autre room.
                    if (alreadyInRoom)
                    {
                        if (r.MasterUserId == liu.UserId || r.PlayerRoomState.First(p => p.UserId == liu.UserId).Room.Token == room)
                        {
                            SendRoomMessage(Guid.ParseExact("00000000-0000-0000-0000-000000000000", "D"), room, "**Le joueur " + liu.User.Name + " revenu dans la partie ☺**");
                            return(true);
                        }

                        return(false);
                    }

                    PlayerRoomState prsUser = new PlayerRoomState();
                    prsUser.UserId        = liu.UserId;
                    prsUser.RoomId        = r.RoomId;
                    prsUser.IsReady       = false;
                    prsUser.Order         = 0;
                    prsUser.Team          = 0;
                    prsUser.LastHeartbeat = DateTime.UtcNow;

                    context.PlayerRoomState.Add(prsUser);
                    context.SaveChanges();
                    SendRoomMessage(Guid.ParseExact("00000000-0000-0000-0000-000000000000", "D"), room, "**Le joueur " + liu.User.Name + " a join la partie ☺**");
                }

                return(true);
            }
            catch
            {
                return(false);
            }
        }
示例#5
0
        /// <summary>
        /// Quitte la salle présentement dedans.
        /// </summary>
        /// <param name="player"></param>
        /// <param name="room"></param>
        /// <returns>True si succès, false autrement</returns>
        public bool LeaveRoom(Guid player, Guid room)
        {
            try
            {
                using (MilleBornesEntities tities = new MilleBornesEntities())
                {
                    LoggedInUser u = tities.LoggedInUser.First(p => p.Token == player);

                    Room r = tities.Room.First(p => p.Token == room);

                    // Si c'est le master, on DÉTRUIT LA ROOOOOOOOOOOOOOOOOOOOOOOOOM
                    // Et tout les player state.
                    // Et tous les messages.
                    if (r.MasterUserId == u.UserId)
                    {
                        var lstPrs = tities.PlayerRoomState.Where(p => p.RoomId == r.RoomId).ToList();
                        tities.Message.RemoveRange(r.Message);
                        tities.PlayerRoomState.RemoveRange(lstPrs);
                        tities.Room.Remove(r);
                    }
                    else
                    {
                        // Sinon on quitte la salle, simplement.
                        PlayerRoomState prsUser = tities.PlayerRoomState.First(p => p.UserId == u.UserId);
                        tities.PlayerRoomState.Remove(prsUser);
                    }

                    tities.SaveChanges();

                    SendRoomMessage(Guid.ParseExact("00000000-0000-0000-0000-000000000000", "D"), room, "**Le joueur " + u.User.Name + " a quitté la partie ☹**");
                }

                return(true);
            }
            catch
            {
                return(false);
            }
        }