-function pollServerForICECandidate(cpc) {
- window.setInterval(() => {
- if (cpc.iceGatheringState.localeCompare('complete') !== 0) {
- return new Promise((resolve, reject) => {
- console.log('Client: Requesting ICE Candidates from server')
- const request = new XMLHttpRequest()
- request.open('GET', window.location, true)
- request.setRequestHeader('Content-Type', 'application/json' )
- request.setRequestHeader('X-Strapp-Type', 'ice-candidate-request')
- request.onreadystatechange = () => {
- if (request.status === 200) {
- if(request.readyState === 4) {
- console.log('Client: Recieved ICE Candidate from Host')
- resolve(request.response)
- }
- }
- else if (request.status === 204) {
- console.log('Ice Candidate unavailable, trying again in one second')
- }
- else {
- reject('server unhandled response of status ' + request.status)
- }
- }
- request.send(cpc.pubKey)
- }).then((response) => {
- console.log('Client: Adding Ice Candidate ')
- cpc.addIceCandidate(response.candidate)
- }).catch((err) => {
- console.log('pollServerForICECandidate: ' + err)
- })
+function requestHostICE(cpc, url, pubKey) {
+ let intervalID = window.setInterval(() => {
+ if (cpc.iceConnectionState.localeCompare('connected') !== 0
+ && cpc.iceConnectionState.localeCompare('completed') !== 0) {
+ console.log('Client: Polling server begin for intervalID = ' + intervalID)
+ console.log('Client: Requesting ICE Candidates from server')
+ const request = new XMLHttpRequest()
+ request.open('GET', url, true)
+ request.setRequestHeader('Content-Type', 'application/json' )
+ request.setRequestHeader('x-strapp-Type', 'ice-candidate-request')
+ request.setRequestHeader('x-client-pubkey', pubKey)
+ request.onreadystatechange = () => {
+ if (request.status === 200) {
+ if(request.readyState === 4) {
+ console.log('Client: Recieved ICE response from Host')
+ let response = JSON.parse(request.response)
+ switch(response['iceState']) {
+ case "a":
+ cpc.addIceCandidate(new RTCIceCandidate(response.ice))
+ break
+ case "g": /* Gathering so let interval keep polling */
+ break
+ case "c": /* host iceState == Complete, stop bugging it */
+ clearInterval(intervalID)
+ clearTimeout()
+ break
+ default:
+ console.log('Unhandled iceState in requestHostICE()' + response['iceState'])
+ break
+ }
+ }
+ }
+ else {
+ console.log('server unhandled response of status ' + request.status)
+ clearInterval(intervalID)
+ }
+ }
+ request.send()