安装
当前生成房间后,获取到用户token 可以开发调用这个SDK开发定制自己的房间模板。
$ npm install @hongtangyun/rooms-sdk --save
import sdk from '@hongtangyun/rooms-sdk';
const token = 'xxxx';
async function init() {
await sdk.config({
// 房间用户的token
token: token,
});
const roomData = await sdk.getRoomInfo()
}
API 概览
方法 | 描述 |
---|---|
config | 初始化sdk配置 |
getRoomInfo | 获取房间信息 |
getSocket | 获取并初始化socket实例 |
getRoomInitActions | 获取房间最新动作状态 |
checkToken | 检测token是否有效 |
createSubAuthToken | 创建子账号token |
getServerTime | 获取服端务真实时间 |
createWebRTCRoom | 创建webrtc房间 |
getRoomExcludeChatActions | 获取除聊天动作外的所有动作 |
getRoomChatActions | 获取所有聊天动作 |
getStorage | 获取线上存储配置 |
getProxyApiData | 取代理接口数据 |
getTestPaperList | 获取试卷列表 |
getTestPaperForID | 获取试卷详情 |
getTestPaperAnswerForID | 获取自己的试卷答案 |
setTestPaperAnswerForID | 提交自己的试卷答案 |
1. config
初始化sdk配置, 成功后才能正常使用以下功能。
await sdk.config({
// 房间用户的token
token: token,
});
2. getRoomInfo
获取房间信息,以供用户使用。
const data = await sdk.getRoomInfo();
返回
{
"roomInfo": {
"rtcType": "agoral",
"_id": "617ff3f4328ac70018af9bcc",
"name": "直播测试01",
"roomTempId": "616d5a211327e70018ea0837",
"roomTempConfig": "{\"startTime\":1627628980,\"endTime\":1659283200,\"isDualCamera\":true,\"getPapersAPIURL\":\"\",\"savePapersAPIURL\":\"\"}",
"creatorId": "6071d2f4309abf282cc62507",
"users": [{
"id": 1022101,
"name": "1022101",
"avatar": "1022101"
}, {
"id": 20211,
"name": "20211",
"avatar": "https://api.prodless.com/avatar.png"
}],
"created": "2021-11-01T14:04:36.671Z",
"updated": "2021-11-03T09:53:32.781Z",
"__v": 0
},
"roomTemp": {
"status": true,
"_id": "616d5a211327e70018ea0837",
"icon": "/sub-rooms-live",
"name": "直播模板",
"path": "sub-rooms-live",
"url": "https://sub-rooms-live_version_0_0_2.roomstudio.dagouzhi.com",
"rtcNumber": 1,
"platform": {
"web": true,
"mobile": true
},
"userSchema": "{\n \"type\": \"object\",\n \"properties\": {\n \"id\": { \n \"type\": \"integer\", \n \"pattern\": \"^([10|11|20|30|40|60])([0-9]{1,1000})$\"\n },\n \"name\": { \"type\": \"string\" },\n \"avatar\": { \"type\": \"string\" },\n \"info\": { \"type\": \"string\" }\n },\n \"required\": [\"id\", \"name\", \"avatar\"]\n}",
"configSchema": "{\n \"type\": \"object\",\n \"properties\": {\n \"startTime\": { \"type\": \"number\" },\n \"endTime\": { \"type\": \"number\" },\n \"isDualCamera\": { \"type\": \"boolean\" },\n \"getPapersAPIURL\": { \"type\": \"string\" },\n \"savePapersAPIURL\": { \"type\": \"string\" }\n },\n \"required\": [\n \"startTime\",\n \"endTime\",\n \"isDualCamera\",\n \"getPapersAPIURL\",\n \"savePapersAPIURL\"\n ]\n}",
"config": "{\n \"startTime\": 1627628980,\n \"endTime\": 1659283200,\n \"isDualCamera\": true,\n \"getPapersAPIURL\": \"\",\n \"savePapersAPIURL\": \"\"\n}",
"created": "2021-10-18T11:27:29.201Z",
"updated": "2021-11-09T05:47:03.954Z",
"__v": 0
},
"socketInfo": {
"url": "//socket.dagouzhi.com/rooms/617ff3f4328ac70018af9bcc?token=xxxxxxxxx"
},
"userInfo": {
"id": 20211,
"name": "20211",
"avatar": "https://api.prodless.com/avatar.png"
}
}
3. getSocket
返回socket实例,实时消息处理。
const scoket = await sdk.getSocket();
具体查看socekt实例
4. getRoomInitActions
获取房间最新动作状态
const initActions = await sdk.getRoomInitActions();
5. checkToken
初始化sdk配置, 成功后才能正常使用以下功能。
const data = await sdk.checkToken(token);
6. createSubAuthToken
初始化sdk配置, 成功后才能正常使用以下功能。
// 子账号权限id
const subAuthId = 1; // 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
const data = await sdk.createSubAuthToken(token, subAuthId);
7. getServerTime
初始化sdk配置, 成功后才能正常使用以下功能。
const data = await sdk.getServerTime();
8. createWebRTCRoom
初始化sdk配置, 成功后才能正常使用以下功能。
const data = await sdk.createWebRTCRoom();
9. getRoomExcludeChatActions
初始化sdk配置, 成功后才能正常使用以下功能。
const data = await sdk.getRoomExcludeChatActions();
10. getRoomChatActions
初始化sdk配置, 成功后才能正常使用以下功能。
const data = await sdk.getRoomChatActions();
11. getStorage
初始化sdk配置, 成功后才能正常使用以下功能。
const data = await sdk.getStorage('COS' | 'OSS');
返回数据:
prefix 字段为该用户指定上传前缀,不可能更改
{
"type": "OSS",
"data": {
"accessKeyId": "aaaa",
"accessKeySecret": "ddd",
"bucket": "dagouzhi",
"region": "oss-cn-qingdao",
"stsToken": "xxx",
"cname": true,
"endpoint": "https://oss.dagouzhi.com/",
"prefix": "/xx/axx/xx"
}
}
{
"type": "COS",
"data": {
"expiredTime": 1637049610,
"expiration": "2021-11-16T08:00:10Z",
"credentials": {
"sessionToken": "xxxx",
"tmpSecretId": "aaa",
"tmpSecretKey": "ddd"
},
"requestId": "ssss",
"startTime": 1637047810,
"bucket": "hongtangyun-1252095557",
"region": "ap-chengdu",
"prefix": "/xx/axx/xx"
}
}
12. getProxyApiData
初始化sdk配置, 成功后才能正常使用以下功能。
获取代理接口数据 被代理接口必须是post接口
const data = await sdk.getProxyApiData('https://xxxxx.com', {a:123});
被代理接口接收到数据格式
{
uid: user?.id,
roomid: user?.roomid,
requestData: {
a: 123
},
}
13. getTestPaperList
初始化sdk配置, 成功后才能正常使用以下功能。
获取试卷列表
const data = await sdk.getTestPaperList();
返回数据格式
{
}
14. getTestPaperForID
初始化sdk配置, 成功后才能正常使用以下功能。
获取试卷详情
const data = await sdk.getTestPaperForID("paperid");
返回数据格式
{
}
15. getTestPaperAnswerForID
初始化sdk配置, 成功后才能正常使用以下功能。
获取自己的试卷答案
const data = await sdk.getTestPaperAnswerForID("paperid");
返回数据格式
{
}
16. setTestPaperAnswerForID
初始化sdk配置, 成功后才能正常使用以下功能。
提交自己的试卷答案
const data = await sdk.setTestPaperAnswerForID("paperid", paperInfo);
返回数据格式
{
}
socekt实例
方法 | 描述 |
---|---|
emit | 发送消息 |
on | 监听 |
off | 取消监听 |
1. emit
// RoomActionData
await socekt.emit("room.joinCustomRoom", {
"roomid":"teacher_617ff3f4328ac70018af9bcc"
});
2. on
const handleActios = (data: RoomEvents) => {
}
await socekt.on(handleActios);
3. off
const handleActios = (data: RoomEvents) => {
}
await socekt.off(handleActios);
4 socket interface
/**
* 房间监听事件名
*/
export type RoomsEventsNameType = '___RoomsEvents___';
/**
* 用户系统角色
*/
export enum ToSystemEnum {
/**
* 当前房间所有用户
*/
'ALL_USER' = -99,
/**
* 服务端系统用户
*/
'SYSTEM_USER' = -100,
}
export enum ActionsEnum {
/**
* 系统消息-房间信息添加
*/
'system.ROOM_INFO_ADD' = 'system.ROOM_INFO_ADD',
/**
* 系统消息-房间信息更新
*/
'system.ROOM_INFO_UPDATE' = 'system.ROOM_INFO_UPDATE',
/**
* 系统消息-房间删除
*/
'system.ROOM_INFO_DELETE' = 'system.ROOM_INFO_DELETE',
/**
* 系统消息-房间用户添加
*/
'system.ROOM_USER_ADD' = 'system.ROOM_USER_ADD',
/**
* 系统消息-房间用户列新
*/
'system.ROOM_USER_UPDATE' = 'system.ROOM_USER_UPDATE',
/**
* 系统消息-房间用户删除
*/
'system.ROOM_USER_DELETE' = 'system.ROOM_USER_DELETE',
/**
* 系统消息-当前有其它设备正边接中
*/
'system.USER_OTHER_CONNECTED' = 'system.USER_OTHER_CONNECTED',
/**
* 系统消息-用户在其它地方登录 此连接将断开
*/
'system.USER_SQUEEZE_CONNECTED' = 'system.USER_SQUEEZE_CONNECTED',
/**
* 系统消息-系统时间
*/
'system.SERVER_TIME' = 'system.SERVER_TIME',
/**
* RTC加入频道
*/
'rtc.joinChannel' = 'rtc.joinChannel',
/**
* RTC快速切换直播频道
*/
'rtc.switchChannel' = 'rtc.switchChannel',
/**
* RTC离开频道
*/
'rtc.leaveChannel' = 'rtc.leaveChannel',
/**
* RTC启用音频模块
*/
'rtc.audio.enable' = 'rtc.audio.enable',
/**
* RTC关闭音频模块
*/
'rtc.audio.disable' = 'rtc.audio.disable',
/**
* RTC取消或恢复发布本地音频流
*/
'rtc.audio.muteLocalAudioStream' = 'rtc.audio.muteLocalAudioStream',
/**
* RTC取消或恢复订阅指定远端用户的音频流
*/
'rtc.audio.muteRemoteAudioStream' = 'rtc.audio.muteRemoteAudioStream',
/**
* RTC取消或恢复订阅所有远端用户的音频流
*/
'rtc.audio.muteAllRemoteAudioStreams' = 'rtc.audio.muteAllRemoteAudioStreams',
/**
* RTC启用视频模块
*/
'rtc.video.enable' = 'rtc.video.enable',
/**
* RTC关闭视频模块
*/
'rtc.video.disable' = 'rtc.video.disable',
/**
* RTC切换前置/后置摄像头
*/
'rtc.video.switchCamera' = 'rtc.video.switchCamera',
/**
* RTC取消或恢复发布本地视频流
*/
'rtc.video.muteLocalVideoStream' = 'rtc.video.muteLocalVideoStream',
/**
* RTC取消或恢复订阅指定远端用户的视频流
*/
'rtc.video.muteRemoteVideoStream' = 'rtc.video.muteRemoteVideoStream',
/**
* RTC取消或恢复订阅所有远端用户的视频流
*/
'rtc.video.muteAllRemoteVideoStreams' = 'rtc.video.muteAllRemoteVideoStreams',
/**
* 聊天-发信消息
*/
'chat.send' = 'chat.send',
/**
* 聊天-已读
*/
'chat.read' = 'chat.read',
/**
* 文件操作-发送文件
*/
'file.send' = 'file.send',
/**
* 文件操作-删除文件
*/
'file.delete' = 'file.delete',
/**
* 房间操作- 加入房间
*/
'room.join' = 'room.join',
/**
* 房间操作- 离开房间
*/
'room.leave' = 'room.leave',
/**
* 自定义-webrtc-创建
*/
'custom.webrtc.create' = 'custom.webrtc.create',
/**
* 自定义-webrtc-删除
*/
'custom.webrtc.delete' = 'custom.webrtc.delete',
/**
* 自定义操作-
*/
'custom.action' = 'custom.action',
/**
* 房间操作- 加入私有自定义房间
*/
'room.joinCustomRoom' = 'room.joinCustomRoom',
/**
* 房间操作- 离开私有自定义房间
*/
'room.leaveCustomRoom' = 'room.leaveCustomRoom',
'client.connect' = 'client.connect',
'client.connect_error' = 'client.connect_error',
'client.disconnect' = 'client.disconnect',
'client.err' = 'client.err',
}
export type RoomEvents = {
action: keyof IRoomActions;
data: IRoomActions[RoomEvents['action']];
roomid: string;
publisher: number;
to?: number | string | Array<number | string> | ToSystemEnum;
};
export interface SystemActions {
'system.ROOM_INFO_ADD': {};
'system.ROOM_INFO_UPDATE': {};
'system.ROOM_INFO_DELETE': {};
'system.ROOM_USER_ADD': {};
'system.ROOM_USER_UPDATE': {};
'system.ROOM_USER_DELETE': {};
'system.USER_OTHER_CONNECTED': {};
'system.USER_SQUEEZE_CONNECTED': {};
'system.SERVER_TIME': {};
}
export interface ClientActions {
'client.connect': {};
'client.connect_error': {};
'client.disconnect': {};
'client.err': {
message: string;
};
}
/**
* webRTC 视频
*/
export interface RtcActions {
/**
* RTC加入频道
*/
'rtc.joinChannel': {};
/**
* RTC快速切换直播频道
*/
'rtc.switchChannel': {};
/**
* RTC离开频道
*/
'rtc.leaveChannel': {};
/**
* RTC启用音频模块
*/
'rtc.audio.enable': {};
/**
* RTC关闭音频模块
*/
'rtc.audio.disable': {};
/**
* RTC取消或恢复发布本地音频流
*/
'rtc.audio.muteLocalAudioStream': {};
/**
* RTC取消或恢复订阅指定远端用户的音频流
*/
'rtc.audio.muteRemoteAudioStream': {};
/**
* RTC取消或恢复订阅所有远端用户的音频流
*/
'rtc.audio.muteAllRemoteAudioStreams': {};
/**
* RTC启用视频模块
*/
'rtc.video.enable': {};
/**
* RTC关闭视频模块
*/
'rtc.video.disable': {};
/**
* RTC切换前置/后置摄像头
*/
'rtc.vaido.switchCamera': {};
/**
* RTC取消或恢复发布本地视频流
*/
'rtc.video.muteLocalVideoStream': {};
/**
* RTC取消或恢复订阅指定远端用户的视频流
*/
'rtc.video.muteRemoteVideoStream': {};
/**
* RTC取消或恢复订阅所有远端用户的视频流
*/
'rtc.video.muteAllRemoteVideoStreams': {};
}
/**
* 文本消息
*/
export interface ChatActions {
'chat.send': {
id: string | number;
text: string;
createdAt: string | number;
user: {
id: string | number;
name?: string;
avatar?: string;
};
to?: {
id: string | number;
name?: string;
avatar?: string;
};
image?: string;
video?: string;
audio?: string;
system?: boolean;
sent?: boolean;
received?: boolean;
pending?: boolean;
};
'chat.read': {
id?: string;
roomTag?: string;
time: number | Date;
};
}
/**
* 文件操作
*/
export interface FileActions {
'file.send': Array<{
name: string;
url: string;
}>;
'file.delete': Array<{
id: string;
}>;
}
/**
* 自定义webrtc房间操作
*/
export interface CustomWebRTCActions {
'custom.webrtc.create': {
customRoomid: string;
};
'custom.webrtc.delete': {
customRoomid: string;
};
}
/**
* 自定义动作
*/
export interface CustomActions {
'custom.action': any;
}
export interface RoomActions {
/**
* 加入房间
*/
'room.join': {};
/**
* 离开房间
*/
'room.leave': {};
/**
* 加入私有自定义房间
*/
'room.joinCustomRoom': {
roomid: string;
};
/**
* 离开私有自定义房间
*/
'room.leaveCustomRoom': {
roomid: string;
};
}
export interface IRoomActions
extends SystemActions,
ClientActions,
RtcActions,
ChatActions,
FileActions,
CustomActions,
CustomWebRTCActions,
RoomActions {}
export type RoomActionData = {
action: keyof IRoomActions;
data: IRoomActions[RoomActionData['action']];
};