anchor.diff:    }
   
     void invite(String peer_id, String media) {
  -    String sessionId = this._self_id + '-' + peer_id;
  -    _send('invite', {
  -      'session_id': sessionId,
  -      'id': _self_id,
  -      'to': peer_id,
  -      'media': media,
  +    this._session_id = this._self_id + '-' + peer_id;
  +
  +    if (this.onStateChange != null) {
  +      this.onStateChange(SignalingState.CallStateNew);
  +    }
  +
  +    _createPeerConnection(peer_id, media).then((pc) {
  +      _peerConnections[peer_id] = pc;
  +      _createOffer(peer_id, pc, media);
       });
  -    this._session_id = sessionId;
     }
   
     void bye() {
  
positive.code:         'to': id,
          'description': {'sdp': s.sdp, 'type': s.type},
          'session_id': this._session_id,
        });
      } catch (e) {
        print(e.toString());
  
negative.code: 
            _createPeerConnection(id, media).then((pc) {
              _peerConnections[id] = pc;
              pc.setRemoteDescription(
                  new RTCSessionDescription(description['sdp'], description['type']));
              _createAnswer(id, pc);
            });
          }
          break;
        case 'answer':
  