public async Task QueueRequest(ConnectedUser user, MatchMakerQueueRequest cmd) { var banTime = BannedSeconds(user.Name); if (banTime != null) { await UpdatePlayerStatus(user.Name); await user.Respond($"Please rest and wait for {banTime}s because you refused previous match"); return; } // already invited ignore requests PlayerEntry entry; if (players.TryGetValue(user.Name, out entry) && entry.InvitedToPlay) { await UpdatePlayerStatus(user.Name); return; } var wantedQueueNames = cmd.Queues?.ToList() ?? new List<string>(); var wantedQueues = possibleQueues.Where(x => wantedQueueNames.Contains(x.Name)).ToList(); if (wantedQueues.Count == 0) // delete { await RemoveUser(user.Name, true); return; } players.AddOrUpdate(user.Name, (str) => new PlayerEntry(user.User, wantedQueues), (str, usr) => { usr.UpdateTypes(wantedQueues); return usr; }); // if nobody is invited, we can do tick now to speed up things if (invitationBattles?.Any() != true) OnTick(); else await UpdateAllPlayerStatuses(); // else we just send statuses }
public async Task QueueRequest(ConnectedUser user, MatchMakerQueueRequest cmd) { var banTime = BannedSeconds(user.Name); if (banTime != null) { await UpdatePlayerStatus(user.Name); await user.Respond($"Please rest and wait for {banTime}s because you refused previous match"); return; } // already invited ignore requests PlayerEntry entry; if (players.TryGetValue(user.Name, out entry) && entry.InvitedToPlay) { await UpdatePlayerStatus(user.Name); return; } var wantedQueueNames = cmd.Queues?.ToList() ?? new List<string>(); var wantedQueues = possibleQueues.Where(x => wantedQueueNames.Contains(x.Name)).ToList(); var party = server.PartyManager.GetParty(user.Name); if (party != null) wantedQueues = wantedQueues.Where(x => x.MaxSize/2 >= party.UserNames.Count).ToList(); // if is in party keep only queues where party fits if (wantedQueues.Count == 0) // delete { await RemoveUser(user.Name, true); return; } await AddOrUpdateUser(user, wantedQueues); }