// Path: 2016-06-22-OneStream_VS_Multicast/src/main/java/com/gdgand/rxjava/onestreamvsmulticast/command/MulticastCommand.java
// public class MulticastCommand implements Command {
//     private final TextView tvMain;
// 
//     public MulticastCommand(TextView tvMain) {
// 
//         this.tvMain = tvMain;
//     }
// 
//     @Override
//     public void call() {
//         Observable<String> stringObservable = Observable.just("a1", "a2", "b3", "b4", "a5", "b6")
//                 .publish().refCount();
// 
//         stringObservable.observeOn(Schedulers.io())
//                 .filter(it -> it.contains("a"))
//                 .doOnNext(it -> {
//                     try {
//                         Thread.sleep(1000);
//                     } catch (InterruptedException e) {
//                         e.printStackTrace();
//                     }
//                 })
//                 .observeOn(AndroidSchedulers.mainThread())
//                 .subscribe(s -> {
//                     tvMain.setText(tvMain.getText() + "\n" + s);
//                 });
// 
//         stringObservable.observeOn(Schedulers.io())
//                 .filter(it -> it.contains("b"))
//                 .doOnNext(it -> {
//                     try {
//                         Thread.sleep(300);
//                     } catch (InterruptedException e) {
//                         e.printStackTrace();
//                     }
//                 })
//                 .observeOn(AndroidSchedulers.mainThread())
//                 .subscribe(s -> {
//                     tvMain.setText(tvMain.getText() + "\n" + s);
//                 });
// 
//     }
// }
// 
// Path: 2016-06-22-OneStream_VS_Multicast/src/main/java/com/gdgand/rxjava/onestreamvsmulticast/command/OneStreamCommand.java
// public class OneStreamCommand implements Command {
//     private final TextView tvMain;
// 
//     public OneStreamCommand(TextView tvMain) {
// 
//         this.tvMain = tvMain;
//     }
// 
//     @Override
//     public void call() {
//         Observable.just("a1", "a2", "b3", "b4", "a5", "b6")
//                 .concatMap(it -> {
// 
//                     if (it.contains("a")) {
//                         return Observable.just(it)
//                                 .compose(this::observableA);
//                     } else if (it.contains("b")) {
//                         return Observable.just(it)
//                                 .compose(this::observableB);
//                     } else {
//                         return Observable.just(it);
//                     }
// 
//                 })
//                 .subscribe();
// 
//     }
// 
//     private Observable<String> observableB(Observable<String> stringObservable) {
//         return stringObservable.observeOn(Schedulers.io())
//                 .doOnNext(s -> {
//                     try {
//                         Thread.sleep(300);
//                     } catch (InterruptedException e) {
//                         e.printStackTrace();
//                     }
//                 })
//                 .observeOn(AndroidSchedulers.mainThread())
//                 .doOnNext(s1 -> tvMain.setText(tvMain.getText() + "\n" + s1));
//     }
// 
//     private Observable<String> observableA(Observable<String> stringObservable) {
//         return stringObservable.observeOn(Schedulers.io())
//                 .doOnNext(s -> {
//                     try {
//                         Thread.sleep(1000);
//                     } catch (InterruptedException e) {
//                         e.printStackTrace();
//                     }
//                 })
//                 .observeOn(AndroidSchedulers.mainThread())
//                 .doOnNext(s1 -> tvMain.setText(tvMain.getText() + "\n" + s1));
//     }
// }


import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.TextView;
import com.gdgand.rxjava.onestreamvsmulticast.command.MulticastCommand;
import com.gdgand.rxjava.onestreamvsmulticast.command.OneStreamCommand;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
package com.gdgand.rxjava.onestreamvsmulticast;




public class MainActivity extends AppCompatActivity {

