2017-02-18 16 views
0

ネットワークソケットから読み込みしようとしています。その情報をgnome拡張子で使用します。そのために私はGioソケットクライアントを使用しています。私は、入力ストリームからシンクロンを接続し読み込むことができます。しかし、私はasynchroneの読書に失敗します。私は次のスクリプトで私の問題を切り分けました:Gnome Javascript:非同期関数のコールバックが機能しません

#!/usr/bin/gjs 

const Gio = imports.gi.Gio; 


var doAsyncCallBack = function(gobject, async_res, user_data) { 
    print("ASYNC test: doCallBack"); 
    let lineout, charlength, error; 
    [lineout, charlength, error] = gobject.read_upto_finish(async_res); 
    print("ASYNC test: " + lineout + " (" + charlength + ")"); 
}; 


let sc = new Gio.SocketClient(); 
let scc = sc.connect_to_host("kodi", 9090, null); 
let dis = new Gio.DataInputStream({ base_stream: scc.get_input_stream() }); 

//sync 
print("sync test: started"); 
let valuestr, valueint; 
[valuestr, valueint] = dis.read_upto("}" , -1, null); 
print("sync test: " + valuestr + " (" + valueint + ")"); 

//async 
print("ASYNC test: started"); 
dis.read_upto_async("}" , -1, 0, null, doAsyncCallBack); 

// keep in a loop. 
print("(press [crtl-c] to end)"); 
while (0 == 0) {}; 

私の例では、 "doAsyncCallBack"関数は呼び出されません。 synchrone呼び出しが機能するので、サーバーはプロッパー応答を出しています。

私はここで見つけましたが、(KODI)サーバが新しいラインを送信していない情報の一部:gjs How to read a socket stream in Gnome Shell Extension using g_data_input_stream_read_line_async

答えて

0

私はコールバックが私のスクリプトでは動作しない理由を見つけました。基本的には、コードの最後の部分でした。

// while (0 == 0) {}; 
Clutter.init(null); 
Clutter.main(); 

これは、動作させるために必要なことでした。

関連する問題