docs: def sendMsg(self, *messageParts, **kwargs):
          """
          Send request and deliver response back when available.
  
          :param messageParts: message data
          :type messageParts: tuple
          :param timeout: as keyword argument, timeout on request
          :type timeout: float
          :return: Deferred that will fire when response comes back
          """
          messageId = self._getNextId()
          d = defer.Deferred(canceller=lambda _: self._cancel(messageId))
  
          timeout = kwargs.pop('timeout', None)
          if timeout is None:
              timeout = self.defaultRequestTimeout
          assert len(kwargs) == 0, "Unsupported keyword argument"
  
          canceller = None
          if timeout is not None:
              canceller = reactor.callLater(timeout, self._timeoutRequest,
                                            messageId)
  
          self._requests[messageId] = (d, canceller)
          self.send([messageId, b''] + list(messageParts))
          return d