anchor.diff:          .listen(eventListener, onError: errorListener);
     }
   
  +  RTCSignalingState get signalingState => _signalingState;
  +
  +  RTCIceGatheringState get iceGatheringState => _iceGatheringState;
  +
  +  RTCIceConnectionState get iceConnectionState => _iceConnectionState;
  +
     /*
      * PeerConnection event listener.
      */
  
positive.code:   List<MediaStream> _remoteStreams = new List();
    RTCDataChannel _dataChannel;
    Map<String, dynamic> _configuration;
  
    // public: delegate
    SignalingStateCallback onSignalingState;
  
negative.code: 
      switch (map['event']) {
        case 'signalingState':
          _signalingState = signalingStateForString(map['state']);
          if (this.onSignalingState != null)
            this.onSignalingState(_signalingState);
          break;
        case 'iceGatheringState':
          _iceGatheringState = iceGatheringStateforString(map['state']);
          if (this.onIceGatheringState != null)
            this.onIceGatheringState(_iceGatheringState);
          break;
        case 'iceConnectionState':
          _iceConnectionState = iceConnectionStateForString(map['state']);
          if (this.onIceConnectionState != null)
            this.onIceConnectionState(_iceConnectionState);
          break;
        case 'onCandidate':
          Map<dynamic, dynamic> cand = map['candidate'];
  