code: private SessionEntry createSessionEntry(String sessionKey, Session session) {
          List<WsSessionListener> sessionListeners = new ArrayList<>();
          for (BiFunction<String, Session, WsSessionListener> producer : wsSessionListenerProducers) {
              WsSessionListener sessionListener = producer.apply(sessionKey, session);
              if (sessionListener != null) {
                  sessionListeners.add(sessionListener);
              }
          }
          return new SessionEntry(session, sessionListeners);
      }
docs: Creates a new {@link SessionEntry} for the given {@code sessionKey} and {@code session}. Iterates over
  {@link #wsSessionListenerProducers} to get {@link WsSessionListener}s that will be attached to the given
  {@code session}.
  <p>
  Note that this only produces/assigns websocket session listeners to the sessions, but the listeners are not
  told to do anything yet.
  
  @param sessionKey the sessionId or feedId
  @param session the {@link Session} for which we are creating the {@link SessionEntry}
  @return a new {@link SessionEntry}