我是Akka Streams图书馆的新手,并决定用一个例子来学习它。 我试图抓住所有键盘事件并将其传递给无休止的流。我的想法是我将两个流分开进行一些单独的处理,然后将它们放在不同的接收器中。
这是我已经拥有的事件处理程序的一个简短示例。
object KeyListener extends org.jnativehook.keyboard.NativeKeyListener {
implicit val system = ActorSystem("Key-Events-Streaming-System")
implicit val materializer = ActorMaterializer()
val bufferSize = 100
//if the buffer fills up then this strategy drops the oldest elements
//upon the arrival of a new element.
val overflowStrategy = akka.stream.OverflowStrategy.dropHead
val queueNativeKeyEvents = Source.queue[NativeKeyEvent](bufferSize, overflowStrategy)
.filter(event => event.getRawCode > 0)
.to(Sink.foreach(println(_)))
.run()
def nativeKeyPressed(event: NativeKeyEvent): Unit = {
queueNativeKeyEvents.offer(event)
}
def nativeKeyTyped(event: NativeKeyEvent): Unit = {
System.out.print("test")
}
def nativeKeyReleased(event: NativeKeyEvent): Unit = {
System.out.print("test")
}
}
现在根据我的理解,我想要一个设置,每个按键我按一个事件被添加到源并通过我设置的流传输。
我如何配置这种类型的来源。 我什么时候运行"我创建的图表?
我认为我对流的基本理解在某处出错了。
更新: 是的,上面的示例工作正常,每次新元素进入时都会运行流。 我现在要处理的挑战是,我想将过滤后的流划分为图形,如果您需要一个输入并将其划分为三个流并在线下的不同路径中处理它们。 我想我可以创建一个图表,它接受一个输入,将它们分成不同的路径,并产生不同的接收器,最终完成每个路径所需的副作用工作。 我无法解决的问题是如何将此图添加到源队列?