
io.agora.rtm.internal.RtmStorageImpl Maven / Gradle / Ivy
package io.agora.rtm.internal;
import io.agora.rtm.ErrorInfo;
import io.agora.rtm.Metadata;
import io.agora.rtm.MetadataOptions;
import io.agora.rtm.ResultCallback;
import io.agora.rtm.RtmConstants;
import io.agora.rtm.RtmConstants.RtmChannelType;
import io.agora.rtm.RtmConstants.RtmErrorCode;
import io.agora.rtm.RtmStorage;
import io.agora.rtm.internal.RequestInfo;
import java.util.HashMap;
class RtmStorageImpl extends RtmStorage {
private static final String TAG = RtmStorageImpl.class.getSimpleName();
private long mNativeStorage = 0;
private RtmClientImpl mRtmClient;
RtmStorageImpl(long nativeHandle, RtmClientImpl rtmClient) {
mNativeStorage = nativeHandle;
mRtmClient = rtmClient;
}
@Override
public synchronized Metadata createMetadata() {
if (mNativeStorage == 0) {
return null;
}
long handle = nativeCreateMetadata(mNativeStorage);
if (handle == 0) {
return null;
}
return new MetadataImpl(handle);
}
@Override
public synchronized void setChannelMetadata(String channelName, RtmChannelType channelType,
Metadata data, MetadataOptions options, String lockName,
ResultCallback resultCallback) {
if (mNativeStorage == 0) {
mRtmClient.processFailureCallback(
resultCallback, RtmErrorCode.NOT_INITIALIZED, RtmConstants.SET_CHANNEL_METADATA_API_STR);
return;
}
if (data == null) {
mRtmClient.processFailureCallback(resultCallback,
RtmErrorCode.STORAGE_INVALID_METADATA_INSTANCE,
RtmConstants.SET_CHANNEL_METADATA_API_STR);
return;
}
if (options == null) {
options = new MetadataOptions();
}
synchronized (mRtmClient.mRtmCallbackLock) {
RequestInfo requestInfo = new RequestInfo();
int ret = nativeSetChannelMetadata(mNativeStorage, channelName,
RtmChannelType.getValue(channelType), ((MetadataImpl) data).getNativeMetadata(), options,
lockName, requestInfo);
RtmErrorCode errorCode = RtmErrorCode.getEnum(ret);
if (errorCode == RtmErrorCode.OK) {
mRtmClient.mModifyMetadataCallback.put(requestInfo.requestId, resultCallback);
} else {
mRtmClient.processFailureCallback(
resultCallback, errorCode, RtmConstants.SET_CHANNEL_METADATA_API_STR);
}
}
}
@Override
public synchronized void updateChannelMetadata(String channelName, RtmChannelType channelType,
Metadata data, MetadataOptions options, String lockName,
ResultCallback resultCallback) {
if (mNativeStorage == 0) {
mRtmClient.processFailureCallback(resultCallback, RtmErrorCode.NOT_INITIALIZED,
RtmConstants.UPDATE_CHANNEL_METADATA_API_STR);
return;
}
if (data == null) {
mRtmClient.processFailureCallback(resultCallback,
RtmErrorCode.STORAGE_INVALID_METADATA_INSTANCE,
RtmConstants.UPDATE_CHANNEL_METADATA_API_STR);
return;
}
if (options == null) {
options = new MetadataOptions();
}
synchronized (mRtmClient.mRtmCallbackLock) {
RequestInfo requestInfo = new RequestInfo();
int ret = nativeUpdateChannelMetadata(mNativeStorage, channelName,
RtmChannelType.getValue(channelType), ((MetadataImpl) data).getNativeMetadata(), options,
lockName, requestInfo);
RtmErrorCode errorCode = RtmErrorCode.getEnum(ret);
if (errorCode == RtmErrorCode.OK) {
mRtmClient.mModifyMetadataCallback.put(requestInfo.requestId, resultCallback);
} else {
mRtmClient.processFailureCallback(
resultCallback, errorCode, RtmConstants.UPDATE_CHANNEL_METADATA_API_STR);
}
}
}
@Override
public synchronized void removeChannelMetadata(String channelName, RtmChannelType channelType,
Metadata data, MetadataOptions options, String lockName,
ResultCallback resultCallback) {
if (mNativeStorage == 0) {
mRtmClient.processFailureCallback(resultCallback, RtmErrorCode.NOT_INITIALIZED,
RtmConstants.REMOVE_CHANNEL_METADATA_API_STR);
return;
}
if (data == null) {
mRtmClient.processFailureCallback(resultCallback,
RtmErrorCode.STORAGE_INVALID_METADATA_INSTANCE,
RtmConstants.REMOVE_CHANNEL_METADATA_API_STR);
return;
}
if (options == null) {
options = new MetadataOptions();
}
synchronized (mRtmClient.mRtmCallbackLock) {
RequestInfo requestInfo = new RequestInfo();
int ret = nativeRemoveChannelMetadata(mNativeStorage, channelName,
RtmChannelType.getValue(channelType), ((MetadataImpl) data).getNativeMetadata(), options,
lockName, requestInfo);
RtmErrorCode errorCode = RtmErrorCode.getEnum(ret);
if (errorCode == RtmErrorCode.OK) {
mRtmClient.mModifyMetadataCallback.put(requestInfo.requestId, resultCallback);
} else {
mRtmClient.processFailureCallback(
resultCallback, errorCode, RtmConstants.REMOVE_CHANNEL_METADATA_API_STR);
}
}
}
@Override
public synchronized void getChannelMetadata(
String channelName, RtmChannelType channelType, ResultCallback resultCallback) {
if (resultCallback == null) {
return;
}
if (mNativeStorage == 0) {
resultCallback.onFailure(new ErrorInfo(RtmErrorCode.NOT_INITIALIZED,
mRtmClient.getErrorReason(RtmErrorCode.NOT_INITIALIZED),
RtmConstants.GET_CHANNEL_METADATA_API_STR));
return;
}
synchronized (mRtmClient.mRtmCallbackLock) {
RequestInfo requestInfo = new RequestInfo();
int ret = nativeGetChannelMetadata(
mNativeStorage, channelName, RtmChannelType.getValue(channelType), requestInfo);
RtmErrorCode errorCode = RtmErrorCode.getEnum(ret);
if (errorCode == RtmErrorCode.OK) {
mRtmClient.mGetMetadataCallback.put(requestInfo.requestId, resultCallback);
} else {
resultCallback.onFailure(new ErrorInfo(
errorCode, mRtmClient.getErrorReason(ret), RtmConstants.GET_CHANNEL_METADATA_API_STR));
}
}
}
@Override
public synchronized void setUserMetadata(
String userId, Metadata data, MetadataOptions options, ResultCallback resultCallback) {
if (mNativeStorage == 0) {
mRtmClient.processFailureCallback(
resultCallback, RtmErrorCode.NOT_INITIALIZED, RtmConstants.SET_USER_METADATA_API_STR);
return;
}
if (data == null) {
mRtmClient.processFailureCallback(resultCallback,
RtmErrorCode.STORAGE_INVALID_METADATA_INSTANCE, RtmConstants.SET_USER_METADATA_API_STR);
return;
}
if (options == null) {
options = new MetadataOptions();
}
synchronized (mRtmClient.mRtmCallbackLock) {
RequestInfo requestInfo = new RequestInfo();
int ret = nativeSetUserMetadata(
mNativeStorage, userId, ((MetadataImpl) data).getNativeMetadata(), options, requestInfo);
RtmErrorCode errorCode = RtmErrorCode.getEnum(ret);
if (errorCode == RtmErrorCode.OK) {
mRtmClient.mModifyMetadataCallback.put(requestInfo.requestId, resultCallback);
} else {
mRtmClient.processFailureCallback(
resultCallback, errorCode, RtmConstants.SET_USER_METADATA_API_STR);
}
}
}
@Override
public synchronized void updateUserMetadata(
String userId, Metadata data, MetadataOptions options, ResultCallback resultCallback) {
if (mNativeStorage == 0) {
mRtmClient.processFailureCallback(
resultCallback, RtmErrorCode.NOT_INITIALIZED, RtmConstants.UPDATE_USER_METADATA_API_STR);
return;
}
if (data == null) {
mRtmClient.processFailureCallback(resultCallback,
RtmErrorCode.STORAGE_INVALID_METADATA_INSTANCE,
RtmConstants.UPDATE_USER_METADATA_API_STR);
return;
}
if (options == null) {
options = new MetadataOptions();
}
synchronized (mRtmClient.mRtmCallbackLock) {
RequestInfo requestInfo = new RequestInfo();
int ret = nativeUpdateUserMetadata(
mNativeStorage, userId, ((MetadataImpl) data).getNativeMetadata(), options, requestInfo);
RtmErrorCode errorCode = RtmErrorCode.getEnum(ret);
if (errorCode == RtmErrorCode.OK) {
mRtmClient.mModifyMetadataCallback.put(requestInfo.requestId, resultCallback);
} else {
mRtmClient.processFailureCallback(
resultCallback, errorCode, RtmConstants.UPDATE_USER_METADATA_API_STR);
}
}
}
@Override
public synchronized void removeUserMetadata(
String userId, Metadata data, MetadataOptions options, ResultCallback resultCallback) {
if (mNativeStorage == 0) {
mRtmClient.processFailureCallback(
resultCallback, RtmErrorCode.NOT_INITIALIZED, RtmConstants.REMOVE_USER_METADATA_API_STR);
return;
}
if (data == null) {
mRtmClient.processFailureCallback(resultCallback,
RtmErrorCode.STORAGE_INVALID_METADATA_INSTANCE,
RtmConstants.REMOVE_USER_METADATA_API_STR);
return;
}
if (options == null) {
options = new MetadataOptions();
}
synchronized (mRtmClient.mRtmCallbackLock) {
RequestInfo requestInfo = new RequestInfo();
int ret = nativeRemoveUserMetadata(
mNativeStorage, userId, ((MetadataImpl) data).getNativeMetadata(), options, requestInfo);
RtmErrorCode errorCode = RtmErrorCode.getEnum(ret);
if (errorCode == RtmErrorCode.OK) {
mRtmClient.mModifyMetadataCallback.put(requestInfo.requestId, resultCallback);
} else {
mRtmClient.processFailureCallback(
resultCallback, errorCode, RtmConstants.REMOVE_USER_METADATA_API_STR);
}
}
}
@Override
public synchronized void getUserMetadata(String userId, ResultCallback resultCallback) {
if (resultCallback == null) {
return;
}
if (mNativeStorage == 0) {
resultCallback.onFailure(new ErrorInfo(RtmErrorCode.NOT_INITIALIZED,
mRtmClient.getErrorReason(RtmErrorCode.NOT_INITIALIZED),
RtmConstants.GET_USER_METADATA_API_STR));
return;
}
synchronized (mRtmClient.mRtmCallbackLock) {
RequestInfo requestInfo = new RequestInfo();
int ret = nativeGetUserMetadata(mNativeStorage, userId, requestInfo);
RtmErrorCode errorCode = RtmErrorCode.getEnum(ret);
if (errorCode == RtmErrorCode.OK) {
mRtmClient.mGetMetadataCallback.put(requestInfo.requestId, resultCallback);
} else {
resultCallback.onFailure(new ErrorInfo(
errorCode, mRtmClient.getErrorReason(ret), RtmConstants.GET_USER_METADATA_API_STR));
}
}
}
@Override
public synchronized void subscribeUserMetadata(
String userId, ResultCallback resultCallback) {
if (mNativeStorage == 0) {
mRtmClient.processFailureCallback(resultCallback, RtmErrorCode.NOT_INITIALIZED,
RtmConstants.SUBSCRIBE_USER_METADATA_API_STR);
return;
}
synchronized (mRtmClient.mRtmCallbackLock) {
RequestInfo requestInfo = new RequestInfo();
int ret = nativeSubscribeUserMetadata(mNativeStorage, userId, requestInfo);
RtmErrorCode errorCode = RtmErrorCode.getEnum(ret);
if (errorCode == RtmErrorCode.OK) {
mRtmClient.mSubscribeUserMetadataCallback.put(requestInfo.requestId, resultCallback);
} else {
mRtmClient.processFailureCallback(
resultCallback, errorCode, RtmConstants.SUBSCRIBE_USER_METADATA_API_STR);
}
}
}
@Override
public synchronized void unsubscribeUserMetadata(
String userId, ResultCallback resultCallback) {
if (mNativeStorage == 0) {
mRtmClient.processFailureCallback(resultCallback, RtmErrorCode.NOT_INITIALIZED,
RtmConstants.UNSUBSCRIBE_USER_METADATA_API_STR);
return;
}
int ret = nativeUnsubscribeUserMetadata(mNativeStorage, userId);
mRtmClient.processCallback(ret, resultCallback, RtmConstants.UNSUBSCRIBE_USER_METADATA_API_STR);
}
private native long nativeCreateMetadata(long nativeRtmStorageAndroid);
private native int nativeSetChannelMetadata(long nativeRtmStorageAndroid, String channelName,
int channelType, Long data, MetadataOptions options, String lockName,
RequestInfo requestInfo);
private native int nativeUpdateChannelMetadata(long nativeRtmStorageAndroid, String channelName,
int channelType, Long data, MetadataOptions options, String lockName,
RequestInfo requestInfo);
private native int nativeRemoveChannelMetadata(long nativeRtmStorageAndroid, String channelName,
int channelType, Long data, MetadataOptions options, String lockName,
RequestInfo requestInfo);
private native int nativeGetChannelMetadata(
long nativeRtmStorageAndroid, String channelName, int channelType, RequestInfo requestInfo);
private native int nativeSetUserMetadata(long nativeRtmStorageAndroid, String userId, Long data,
MetadataOptions options, RequestInfo requestInfo);
private native int nativeUpdateUserMetadata(long nativeRtmStorageAndroid, String userId,
Long data, MetadataOptions options, RequestInfo requestInfo);
private native int nativeRemoveUserMetadata(long nativeRtmStorageAndroid, String userId,
Long data, MetadataOptions options, RequestInfo requestInfo);
private native int nativeGetUserMetadata(
long nativeRtmStorageAndroid, String userId, RequestInfo requestInfo);
private native int nativeSubscribeUserMetadata(
long nativeRtmStorageAndroid, String userId, RequestInfo requestInfo);
private native int nativeUnsubscribeUserMetadata(long nativeRtmStorageAndroid, String userId);
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy