anchor.diff:      _log("new incomming connection");
       socket
       .transform(new ByteListDecoder())
  +    .transform(new Extract())
       .transform(new StringDecoder())
       .transform(new JsonDebugger("incomming json"))
       .transform(new JsonDecoder())
  
positive.code:     .transform(new JsonEncoder())
      .transform(new JsonDebugger("outgoing json"))
      .transform(new StringEncoder())
      .transform(new ByteListEncoder())
      .listen(socket.add);
    }
  
negative.code:     sink.add(data);
    }
  }
  
  class Compress extends StreamEventTransformer<List<int>, List<int>> {
    void handleData(List<int> data, EventSink<List<int>> sink) {
      List<int> _temp = new List();
      Stream<List<int>> stream = new Stream.fromFuture(new Future.value(data));
      stream.transform(new ZLibDeflater()).listen((List<int> compressedData) {
        _temp.addAll(compressedData);
      }, onDone: () {
        _log("data size before/after Compress: ${data.length}/${_temp.length} bytes");
        sink.add(_temp);
      });
    }
  }
  
  class Extract extends StreamEventTransformer<List<int>, List<int>> {
    void handleData(List<int> data, EventSink<List<int>> sink) {
      List<int> _temp = new List();
      Stream<List<int>> stream = new Stream.fromFuture(new Future.value(data));
      stream.transform(new ZLibInflater()).listen((List<int> extractedData) {
        _temp.addAll(extractedData);
      }, onDone: () {
        _log("data size before/after Extract: ${data.length}/${_temp.length} bytes");
        sink.add(_temp);
      });
    }
  }
  