Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/460.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript gjs如何使用g_data_input_stream_read_line_async在Gnome外壳扩展中读取套接字流_Javascript_Sockets_Asynchronous_Gnome_Gjs - Fatal编程技术网

Javascript gjs如何使用g_data_input_stream_read_line_async在Gnome外壳扩展中读取套接字流

Javascript gjs如何使用g_data_input_stream_read_line_async在Gnome外壳扩展中读取套接字流,javascript,sockets,asynchronous,gnome,gjs,Javascript,Sockets,Asynchronous,Gnome,Gjs,我正试图编写一个Gnome外壳扩展,它通过套接字服务器与Arduino通信。服务器和Arduino运行良好,但我仍停留在侦听传入服务器消息的扩展代码上 因为我需要一个非阻塞的方法,所以使用它看起来很完美 然而,我不能设法让它工作。以下是我到目前为止得到的信息(相关部分): 当从服务器接收到一行数据时,异步函数可以正常启动,并且调用\u SocketRead,但它无法使用read\u line\u finish()读取数据 我对gio和扩展开发完全陌生,所以我可能会错过一些明显的东西 在我看来,r

我正试图编写一个Gnome外壳扩展,它通过套接字服务器与Arduino通信。服务器和Arduino运行良好,但我仍停留在侦听传入服务器消息的扩展代码上

因为我需要一个非阻塞的方法,所以使用它看起来很完美

然而,我不能设法让它工作。以下是我到目前为止得到的信息(相关部分):

当从服务器接收到一行数据时,异步函数可以正常启动,并且调用
\u SocketRead
,但它无法使用
read\u line\u finish()
读取数据

我对gio和扩展开发完全陌生,所以我可能会错过一些明显的东西

在我看来,
read\u line\u finish()
可能缺少它的参数,但我不知道如何实现它

编辑:

回调函数和read_line_finish()缺少其参数。 多亏了格德的回答,我才得以成功。帮助我找出“描述”下链接的示例。下面是用于比较的工作代码:

    let sockClient, sockConnection, output_reader, receivedline;

// connect to socket
    sockClient = new Gio.SocketClient();
    sockConnection = sockClient.connect_to_host("127.0.0.1:21567", null, null);


// read server socket

    output_reader = new Gio.DataInputStream({ base_stream: sockConnection.get_input_stream() });

    output_reader.read_line_async(0, null, _SocketRead, null);


// callback

    function _SocketRead(gobject, async_res, user_data) {

        let [lineout, charlength, error] = gobject.read_line_finish(async_res);

        receivedline = lineout;
        // process received data

    }

我也是GJS新手,但对编程语言的扎实理解使我找到了以下部分解决方案:根据您的要求,必须为该方法提供所有必需的参数,例如

let asyncResult = new Gio.SimpleAsyncResult();
let length;
let lineout = output_reader.read_line_finish(asyncResult, length);
嗯,,
Gerd

非常感谢。这帮助我解决了这个问题;)太好了,你介意发布你的最终解决方案吗?如果其他人遇到类似的问题,你可以让他们看看吗?当然可以。我已经用更新的代码编辑了我的初始问题。Gnome3的完整扩展可以在这里找到:
let asyncResult = new Gio.SimpleAsyncResult();
let length;
let lineout = output_reader.read_line_finish(asyncResult, length);