/** * @param \Rx\ObservableInterface $observable * @param \Rx\ObserverInterface $observer * @param \Rx\SchedulerInterface $scheduler * @return \Rx\DisposableInterface */ public function __invoke(ObservableInterface $observable, ObserverInterface $observer, SchedulerInterface $scheduler = null) { $buffer = ""; return $observable->defaultIfEmpty(Observable::just(null))->concat(Observable::just($this->delimiter))->concatMap(function ($x) use(&$buffer) { if ($x === null || $buffer === null) { $buffer = null; return Observable::emptyObservable(); } $items = explode($this->delimiter, $buffer . $x); $buffer = array_pop($items); return Observable::fromArray($items); })->subscribe($observer, $scheduler); }