cn.leancloud.service.RealtimeClient Maven / Gradle / Ivy
package cn.leancloud.service;
import cn.leancloud.core.*;
import cn.leancloud.im.Signature;
import cn.leancloud.im.v2.conversation.AVIMConversationMemberInfo;
import com.alibaba.fastjson.JSONObject;
import io.reactivex.Observable;
import io.reactivex.functions.Consumer;
import io.reactivex.functions.Function;
import io.reactivex.schedulers.Schedulers;
import okhttp3.OkHttpClient;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
import retrofit2.converter.fastjson.FastJsonConverterFactory;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
public class RealtimeClient {
private static RealtimeClient instance = null;
public static RealtimeClient getInstance() {
if (null == instance) {
synchronized (RealtimeClient.class) {
if (null == instance) {
instance = new RealtimeClient();
}
}
}
return instance;
}
private RealtimeService service = null;
private boolean asynchronized = false;
private AppConfiguration.SchedulerCreator defaultCreator = null;
private RealtimeClient() {
this.asynchronized = AppConfiguration.isAsynchronized();
this.defaultCreator = AppConfiguration.getDefaultScheduler();
final OkHttpClient httpClient = PaasClient.getGlobalOkHttpClient();
AppRouter appRouter = AppRouter.getInstance();
appRouter.getEndpoint(AVOSCloud.getApplicationId(), AVOSService.API, false).subscribe(
new Consumer() {
@Override
public void accept(String apiHost) throws Exception {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(apiHost)
.addConverterFactory(FastJsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.client(httpClient)
.build();
service = retrofit.create(RealtimeService.class);
}
});
}
private Observable wrappObservable(Observable observable) {
if (null == observable) {
return null;
}
if (asynchronized) {
observable = observable.subscribeOn(Schedulers.io());
}
if (null != defaultCreator) {
observable = observable.observeOn(defaultCreator.create());
}
return observable;
}
public Observable createSignature(Map params) {
return wrappObservable(service.createSignature(new JSONObject(params)));
}
public Observable> queryMemberInfo(Map query, String rtmSessionToken) {
return wrappObservable(service.queryMemberInfo(rtmSessionToken, query))
.map(new Function