/* ============================================================================ *\
|| ########################################################################## ||
|| # Auction Software Marketplace Release: 0.6 Build 0.7 # ||
|| # ---------------------------------------------------------------------- # ||
|| # License # 35YAHCNR9344X6O666C123AB # ||
|| # ---------------------------------------------------------------------- # ||
|| # Copyright ©2014–2021 Develop Scripts LLC. All Rights Reserved # ||
|| # This file may not be redistributed in whole or significant part. # ||
|| # ------------- AUCTION SOFTWARE IS NOT FREE SOFTWARE ------------------ # ||
|| # http://www.auctionsoftwaremarketplace.com|support@auctionsoftware.com # ||
|| # ---------------------------------------------------------------------- # ||
|| ########################################################################## ||
\* ============================================================================ */
/* eslint-disable prefer-destructuring */
/* eslint-disable no-param-reassign */
const webrtc = require('wrtc')
const videoModule = require('../../modules/video').default
const { jsonResponse } = require('../logger')
let senderStream
function handleTrackEvent(e, peer) {
senderStream = e.streams[0]
}
module.exports = {
/**
* Show video stream
*
* @memberOf frontend.video
* @param {videoModule.getsenderstream} object
*/
videoStream: async (req, res) => {
try {
const [results1] = await Promise.all([videoModule.getsenderstream(req, req.body)])
if (results1.length > 0) {
const peer = new webrtc.RTCPeerConnection({
iceServers: [
{
urls: global.TurnServer.url,
credential: global.TurnServer.credential,
username: global.TurnServer.username,
},
],
})
const desc = new webrtc.RTCSessionDescription(req.body.sdp)
await peer.setRemoteDescription(desc)
senderStream.getTracks().forEach((track) => peer.addTrack(track, senderStream))
const answer = await peer.createAnswer()
await peer.setLocalDescription(answer)
const payload = {
sdp: peer.localDescription,
}
jsonResponse(res, 'success', {
responseType: 1,
message: 'Details successfully retrieved!',
responseData: payload,
})
} else {
jsonResponse(res, 'error', {
responseType: 3,
message: 'Video stream unavailable!',
})
}
} catch (e) {
console.error(e)
jsonResponse(res, 'error', {
responseType: 3,
message: 'Internal Server error!',
})
}
},
/**
* Show video stream broadcast
*
* @memberOf frontend.video
* @param {videoModule.sendervideostream} module
*/
videoBroadCast: async (req, res) => {
try {
const peer = new webrtc.RTCPeerConnection({
iceServers: [
{
urls: global.TurnServer.url,
credential: global.TurnServer.credential,
username: global.TurnServer.username,
},
],
})
peer.ontrack = (e) => handleTrackEvent(e, peer)
const desc = new webrtc.RTCSessionDescription(req.body.sdp)
await peer.setRemoteDescription(desc)
const answer = await peer.createAnswer()
await peer.setLocalDescription(answer)
const payload = {
sdp: peer.localDescription,
}
req.body.auctionid = req.body.auctionid ? req.body.auctionid : ''
await Promise.all([videoModule.sendervideostream(req, req.body)])
jsonResponse(res, 'success', {
responseType: 1,
message: 'Details successfully retrieved!',
responseData: payload,
})
} catch (e) {
console.error(e)
jsonResponse(res, 'error', {
responseType: 3,
message: 'Internal Server error!',
})
}
},
/**
* stop video broadcaster
*
* @memberOf frontend.video
* @param {videoModule.stopVideoStream} module
*/
stopVideoBroadCaster: async (req, res) => {
try {
req.body.broadcaster = req.body.broadcaster ? req.body.broadcaster : ''
await Promise.all([videoModule.stopVideoStream(req, req.body)])
const payload = {
broadcaster: req.body.broadcaster,
}
jsonResponse(res, 'success', {
responseType: 1,
message: 'Details successfully retrieved!',
responseData: payload,
})
} catch (e) {
console.error(e)
jsonResponse(res, 'error', {
responseType: 3,
message: 'Internal Server error!',
})
}
},
/**
* stop video broadcaster
*
* @memberOf frontend.video
* @param {videoModule.newVideoStream} module
*/
newVideoBroadCaster: async (req, res) => {
try {
req.body.auctionid = req.body.auctionid ? req.body.auctionid : ''
req.body.broadcaster = req.body.broadcaster ? req.body.broadcaster : ''
await Promise.all([videoModule.newVideoStream(req, req.body)])
const payload = {
auctionid: req.body.auctionid,
broadcaster: req.body.broadcaster,
}
jsonResponse(res, 'success', {
responseType: 1,
message: 'Details successfully retrieved!',
responseData: payload,
})
} catch (e) {
console.error(e)
jsonResponse(res, 'error', {
responseType: 3,
message: 'Internal Server error!',
})
}
},
/**
* new video stream
*
* @memberOf frontend.video
* @param {videoModule.getsenderstream} module
*/
newVideoStream: async (req, res) => {
try {
const [results1] = await Promise.all([videoModule.getsenderstream(req, req.body)])
if (results1.length > 0) {
console.log('results1', results1)
jsonResponse(res, 'success', {
responseType: 1,
message: 'Details successfully retrieved!',
responseData: results1,
})
} else {
jsonResponse(res, 'error', {
responseType: 3,
message: 'Video stream unavailable!',
})
}
} catch (e) {
console.error(e)
jsonResponse(res, 'error', {
responseType: 3,
message: 'Internal Server error!',
})
}
},
}