docs: def call(self, event, data=None, namespace=None, timeout=60):
          """Emit a custom event to a client and wait for the response.
  
          :param event: The event name. It can be any string. The event names
                        ``'connect'``, ``'message'`` and ``'disconnect'`` are
                        reserved and should not be used.
          :param data: The data to send to the client or clients. Data can be of
                       type ``str``, ``bytes``, ``list`` or ``dict``. If a
                       ``list`` or ``dict``, the data will be serialized as JSON.
          :param namespace: The Socket.IO namespace for the event. If this
                            argument is omitted the event is emitted to the
                            default namespace.
          :param timeout: The waiting timeout. If the timeout is reached before
                          the client acknowledges the event, then a
                          ``TimeoutError`` exception is raised.
          """
          callback_event = self.eio.create_event()
          callback_args = []
  
          def event_callback(*args):
              callback_args.append(args)
              callback_event.set()
  
          self.emit(event, data=data, namespace=namespace,
                    callback=event_callback)
          if not callback_event.wait(timeout=timeout):
              raise exceptions.TimeoutError()
          return callback_args[0] if len(callback_args[0]) > 1 \
              else callback_args[0][0] if len(callback_args[0]) == 1 \
                  else None