我编写了一个程序,该程序从套接字io接收消息,然后播放媒体文件。因此,当程序收到下一条消息时,媒体播放器将停止并播放另一条消息。我将rmarkdown::pdf_document
消息流实现为SocketIO
,将Observable<String>
实现为MediaPlayer
。因此,代码包含“订阅中订阅”:
Complatable
也许有办法避免“订阅中订阅”?删除所有可空值并使代码更具“功能性”也很好
更新
似乎class Main {
Disposable d = null;
public void start() {
ScoketIO.connect("localhost:9000").subscribe(event -> {
if (d != null)
d.dispose();
d = MediaPlayer.play(event).subscribe();
}
}
}
就是一个简单的例子:
switchMap
新事件到来时,媒体播放器已配置(停止播放)。但是,如果媒体播放器发生故障,则所有链都将失败-套接字连接也将失败,但并非如此。将ScoketIO.connect("localhost:9000")
.switchMapCompletable(event -> MediaPlayer.play(event))
.subscribe();
添加到媒体播放器也会触发重新连接。这是什么意思“不同的计算上下文”。
答案 0 :(得分:0)
如果您可以在MediaPlayer中构建Completable stop方法,则可以执行以下操作:
SocketIO.connect("localhost:9000")
.flatMapCompletable(event ->
MediaPlayer.stop()
.andThen(MediaPlayer.play(event))
).subscribe();