All Downloads are FREE. Search and download functionalities are using the official Maven repository.

cn.leancloud.service.RealtimeClient Maven / Gradle / Ivy

There is a newer version: 8.2.28
Show newest version
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>, List>() {
              @Override
              public List apply(Map> rawResult) throws Exception {
                List objects = rawResult.get("results");
                List result = new LinkedList();
                for (JSONObject object: objects) {
                  AVIMConversationMemberInfo tmp = AVIMConversationMemberInfo.createInstance(object);
                  result.add(tmp);
                }
                return result;
              }
            });
  }

  public Observable subscribeLiveQuery(Map params) {
    return wrappObservable(service.subscribe(new JSONObject(params)));
  }
  public Observable unsubscribeLiveQuery(Map params) {
    return wrappObservable(service.unsubscribe(new JSONObject(params)));
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy