2016-09-18 17 views
1

React-NativeのWebsocket接続を介してWatson TTS APIに接続しようとしています。接続が確立され、サーバーにメッセージを送信できますが、サーバーから戻ってくるデータは、常に空です。React-Native Websocketイベントデータプロパティがありません

event.dataプロパティが完全に欠落しているようです。反応ネイティブのコンソールにログオンすると、結果として「未定義」になります。ブラウザで同じコードを使用すると、すべてが完全に機能します。

私は0.33ネイティブ反応し、ここに私のコードです使用しています:

function connectTTS(token) { 
    var voice = "de-DE_BirgitVoice"; 
    var format = 'audio/basic'; 
    var token = token; 
    var wsURI = "wss://stream.watsonplatform.net/text-to-speech/api/v1/synthesize?voice=" + voice + "&watson-token=" + token; 

    function onOpen(evt) { 
    var message = { 
     text: "Hello world.", 
     accept: format 
    }; 
    // note: the Text to Speech service currently only accepts a single message per WebSocket connection 
    websocket.send(JSON.stringify(message)); 
    } 

    var audioParts = []; 
    var finalAudio; 
    function onMessage(evt) { 
    console.log(evt.data); 
    if (typeof evt.data === 'string') { 
     console.log('Received string message: ', evt.data) 
    } else { 
     console.log('Received ' + evt.data.size + ' binary bytes', evt.data.type); 
     audioParts.push(evt.data); 
    } 
    } 

    function onClose(evt) { 
    console.log('WebSocket closed', evt.code, evt.reason); 
    console.log(audioParts); 
    console.log(format); 
    finalAudio = new Blob(audioParts, {type: format}); 
    console.log('final audio: ', finalAudio); 
    } 

    function onError(evt) { 
    console.log('WebSocket error', evt); 
    } 

    var websocket = new WebSocket(wsURI); 
    websocket.onopen = onOpen; 
    websocket.onclose = onClose; 
    websocket.onmessage = onMessage; 
    websocket.onerror = onError; 

} 

より反応するネイティブ/のWebSocketの経験を持つ誰かが解決策を見つける私を助けることができればそれは素晴らしいことです。ありがとう。

答えて

0

対応ネイティブWebSocketイベント処理は、イベントをラップし、ラップされたイベントへのデータを含まない、イベントターゲットshim 1.1.1 libに依存します(現在の最新バージョン)そのWebSocketのイベントデータを取得するために、次の2つのアプローチの1つを使用することができる:

  1. __proto__からデータを取得します。
  2. Rewrite event-target-shim 1.1.1;

最初のアプローチ:

  • 使用<your event>.__proto__.__proto__.data

第二のアプローチ:

  • フォークイベント - ターゲットシムとのイベント - ターゲットシム1.1にリセット。 1;
  • フォーク反応 - ネイティブ。
  • 以下のコードをevent-target-shim/lib/event-wrapper.jsに追加します。
  • react-native package.jsonを書き換えて、forkしたバージョンのevent-target-shimを使用します。
  • プロジェクトのpackage.jsonを書き換えます。

var propertyDefinition = {...}exports.createEventWrapperに追加するコード:

if (event.type === "message"){ 
    propertyDefinition.data = {value: event.data, enumerable: true}; 
} 
関連する問題