Redirect safari and unsupported browsers

This commit is contained in:
ian ramzy 2020-03-27 12:32:22 -04:00
parent 3740ae6ff6
commit 53c1486793
2 changed files with 48 additions and 49 deletions

View File

@ -6,6 +6,23 @@ url = window.location.href;
const roomHash = url.substring(url.lastIndexOf('/') + 1).toLowerCase(); const roomHash = url.substring(url.lastIndexOf('/') + 1).toLowerCase();
function getBrowserName() {
var name = "Unknown";
if (window.navigator.userAgent.indexOf("MSIE") !== -1) {
} else if (window.navigator.userAgent.indexOf("Firefox") !== -1) {
name = "Firefox";
} else if (window.navigator.userAgent.indexOf("Opera") !== -1) {
name = "Opera";
} else if (window.navigator.userAgent.indexOf("Chrome") !== -1) {
name = "Chrome";
} else if (window.navigator.userAgent.indexOf("Safari") !== -1) {
name = "Safari";
}
return name;
}
var browserName = getBrowserName();
var isWebRTCSupported = var isWebRTCSupported =
navigator.getUserMedia || navigator.getUserMedia ||
navigator.webkitGetUserMedia || navigator.webkitGetUserMedia ||
@ -13,14 +30,8 @@ var isWebRTCSupported =
navigator.msGetUserMedia || navigator.msGetUserMedia ||
window.RTCPeerConnection; window.RTCPeerConnection;
// try { // Handle IE
// window.RTCPeerConnection.peerConnection.addStream if (!isWebRTCSupported || browserName === "Safari" || browserName === "MSIE") {
// } catch (e) {
// alert("Your browser doesn't support Neon Chat. Please use Chrome or Firefox.");
// window.location.href = "/landing";
// }
if (!isWebRTCSupported) {
alert("Your browser doesn't support Neon Chat. Please use Chrome or Firefox."); alert("Your browser doesn't support Neon Chat. Please use Chrome or Firefox.");
window.location.href = "/"; window.location.href = "/";
} }
@ -28,14 +39,6 @@ if (!isWebRTCSupported) {
function logIt(message, error) { function logIt(message, error) {
console.log(message); console.log(message);
// Add to logs on page
// let logs = document.getElementById('logs');
// let tmp = document.createElement('P');
// tmp.innerText = message;
// if (error) {
// tmp.classList.add('error');
// }
// logs.appendChild(tmp);
} }
// Create an object to save various objects to without polluting the global namespace. // Create an object to save various objects to without polluting the global namespace.
@ -53,32 +56,29 @@ var VideoChat = {
// accepted callback to the onMediaStream function, otherwise callback to the // accepted callback to the onMediaStream function, otherwise callback to the
// noMediaStream function. // noMediaStream function.
requestMediaStream: function (event) { requestMediaStream: function (event) {
logIt("requestMediaStream"); logIt("requestMediaStream");
navigator.mediaDevices navigator.mediaDevices.getUserMedia({
.getUserMedia({video: true, audio: true}) video: true,
.then(stream => { audio: true
VideoChat.onMediaStream(stream); }).then(stream => {
}) VideoChat.onMediaStream(stream);
.catch(error => { }).catch(error => {
logIt(error); logIt(error);
logIt('Failed to get local webcam video, check webcam privacy settings'); logIt('Failed to get local webcam video, check webcam privacy settings');
setTimeout(VideoChat.requestMediaStream, 1000); setTimeout(VideoChat.requestMediaStream, 1000);
// alert("Please check your webcam browser privacy settings.") });
});
}, },
requestScreenStream: function (event) { requestScreenStream: function (event) {
navigator.mediaDevices navigator.mediaDevices.getDisplayMedia({
.getDisplayMedia({video: true, audio: true}) video: true,
.then(stream => { audio: true
VideoChat.onMediaStream(stream); }).then(stream => {
}) VideoChat.onMediaStream(stream);
.catch(error => { }).catch(error => {
logIt(error); logIt(error);
logIt('No media stream for us.'); logIt('No media stream for us.');
alert("Please check your screen sharing browser privacy settings.") });
});
}, },
// The onMediaStream function receives the media stream as an argument. // The onMediaStream function receives the media stream as an argument.
@ -279,7 +279,6 @@ function openFullscreen() {
} }
} }
function muteMicrophone() { function muteMicrophone() {
var muted = VideoChat.localStream.getAudioTracks()[0].enabled; var muted = VideoChat.localStream.getAudioTracks()[0].enabled;
VideoChat.localStream.getAudioTracks()[0].enabled = !muted; VideoChat.localStream.getAudioTracks()[0].enabled = !muted;

View File

@ -27,7 +27,7 @@ app.get('/room/*', function (req, res) {
app.use(express.static('public')); app.use(express.static('public'));
function log(msg, room) { function logIt(msg, room) {
console.log(room + ": " + msg) console.log(room + ": " + msg)
} }
@ -36,7 +36,7 @@ io.on('connection', function (socket) {
// When a client tries to join a room, only allow them if they are first or // When a client tries to join a room, only allow them if they are first or
// second in the room. Otherwise it is full. // second in the room. Otherwise it is full.
socket.on('join', function (room) { socket.on('join', function (room) {
log('A client joined the room', room); logIt('A client joined the room', room);
var clients = io.sockets.adapter.rooms[room]; var clients = io.sockets.adapter.rooms[room];
var numClients = typeof clients !== 'undefined' ? clients.length : 0; var numClients = typeof clients !== 'undefined' ? clients.length : 0;
if (numClients === 0) { if (numClients === 0) {
@ -44,12 +44,12 @@ io.on('connection', function (socket) {
} else if (numClients === 1) { } else if (numClients === 1) {
socket.join(room); socket.join(room);
// When the client is second to join the room, both clients are ready. // When the client is second to join the room, both clients are ready.
log('Broadcasting ready message', room); logIt('Broadcasting ready message', room);
socket.broadcast.to(room).emit('willInitiateCall', room); socket.broadcast.to(room).emit('willInitiateCall', room);
socket.emit('ready', room).to(room); socket.emit('ready', room).to(room);
socket.broadcast.to(room).emit('ready', room); socket.broadcast.to(room).emit('ready', room);
} else { } else {
log("room already full", room); logIt("room already full", room);
socket.emit('full', room); socket.emit('full', room);
} }
}); });
@ -57,12 +57,12 @@ io.on('connection', function (socket) {
// When receiving the token message, use the Twilio REST API to request an // When receiving the token message, use the Twilio REST API to request an
// token to get ephemeral credentials to use the TURN server. // token to get ephemeral credentials to use the TURN server.
socket.on('token', function (room) { socket.on('token', function (room) {
log('Received token request', room); logIt('Received token request', room);
twilio.tokens.create(function (err, response) { twilio.tokens.create(function (err, response) {
if (err) { if (err) {
log(err, room); logIt(err, room);
} else { } else {
log('Token generated. Returning it to the browser client', room); logIt('Token generated. Returning it to the browser client', room);
socket.emit('token', response).to(room); socket.emit('token', response).to(room);
} }
}); });
@ -70,19 +70,19 @@ io.on('connection', function (socket) {
// Relay candidate messages // Relay candidate messages
socket.on('candidate', function (candidate, room) { socket.on('candidate', function (candidate, room) {
log('Received candidate. Broadcasting...', room); logIt('Received candidate. Broadcasting...', room);
socket.broadcast.to(room).emit('candidate', candidate); socket.broadcast.to(room).emit('candidate', candidate);
}); });
// Relay offers // Relay offers
socket.on('offer', function (offer, room) { socket.on('offer', function (offer, room) {
log('Received offer. Broadcasting...', room); logIt('Received offer. Broadcasting...', room);
socket.broadcast.to(room).emit('offer', offer); socket.broadcast.to(room).emit('offer', offer);
}); });
// Relay answers // Relay answers
socket.on('answer', function (answer, room) { socket.on('answer', function (answer, room) {
log('Received answer. Broadcasting...', room); logIt('Received answer. Broadcasting...', room);
socket.broadcast.to(room).emit('answer', answer); socket.broadcast.to(room).emit('answer', answer);
}); });
}); });