2

我将在概念上参考“ Pushed ”与“ Polled ”流来帮助描述我的问题的目标,即“*创建一个模拟 Dart 标准输入流的数据流行为的推送数据流*”

Polled ”:在我之前的问题中,Menzoni 的回答是“ Polled ”流的一个很好的例子。流总是Dart 控制台应用程序启动并请求数据本机扩展。请求得到满足,并且响应返回到应用程序。根据我的经验,这是 Dart 流的典型用法。

Pushed ”:来自外部源的数据被推送到控制台应用程序。数据来源和传输技术无关紧要,它可以是标准输入键盘/鼠标事件、PLC 中断、数据库异步通知等。

我将使用 stdin 流来说明这个例子,它是我试图实现的数据流的一个很好的例子。virtualkeycodes/ints 形式的数据到达本机扩展,缓冲,然后需要“推送”(发送/发布)到 Dart 应用程序,而不需要来自应用程序的数据的任何拉/轮询请求。这是我试图在我的原生扩展的自定义流中实现的目标!

Dart 控制台应用程序伪代码:

Stream<List<int>> virtKeyCodes = NativeCreatePushedStream_Keycodes();   
virtKeyCodes.listen(processInts);
void processInts(List<int> kbinput) {
    print("processInts: found ${kbinput.length} kbinput chars");
    for (int i = 0; i < kbinput.length; i++) {
        print("...kbinput:${kbinput[i]}");
    }
}

本机扩展伪代码(我在这里猜!

Initial call create persistant stream
Return to console app where it starts to listen
onDataReady somehow post ints to stream
DartVM pushes to console app

谢谢你的帮助。

4

1 回答 1

2

通过异步本机扩展实现“推送”数据流

创建了 dxConsole “Windows 的 Dart 控制台库”项目,现在托管在 Github 上。

于 2014-07-30T20:24:27.787 回答