    @BindView(R.id.tv_main)
    TextView tvMain;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ButterKnife.bind(this);
    }

    @OnClick(R.id.btn_multi)
    void onMulticastClick() {
        tvMain.setText("");
// Path: 2016-06-22-OneStream_VS_Multicast/src/main/java/com/gdgand/rxjava/onestreamvsmulticast/command/MulticastCommand.java
// public class MulticastCommand implements Command {
//     private final TextView tvMain;
// 
//     public MulticastCommand(TextView tvMain) {
// 
//         this.tvMain = tvMain;
//     }
// 
//     @Override
//     public void call() {
//         Observable<String> stringObservable = Observable.just("a1", "a2", "b3", "b4", "a5", "b6")
//                 .publish().refCount();
// 
//         stringObservable.observeOn(Schedulers.io())
//                 .filter(it -> it.contains("a"))
//                 .doOnNext(it -> {
//                     try {
//                         Thread.sleep(1000);
//                     } catch (InterruptedException e) {
//                         e.printStackTrace();
//                     }
//                 })
//                 .observeOn(AndroidSchedulers.mainThread())
//                 .subscribe(s -> {
//                     tvMain.setText(tvMain.getText() + "\n" + s);
//                 });
// 
//         stringObservable.observeOn(Schedulers.io())
//                 .filter(it -> it.contains("b"))
//                 .doOnNext(it -> {
//                     try {
//                         Thread.sleep(300);
//                     } catch (InterruptedException e) {
//                         e.printStackTrace();
//                     }
//                 })
//                 .observeOn(AndroidSchedulers.mainThread())
//                 .subscribe(s -> {
//                     tvMain.setText(tvMain.getText() + "\n" + s);
//                 });
// 
//     }
// }
// 
// Path: 2016-06-22-OneStream_VS_Multicast/src/main/java/com/gdgand/rxjava/onestreamvsmulticast/command/OneStreamCommand.java
// public class OneStreamCommand implements Command {
//     private final TextView tvMain;
// 
//     public OneStreamCommand(TextView tvMain) {
// 
//         this.tvMain = tvMain;
//     }
// 
//     @Override
//     public void call() {
//         Observable.just("a1", "a2", "b3", "b4", "a5", "b6")
//                 .concatMap(it -> {
// 
//                     if (it.contains("a")) {
//                         return Observable.just(it)
//                                 .compose(this::observableA);
//                     } else if (it.contains("b")) {
//                         return Observable.just(it)
//                                 .compose(this::observableB);
//                     } else {
//                         return Observable.just(it);
//                     }
// 
//                 })
//                 .subscribe();
// 
//     }
// 
//     private Observable<String> observableB(Observable<String> stringObservable) {
//         return stringObservable.observeOn(Schedulers.io())
//                 .doOnNext(s -> {
//                     try {
//                         Thread.sleep(300);
//                     } catch (InterruptedException e) {
//                         e.printStackTrace();
//                     }
//                 })
//                 .observeOn(AndroidSchedulers.mainThread())
//                 .doOnNext(s1 -> tvMain.setText(tvMain.getText() + "\n" + s1));
//     }
// 
//     private Observable<String> observableA(Observable<String> stringObservable) {
//         return stringObservable.observeOn(Schedulers.io())
//                 .doOnNext(s -> {
//                     try {
//                         Thread.sleep(1000);
//                     } catch (InterruptedException e) {
//                         e.printStackTrace();
//                     }
//                 })
//                 .observeOn(AndroidSchedulers.mainThread())
//                 .doOnNext(s1 -> tvMain.setText(tvMain.getText() + "\n" + s1));
//     }
// }


// Path: 2016-06-22-OneStream_VS_Multicast/src/main/java/com/gdgand/rxjava/onestreamvsmulticast/MainActivity.java
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.TextView;
import com.gdgand.rxjava.onestreamvsmulticast.command.MulticastCommand;
import com.gdgand.rxjava.onestreamvsmulticast.command.OneStreamCommand;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;

package com.gdgand.rxjava.onestreamvsmulticast;




public class MainActivity extends AppCompatActivity {

    @BindView(R.id.tv_main)
    TextView tvMain;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ButterKnife.bind(this);
    }

    @OnClick(R.id.btn_multi)
    void onMulticastClick() {
        tvMain.setText("");
        new MulticastCommand(tvMain).call();