code: public List<Message> requestSearchResultsFrom(final int player, final CdjStatus.TrackSourceSlot slot,
                                                    final int sortOrder, final String text,
                                                    final AtomicInteger count)
              throws Exception {
          ConnectionManager.ClientTask<List<Message>> task = new ConnectionManager.ClientTask<List<Message>>() {
              @Override
              public List<Message> useClient(Client client) throws Exception {
                  return getSearchItems(slot, sortOrder, text.toUpperCase(), count, client);
              }
          };
  
          return ConnectionManager.getInstance().invokeWithClientSession(player, task, "performing search");
      }
docs: Ask the specified player for database records whose names contain {@code text}. If {@code count} is not
  {@code null}, no more than that many results will be returned, and the value will be set to the total number
  of results that were available. Otherwise all results will be returned.
  
  @param player the player number whose database is to be searched
  @param slot the slot in which the database can be found
  @param sortOrder the order in which responses should be sorted, 0 for default, see Section 6.11.1 of the
  <a href="https://github.com/Deep-Symmetry/dysentery/blob/master/doc/Analysis.pdf">Packet Analysis
  document</a> for details, although it does not seem to have an effect on searches.
  @param text the search text used to filter the results
  @param count if present, sets an upper limit on the number of results to return, and will get set
  to the actual number that were available
  
  @return the items that the specified search string; they may be a variety of different types
  
  @throws Exception if there is a problem performing the search