聊天室搶答功能說明
更新時間:2022-05-23 14:27:50
聊天室搶答功能說明
主要說明聊天室搶答功能在觀看端以及講師端如何使用。
1、連接聊天室時,需要帶上 token 和 version 參數。
聊天室連接說明:
io.connect('ws://chat.polyv.net', {
'query': {
version: '2.0', // version必须大于等于2.0
token, // token通过接口获取,看上面的链接
},
'transports': ['websocket']
});
2、監聽開始搶答事件
- START_ANSWER_QUICKLY
參數說明
| 參數名稱 | 參數說明 | 參數類型 |
|---|---|---|
| EVENT | 事件名稱,值為 START_ANSWER_QUICKLY | string |
| limitTime | 搶答時間 | number |
| sessionId | 該場直播的 sessionId | string |
| timestamp | 發起搶答時的時間戳 | number |
| quicklyId | 搶答的 id | string |
| overTime | 搶答剩餘時間 | number |
範例
socket.on('message', function(jsonData, callback) {
const data = JSON.parse(jsonData);
if(data.EVENT === 'START_ANSWER_QUICKLY') {
// 执行相关操作
}
})
3、學員提交搶答資訊
- SUBMIT_ANSWER_QUICKLY
參數說明
| 參數名稱 | 參數說明 | 參數類型 | 是否必填 |
|---|---|---|---|
| EVENT | 事件名稱,寫死 SUBMIT_ANSWER_QUICKLY | string | 是 |
| quicklyId | 搶答 id | string | 是 |
| useTime | 搶答使用的時間 | number | 是 |
| organization | 學員所屬機構 | string | 否 |
範例
// 需要发送的参数,为json字符串
const sendData = JSON.stringify({
EVENT: 'SUBMIT_ANSWER_QUICKLY',
quicklyId: '436499f0-17d9-11ea-9ba9-6f8eb568fbcb',
useTime: 2
});
socket.emit('message', sendData , function(d) {
const { code, message } = JSON.parse(d); // code 为 请求结果状态
if (code === 200) {
console.log('抢答成功');
} else {
console.log(`抢答失败,失败原因:${message}`)
}
});
4、取得搶答狀態
開始搶答時,各個端收到 socket 訊息的時間可能不同,例如 PC 端比行動端先收到開始搶答的 socket,這時時間就會產生偏差。所以需要不斷從伺服器取得搶答的剩餘時間,以確保時間準確性。
建議每秒取得一次。
GET_ANSWER_QUICKLY_STATUS
參數說明
| 參數名稱 | 參數說明 | 參數類型 |
|---|---|---|
| EVENT | 事件名稱,寫死 GET_ANSWER_QUICKLY_STATUS | string |
範例
socket.emit(
'message',
JSON.stringify({EVENT:'GET_ANSWER_QUICKLY_STATUS'}),
function(d) {
const { code, data, message } = JSON.parse(d);
if (code === 200) {
const { overTime, answerNum } = data; // overTime为抢答剩余时间,answerNum为已抢答人数
} else {
console.log(`获取抢答状态失败,失败原因:${message}`)
}
}
)
5、講師端發送開始搶答事件
講師在推流端點擊搶答圖示,彈出視窗,輸入時間,點擊開始搶答。
- START_ANSWER_QUICKLY
參數說明
| 參數名稱 | 參數說明 | 參數類型 |
|---|---|---|
| EVENT | 事件名稱,寫死 START_ANSWER_QUICKLY | string |
| limitTime | 搶答的時間 | number |
| sessionId | 該場直播的 sessionId(如果只是測試,可以傳入隨機字串) | string |
範例
socket.emit('message', JSON.stringify({
EVENT: 'START_ANSWER_QUICKLY',
limitTime: 30,
sessionId: 'test'
}), function(d) {
const { code, message } = JSON.parse(d);
if (code === 200) {
console.log('发起抢答成功');
} else {
console.log(`发起抢答失败,失败原因:${message}`);
}
});
6、結束搶答
講師發起搶答後,頁面上有個停止搶答按鈕,講師可以主動提前停止搶答
- STOP_ANSWER_QUICKLY
參數說明
| 參數名稱 | 參數說明 | 參數類型 |
|---|---|---|
| EVENT | 事件名稱,寫死 STOP_ANSWER_QUICKLY | string |
| quicklyId | 搶答 id | string |
範例
socket.emit('message', JSON.stringify({
EVENT: 'STOP_ANSWER_QUICKLY',
quicklyId: 'test',
}), function(d) {
const { code, message } = JSON.parse(d);
if (code === 200) {
console.log('抢答停止成功成功');
} else {
console.log(`抢答结束失败,失败原因:${message}`);
}
});
