anchor.diff:  |                                                          |
   | Push plugin for Dart.                                    |
   |                                                          |
  -| LastModified: May 21, 2020                               |
  +| LastModified: Jun 06, 2021                               |
   | Author: Ma Bingyao <andot@hprose.com>                    |
   |                                                          |
   \*________________________________________________________*/
  
positive.code:         timer.complete(false);
        }
      }
      final responder = Completer<Map<String, List<Message>>>();
      if (!_send(id, responder)) {
        _responders[id] = responder;
        if (timeout > Duration.zero) {
          var timeoutTimer = Timer(timeout, () {
            if (!responder.isCompleted) {
              responder.complete({});
              _doHeartbeat(id);
            }
          });
          await responder.future.then((value) {
            timeoutTimer.cancel();
  
negative.code: 
    void _message() async {
      while (true) {
        var err;
        try {
          final topics = await client.invoke<Map<String, List<Message>>>('<');
          if (topics == null) return;
          _dispatch(topics);
          continue;
        } catch (e) {
          err = e;
        }
        while (err != null) {
          if (err is! TimeoutException) {
            if (retryInterval > Duration.zero) {
              await Future.delayed(retryInterval);
            }
            if (onError != null) {
              onError(e);
            }
          }
          err = null;
          for (var topic in _callbacks.keys) {
            try {
               await client.invoke<bool>('+', [topic]);
            } catch (e) {
              err = e;
              break;
            }
          }
        }
  