/// <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); }
/// <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); } }
/// <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); } }
/// <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); } }
/// <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); } }