Skip to content

Instantly share code, notes, and snippets.

@mayuroks
Last active July 10, 2018 10:29
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mayuroks/f4395de110bef73d5fb087741847541e to your computer and use it in GitHub Desktop.
Save mayuroks/f4395de110bef73d5fb087741847541e to your computer and use it in GitHub Desktop.
/**
* Listens to user actions and sends data to remote data source.
* <p>
* Presenter implements EventListener. Whenever the server sends events
* to the Repository, it passes those events to the Presenter via EventListener.
*/
public class ChatPresenter implements ChatContract.Presenter {
@NonNull
private final BaseSchedulerProvider mSchedulerProvider;
@NonNull
private final CompositeDisposable mCompositeDisposable;
@NonNull
private final Repository mRepository;
@NonNull
private final ChatContract.View mView;
@NonNull
private final EventListener mViewEventListener;
/**
* Use this constructor to create a new ChatPresenter.
*
* @param view {@link ChatContract.View}
* @param eventListener {@link EventListener} listens to server events.
* @param schedulerProvider {@link BaseSchedulerProvider}
* @param repository {@link Repository}
*/
public ChatPresenter(@NonNull ChatContract.View view,
@NonNull EventListener eventListener,
@NonNull BaseSchedulerProvider schedulerProvider,
@NonNull Repository repository) {
mView = view;
mViewEventListener = eventListener;
mSchedulerProvider = schedulerProvider;
mRepository = repository;
// Setting the view's eventListener in the repository so that
// when server sends events to repository, it passes the
// events to the view
mRepository.setEventListener(this);
mCompositeDisposable = new CompositeDisposable();
mView.setPresenter(this);
mView.initView();
}
@Override
public void subscribe() {
}
@Override
public void unsubscribe() {
mCompositeDisposable.clear();
}
@Override
public void sendMessage(ChatMessage chatMessage) {
Disposable disposable =
mRepository.sendMessage(chatMessage)
.subscribeOn(mSchedulerProvider.io())
.observeOn(mSchedulerProvider.ui())
.subscribe(new Consumer<ChatMessage>() {
@Override
public void accept(ChatMessage chatMessage) throws Exception {
mView.onMessageDelivered(chatMessage);
}
}, new Consumer<Throwable>() {
@Override
public void accept(Throwable throwable) throws Exception {
mView.showAlert(throwable.getMessage(), true);
}
});
mCompositeDisposable.add(disposable);
}
@Override
public void onConnect(Object... args) {
mViewEventListener.onConnect(args);
}
@Override
public void onDisconnect(Object... args) {
mViewEventListener.onDisconnect(args);
}
@Override
public void onNewMessage(Object... args) {
mViewEventListener.onNewMessage(args);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment