繁体   English   中英

gjs如何使用g_data_input_stream_read_line_async在Gnome Shell Extension中读取套接字流

[英]gjs How to read a socket stream in Gnome Shell Extension using g_data_input_stream_read_line_async

我正在尝试编写一个Gnome-Shell扩展,该扩展通过套接字服务器与Arduino通信。 服务器和Arduino运行良好,但是我被扩展代码侦听服务器传入的消息。

由于我需要一种非阻塞方法,因此使用read_line_async似乎很完美。

但是我无法使其正常工作。 这是我到目前为止(相关部分)得到的:

    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() {

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

        receivedline = lineout;
        // process received data

    }

当从服务器接收到一行时,异步功能就可以很好地启动,并且也可以调用_SocketRead ,但是它无法使用read_line_finish()读取数据。

我对gio和Extension开发完全陌生,所以我可能会错过一些显而易见的东西。

对我来说,似乎read_line_finish()可能缺少它的GAsyncResult参数,但是我对如何实现它一无所知

编辑:

回调函数和read_line_finish()缺少其参数。 多亏了Gerd的回答,我才得以实现。 帮助我找出GIO参考中 “描述”下链接的示例。 因此,这是用于比较的工作代码:

    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的新手,但是对编程语言的深入了解使我想到了以下部分解决方案:根据Gio DataStream参考,您必须为该方法提供所有必需的参数,例如,

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

HTH,格尔德

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM