Skip to content

Commit a358b6e

Browse files
committed
StockParser with TestScheduler
1 parent 70b3256 commit a358b6e

File tree

1 file changed

+23
-29
lines changed

1 file changed

+23
-29
lines changed

StockParser.java

+23-29
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
import rx.Observable;
22
import rx.Scheduler;
33
import rx.Subscriber;
4+
import rx.Subscription;
45
import rx.functions.Action1;
56
import rx.schedulers.Schedulers;
7+
import rx.schedulers.TestScheduler;
68

79
import java.io.File;
810
import java.io.IOException;
@@ -17,52 +19,44 @@ public static void main(String[] args) throws IOException {
1719
public static void parseFile(String filename) throws IOException {
1820
Scanner scanner = new Scanner(new File(filename));
1921

20-
Scheduler scheduler = Schedulers.newThread();
22+
//Scheduler scheduler = Schedulers.newThread();
23+
TestScheduler scheduler = Schedulers.test();
2124

2225
Observable<Stock> stocks = Observable.create(new rx.Observable.OnSubscribe<Stock>() {
2326
@Override
2427
public void call(Subscriber<? super Stock> subscriber) {
2528
scheduler.schedule(new Action1<Scheduler.Inner>() {
2629
@Override
2730
public void call(Scheduler.Inner inner) {
31+
try {
32+
if (scanner.hasNextLine()) {
33+
Stock stock = parseLine(scanner.nextLine());
34+
subscriber.onNext(stock);
35+
} else {
36+
subscriber.onCompleted();
37+
}
38+
} catch(Throwable t) {
39+
subscriber.onError(t);
40+
}
41+
42+
final Action1<Scheduler.Inner> innerAction = this;
2843
inner.schedule(new Action1<Scheduler.Inner>() {
2944
@Override
3045
public void call(Scheduler.Inner inner) {
31-
32-
try {
33-
if (scanner.hasNextLine()) {
34-
Stock stock = parseLine(scanner.nextLine());
35-
subscriber.onNext(stock);
36-
} else {
37-
subscriber.onCompleted();
38-
}
39-
} catch(Throwable t) {
40-
subscriber.onError(t);
41-
}
42-
43-
final Action1<Scheduler.Inner> innerAction = this;
44-
inner.schedule(new Action1<Scheduler.Inner>() {
45-
@Override
46-
public void call(Scheduler.Inner inner) {
47-
innerAction.call(inner);
48-
}
49-
}, 1, TimeUnit.SECONDS);
50-
46+
innerAction.call(inner);
5147
}
52-
});
48+
}, 1, TimeUnit.SECONDS);
5349
}
5450
});
5551
}
5652
});
5753

58-
stocks.subscribe(new Action1<Stock>() {
59-
@Override
60-
public void call(Stock stock) {
61-
System.out.println(stock);
62-
}
63-
});
54+
Subscription subscription = stocks.timestamp(scheduler).subscribe(System.out::println);
6455

65-
System.in.read();
56+
while (!subscription.isUnsubscribed()) {
57+
System.in.read();
58+
scheduler.advanceTimeBy(1, TimeUnit.SECONDS);
59+
}
6660
}
6761

6862
public static Stock parseLine(String line) {

0 commit comments

Comments
 (0)