anchor.diff:        if(ev.dataTransfer.files.length > 0) {
           ev.dataTransfer.files.forEach((File file) {
             room.peers.forEach((Peer peer) {
  +            files[file.name] = file;
               peer.createChannel(file.name, {'ordered': true, 'reliable': true});
  -            files[file.name] = file;
             });
           });
         }
  
positive.code:     room.onJoin.listen(_onPeerJoined);
      
      document.onDragEnter.listen((MouseEvent ev) {
      });
      
      document.onDragLeave.listen((MouseEvent ev) {
  
negative.code: P2PClient client;
  Map<String, File> files = {};
  void _onPeerJoined(Peer peer) {
    // TODO(rh): It looks like we cannot open another RtcDataChannel when the old one is still open
    peer.onChannelCreated.listen((RtcDataChannel channel) {
      print('Channel created with label ${channel.label} and id ${channel.id}');
      channel.binaryType = 'arraybuffer';
      
      channel.onClose.listen((Event ev) {
        print('Channel ${channel.label} closed');
      });
            
      channel.onError.listen((Event ev) {
        print('Channel ${channel.label} error: ${channel.readyState}');
      });
      
      print('Channel.readyState = ${channel.readyState}');
      Timer stateTimer = new Timer.periodic(new Duration(seconds: 1), (Timer t) {
        print('Channel.readyState = ${channel.readyState}');
      });
      
      if(files.containsKey(channel.label)) {
        print('Sender');
        
        channel.onOpen.listen((Event ev) {
          stateTimer.cancel();
          print('Channel opened');
          final File file = files[channel.label];
          final int startTime = new DateTime.now().millisecondsSinceEpoch;
          
          print('File to send: ${file.name} ${file.size}');
          
          var chunkSize = 16384;
          sliceFile(int offset) {
            FileReader reader = new FileReader();
            reader.onLoadEnd.listen((Event ev) {
              //print('bytes in buffer (before): ${channel.bufferedAmount}');
              channel.send(reader.result);
              //print('bytes in buffer (after): ${channel.bufferedAmount}');
              if (file.size > offset + (reader.result as TypedData).lengthInBytes) {
                // new Future(() => sliceFile(offset + chunkSize));
                // 0 Delay sending
                sliceFile(offset + chunkSize);
              } else {
                int time = new DateTime.now().millisecondsSinceEpoch - startTime;
                print('Sending done after ${time}ms');
                channel.send('done');
              }
            });
            Blob slice = file.slice(offset, offset + chunkSize);
  