react-native-agora-chat
Version:
react native chat sdk
169 lines (160 loc) • 5.91 kB
JavaScript
import { MTfetchPresenceStatus, MTfetchSubscribedMembersWithPageNum, MTonPresenceStatusChanged, MTpresenceSubscribe, MTpresenceUnsubscribe, MTpublishPresenceWithDescription } from './__internal__/Consts';
import { Native } from './__internal__/Native';
import { chatlog } from './common/ChatConst';
import { ChatPresence } from './common/ChatPresence';
/**
* The presence manager class.
*/
export class ChatPresenceManager extends Native {
static TAG = 'ChatPresenceManager';
constructor() {
super();
this._presenceListeners = new Set();
this._presenceSubscriptions = new Map();
}
setNativeListener(event) {
chatlog.log(`${ChatPresenceManager.TAG}: setNativeListener: `);
this._presenceSubscriptions.forEach(value => {
value.remove();
});
this._presenceSubscriptions.clear();
this._presenceSubscriptions.set(MTonPresenceStatusChanged, event.addListener(MTonPresenceStatusChanged, params => {
this.invokePresenceListener(params);
}));
}
invokePresenceListener(params) {
this._presenceListeners.forEach(listener => {
const ret = [];
const l = params === null || params === void 0 ? void 0 : params.presences;
l.forEach(value => {
ret.push(new ChatPresence(value));
});
listener.onPresenceStatusChanged(ret);
});
}
/**
* Adds a presence listener.
*
* @param listener The presence listener to add.
*/
addPresenceListener(listener) {
this._presenceListeners.add(listener);
}
/**
* Removes a presence listener.
*
* @param listener The presence listener to remove.
*/
removePresenceListener(listener) {
this._presenceListeners.delete(listener);
}
/**
* Clears all presence listeners.
*/
removeAllPresenceListener() {
this._presenceListeners.clear();
}
/**
* Publishes a custom presence state.
*
* @param description The extension information of the presence state. It can be set as nil.
*
* @throws A description of the exception. See {@link ChatError}.
*/
async publishPresence(description) {
chatlog.log(`${ChatPresenceManager.TAG}: publishPresence: `, description);
let r = await Native._callMethod(MTpublishPresenceWithDescription, {
[MTpublishPresenceWithDescription]: {
desc: description
}
});
ChatPresenceManager.checkErrorFromResult(r);
}
/**
* Subscribes to the presence state of a user.
*
* If the subscription succeeds, the subscriber will receive the callback when the presence state of the user changes.
*
* @param members The array of user IDs users whose presence state you want to subscribe to.
* @param expiry The subscription duration in seconds. The duration cannot exceed 2,592,000 (30×24×3600) seconds, i.e., 30 days.
* @returns The current presence state of users to whom you have subscribed.
*
* @throws A description of the exception. See {@link ChatError}.
*/
async subscribe(members, expiry) {
chatlog.log(`${ChatPresenceManager.TAG}: subscribe: `, members, expiry);
let r = await Native._callMethod(MTpresenceSubscribe, {
[MTpresenceSubscribe]: {
members,
expiry
}
});
ChatPresenceManager.checkErrorFromResult(r);
const ret = [];
Object.entries(r === null || r === void 0 ? void 0 : r[MTpresenceSubscribe]).forEach(value => {
ret.push(new ChatPresence(value[1]));
});
return ret;
}
/**
* Unsubscribes from the presence state of the unspecified users.
*
* @param members The array of user IDs whose presence state you want to unsubscribe from.
*
* @throws A description of the exception. See {@link ChatError}.
*/
async unsubscribe(members) {
chatlog.log(`${ChatPresenceManager.TAG}: unsubscribe: `, members);
let r = await Native._callMethod(MTpresenceUnsubscribe, {
[MTpresenceUnsubscribe]: {
members
}
});
ChatPresenceManager.checkErrorFromResult(r);
}
/**
* Uses the pagination to get a list of users whose presence states you have subscribed to.
*
* @param pageNum The current page number, starting from 1.
* @param pageSize The number of subscribed users that you expect to get on each page.
* @returns The user IDs of your subscriptions. The SDK returns `null` if you does not subscribe to the presence state of any users.
*
* @throws A description of the exception. See {@link ChatError}.
*/
async fetchSubscribedMembers() {
let pageNum = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;
let pageSize = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 20;
chatlog.log(`${ChatPresenceManager.TAG}: fetchSubscribedMembers: `, pageNum, pageSize);
let r = await Native._callMethod(MTfetchSubscribedMembersWithPageNum, {
[MTfetchSubscribedMembersWithPageNum]: {
pageNum,
pageSize
}
});
ChatPresenceManager.checkErrorFromResult(r);
return r === null || r === void 0 ? void 0 : r[MTfetchSubscribedMembersWithPageNum];
}
/**
* Gets the current presence state of specified users.
*
* @param members The array of user IDs whose current presence state you want to check.
* @returns The current presence states of the specified users.
*
* @throws A description of the exception. See {@link ChatError}.
*/
async fetchPresenceStatus(members) {
chatlog.log(`${ChatPresenceManager.TAG}: fetchPresenceStatus: `, members);
let r = await Native._callMethod(MTfetchPresenceStatus, {
[MTfetchPresenceStatus]: {
members
}
});
ChatPresenceManager.checkErrorFromResult(r);
const ret = [];
Object.entries(r === null || r === void 0 ? void 0 : r[MTfetchPresenceStatus]).forEach(value => {
ret.push(new ChatPresence(value[1]));
});
return ret;
}
}
//# sourceMappingURL=ChatPresenceManager.js.map