Я пытаюсь читать из сетевого сокета, использовать эту информацию в расширении gnome. Для этого я использую кэш-концентратор Gio. Я могу подключить и синхронизировать синхронизацию из входного потока. Но я не могу прочитать асинхрон. Я выделил свою проблему в следующем сценарии:Gnome Javascript: callback не работает для асинхронных функций
#!/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 никогда не вызывается. Синхронный вызов работает, поэтому сервер дает подсказки.
часть информации, которую я нашел здесь, но сервер (Коди) не отправка новой строки: gjs How to read a socket stream in Gnome Shell Extension using g_data_input_stream_read_line_async