anchor.diff:          timer.complete(false);
         }
       }
  -    final responder = Completer<Map<String, List<Message>>>();
  +    responder = Completer<Map<String, List<Message>>>();
       if (!_send(id, responder)) {
         _responders[id] = responder;
         if (timeout > Duration.zero) {
           var timeoutTimer = Timer(timeout, () {
  -          if (!responder.isCompleted) {
  +          if (_responders[id] == responder) {
  +            _responders.remove(id);
               responder.complete({});
  -            _doHeartbeat(id);
  -          }
  +          }
  +          _doHeartbeat(id);
           });
           await responder.future.then((value) {
             timeoutTimer.cancel();
  
positive.code:   }
  
    void _response(String id) {
      if (_responders.containsKey(id)) {
        final responder = _responders[id];
        if (_send(id, responder)) {
          _responders.remove(id);
        }
      }
    }
  
    bool _offline(Map<String, List<Message>> topics, String id, String topic,
        ServiceContext context) {
      if (topics.containsKey(topic)) {
        final messages = topics.remove(topic);
        if (onUnsubscribe != null) {
          onUnsubscribe(id, topic, messages, context);
        }
  
negative.code: |                                                          |
  | Push plugin for Dart.                                    |
  |                                                          |
  | LastModified: Jun 06, 2021                               |
  | Author: Ma Bingyao <andot@hprose.com>                    |
  |                                                          |
  \*________________________________________________________*/
  