Browse Source

Sorting rooms list by filling

Tigran 4 years ago
parent
commit
06a2bdeed5

+ 8 - 3
MafiaTelegramBot/Controllers/RoomController.cs

@@ -91,9 +91,14 @@ namespace MafiaTelegramBot.Controllers
         {
             return await Task.Run(() =>
             {
-                var rooms = OpenedGames.Values.ToList();
-                foreach (var room in OpenedGames.Values.ToList().
-                    Where(room => room.IsPrivate || room.IsFilled() || room.IsRunning)) rooms.Remove(room);
+                async Task<int> Comparison(GameRoom room, GameRoom room2) => 
+                    await room2.GetCapacity() / await room2.GetMaximum()
+                    - await room.GetCapacity() / await room.GetMaximum();
+
+                var rooms = OpenedGames.Values
+                    .Where(room => room.IsPrivate || room.IsFilled() || room.IsRunning).
+                    ToList();
+                rooms.Sort((room, room2) => Comparison(room, room2).Result);
                 return rooms;
             });
         }

+ 3 - 0
MafiaTelegramBot/DataBase/MafiaDataBase.cs

@@ -63,6 +63,9 @@ namespace MafiaTelegramBot.DataBase
                 .Property(r => r.Parasite).HasDefaultValue(0);
             modelBuilder.Entity<OpenedRolesEntity>()
                 .Property(r => r.Werewolf).HasDefaultValue(0);
+            
+            modelBuilder.Entity<UserEntity>()
+                .Property(e => e.NickName).HasColumnType("nvarchar(max)");
         }
     }
 }

+ 10 - 0
MafiaTelegramBot/Game/GameRooms/GameRoom.Structure.cs

@@ -87,5 +87,15 @@ namespace MafiaTelegramBot.Game.GameRooms
             }
             player.ResetState();
         }
+
+        public async Task<int> GetCapacity()
+        {
+            return await Task.FromResult(Players.Count);
+        }
+
+        public async Task<int> GetMaximum()
+        {
+            return await Task.FromResult(MaxPlayers);
+        }
     }
 }