void IServer.HandleUserLeaveQueue(IServerUser user, QueueAction action) { var matchmaking = GetMatchmaking(user, action); if (matchmaking == null) { return; } lock (matchmaking) { var regCount = matchmaking.GetRegisterCount(user); if (action.Count >= regCount) { matchmaking.LeaveQueueCompletely(user); } else { for (var i = 0; i < action.Count; i++) { matchmaking.LeaveQueue(user); } } user.Send(Packet.PacketTypeS2C.QueueState, Math.Max(0, regCount - action.Count)); } }
void IServer.HandleUserEnterQueue(IServerUser user, QueueAction action) { var matchmaking = GetMatchmaking(user, action); if (matchmaking == null) { return; } lock (matchmaking) { var regCount = matchmaking.GetRegisterCount(user); if (regCount >= _config.MaxQueueCount) { user.IllegalAction("Exceeded max queue action: " + _config.MaxQueueCount); return; } var queueLimitExclusive = Math.Min(_config.MaxQueueCount, regCount + action.Count); for (; regCount < queueLimitExclusive; regCount++) { matchmaking.EnterQueue(user); } user.Send(Packet.PacketTypeS2C.QueueState, regCount); } }