anchor.diff:    int _unmaskingIndex;
   
     int _currentMessageType;
  -  List<int> _closePayload;
  +  List<int> _controlPayload;
   
     Function onMessageStart;
     Function onMessageData;
     Function onMessageEnd;
  +  Function onPing;
  +  Function onPong;
     Function onClosed;
     Function onError;
   }
  
positive.code:               break;
  
              case _WebSocketOpcode.CLOSE:
                if (_currentMessageType != _WebSocketMessageType.NONE) {
                  throw new WebSocketException("Protocol error");
                }
                _currentMessageType = _WebSocketMessageType.CLOSE;
                break;
  
              case _WebSocketOpcode.PING:
                // TODO(sgjesse): Handle ping.
                throw new UnsupportedOperationException("Web socket PING");
                break;
  
              case _WebSocketOpcode.PONG:
                // TODO(sgjesse): Handle pong.
                throw new UnsupportedOperationException("Web socket PONG");
                break;
  
              default:
  
negative.code:     _remainingMaskingKeyBytes = null;
      _remainingPayloadBytes = null;
      _unmaskingIndex = 0;
      _controlPayload = null;
    }
  
    void _reportError(e) {
  