anchor.diff:    }
   
     void onPublish(Client c, String topicUri, event, [exclude, eligible]) {
  -//    var uri = curie.decode(topicUri);
  -//
  -//    clients.forEach((client) {
  -//      client.event(topicUri, event);
  -//    });
  -
  +    // TODO: handle exclude, eligible.
       publish(topicUri, event);
     }
   
  
positive.code:       }
  
      };
  
  //    conn.onClosed = (e) {
  //      clients.remove(c);
  //    };
    }
  
    void onCall(Client c, String callId, String uri, arg) {
  
negative.code:    */
    void publish(String topicUri, event) {
      final uri = curie.decode(topicUri),
            subscribers = topicMap[uri],
            garbage = [];
  
      subscribers.forEach((client) {
        if (clients.contains(client)) {
          client.event(topicUri, event);
        } else {
          // The client is disconnected, so gc.
          garbage.add(client);
        }
      });
  
      // TODO: perfome gc when the client is disconnected?
      if (!garbage.isEmpty) {
        garbage.forEach((c) => clients.remove(c));
      }
    }
  }