_registerListener (eventName, filter, modelClass, cbGID, cb) {
    if (!cbGID) cbGID = null

    if (!this._listeners[cbGID]) {
      this._listeners[cbGID] = { [eventName]: [] }
    }

    const listeners = this._listeners[cbGID]

    if (!listeners[eventName]) {
      listeners[eventName] = []
    }

    const l = {
      cb,
      modelClass,
      filter
    }

    listeners[eventName].push(l)
  }
Adds a listener to the internal listener set, with an optional grouping
for batch unsubscribes (GID) & automatic ws packet matching (filterKey)

@param {string} eventName - as received on ws stream
@param {object} filter - map of index & value in ws packet
@param {object} modelClass - model to use for serialization
@param {string} cbGID - listener group ID for mass removal
@param {Function} cb - listener
@private