Skip to content

安装

当前生成房间后,获取到用户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']];
  };

反馈