_handleChannelMessage (msg, rawMsg) {
    const [chanId, type] = msg
    const channelData = this._channelMap[chanId]

    if (!channelData) {
      debug('recv msg from unknown channel %d: %j', chanId, msg)
      return
    }

    if (msg.length < 2) return
    if (msg[1] === 'hb') return

    if (channelData.channel === 'book') {
      if (type === 'cs') {
        this._handleOBChecksumMessage(msg, channelData)
      } else {
        this._handleOBMessage(msg, channelData, rawMsg)
      }
    } else if (channelData.channel === 'trades') {
      this._handleTradeMessage(msg, channelData)
    } else if (channelData.channel === 'ticker') {
      this._handleTickerMessage(msg, channelData)
    } else if (channelData.channel === 'candles') {
      this._handleCandleMessage(msg, channelData)
    } else if (channelData.channel === 'status') {
      this._handleStatusMessage(msg, channelData)
    } else if (channelData.channel === 'auth') {
      this._handleAuthMessage(msg, channelData)
    } else {
      this._propagateMessageToListeners(msg, channelData)
      this.emit(channelData.channel, msg)
    }
  }
@param {Array} msg - message
@param {string} rawMsg - message JSON
@private