Ich versuche, von einem Netzwerk-Socket zu lesen, um die Informationen in einer Gnome-Erweiterung zu verwenden. Dazu benutze ich den Gio Socketclient. Ich bin in der Lage zu verbinden und synchrone vom Eingangsstrom zu lesen. Aber ich scheitere beim asynchronen Lesen. Ich habe mein Problem in dem folgenden Skript isoliert:Gnome Javascript: Rückruf funktioniert nicht für Async-Funktionen
#!/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) {};
In meinem Beispiel wird die Funktion "doAsyncCallBack" nie aufgerufen. Der synchrone Anruf funktioniert, so dass der Server korrekte Antworten gibt.
Ein Teil der Informationen, die ich hier gefunden, aber der (kodi) Server sendet keine neue Linien: gjs How to read a socket stream in Gnome Shell Extension using g_data_input_stream_read_line_async