anchor.diff:              ws.binaryType = "arraybuffer";
               ws.onMessage.listen((MessageEvent e) {
                   ByteBuffer buf = e.data;
  -                readBuffer.push(buf);
  +                _readBuffer.push(buf);
               });
               ws.onClose.listen((_) {
  -                readBuffer.flush(force: true);
  +                _readBuffer.flush(force: true);
  +                _readBuffer.close();
                   c.complete(null);
                   log("done");
               });
  
positive.code: 
  class HttpComms extends Comms {
      Http.Client _client;
  
      HttpComms(String myserver) : super(myserver) {
          if (server.endsWith("/")) server = server.substring(0, server.length - 1);
      }
  
      @override
  
negative.code: 
      void close() {
          flush(force: true);
          _buffer = null;
          _used = 0;
          _flushfunc = null;
      }
  
      void append(ByteBuffer src, int p, int amt) {
          Uint8List src8 = new Uint8List.view(src);
          assert(_used + amt <= _maxsize);
          if (_buffer == null) {
              assert(_used == 0);
              _buffer = new Uint8List(_maxsize);
          }
          for (int i = p; i < p + amt; i++) {
              _buffer[_used] = src8[i];
              _used++;
          }
      }
  
      void flush({bool force: false}) {
          if (_buffer == null || _used == 0) return;
          if (_used < _maxsize && !force) return;
          _flushfunc(_buffer.buffer, _used);
          _buffer = null;
          _used = 0;
      }
  }
  
  