jam-cloud/web/app/assets/javascripts/backend_alerts.js

150 lines
4.9 KiB
JavaScript

(function(context,$) {
"use strict";
context.JK = context.JK || {};
// Class to intercept and delegate out all backend alerts as necessary
// better if modules that needed certain events would just register for them.
context.JK.BackendAlerts = function(app) {
var $document = $(document);
var logger = context.JK.logger;
var ALERT_TYPES = context.JK.ALERT_TYPES;
var ALERT_NAMES = context.JK.ALERT_NAMES;
function onNoValidAudioConfig(type, text) {
app.notify({
"title": ALERT_TYPES[type].title,
"text": text,
"icon_url": "/assets/content/icon_alert_big.png"
});
context.location = "/client#"; // leaveSession will be called in beforeHide below
}
function onStunEvent() {
var testResults = context.jamClient.NetworkTestResult();
$.each(testResults, function (index, val) {
if (val.bStunFailed) {
// if true we could not reach a stun server
}
else if (val.bRemoteUdpBocked) {
// if true the user cannot communicate with peer via UDP, although they could do LAN based session
}
});
}
function onGenericEvent(type, text) {
context.setTimeout(function() {
var alert = ALERT_TYPES[type];
if(alert && alert.title) {
app.notify({
"title": ALERT_TYPES[type].title,
"text": text,
"icon_url": "/assets/content/icon_alert_big.png"
});
}
else {
logger.debug("Unhandled Backend Event type %o, data %o", type, text)
}
}, 1);
}
function alertCallback(type, text) {
function timeCallback() {
var start = new Date();
setTimeout(function() {
var timed = new Date().getTime() - start.getTime();
if(timed > 250) {
logger.warn("SLOW AlERT_CALLBACK. type: %o text: %o time: %o", type, text, timed);
}
}, 1);
}
timeCallback();
logger.debug("alert callback", type, text);
var alertData = $.extend({}, ALERT_TYPES[type]);
alertData.text = text;
if(alertData && alertData.name) {
$document.triggerHandler(alertData.name, alertData);
}
if (type === 2) { // BACKEND_MIXER_CHANGE
context.SessionActions.mixersChanged(type, text)
if(context.JK.CurrentSessionModel)
context.JK.CurrentSessionModel.onBackendMixerChanged(type, text)
}
else if (type === ALERT_NAMES.NO_VALID_AUDIO_CONFIG) { // NO_VALID_AUDIO_CONFIG
if(context.JK.GearUtilsInstance && context.JK.GearUtilsInstance.isRestartingAudio()) {
// squelch this warning, because we are restarting audio
}
else {
onNoValidAudioConfig(type, text);
}
}
else if (type === ALERT_NAMES.AUDIO_DEVICE_NOT_PRESENT) { // NO_VALID_AUDIO_CONFIG
if(context.JK.GearUtilsInstance && context.JK.GearUtilsInstance.isRestartingAudio()) {
// squelch this warning, because we are restarting audio
}
else {
onGenericEvent(type, text);
}
}
else if (type === 24) {
onStunEvent();
}
else if (type === 26) { // DEAD_USER_REMOVE_EVENT
if(context.JK.CurrentSessionModel)
context.JK.CurrentSessionModel.onDeadUserRemove(type, text);
}
else if (type === 27) { // WINDOW_CLOSE_BACKGROUND_MODE
if(context.JK.CurrentSessionModel)
context.JK.CurrentSessionModel.onWindowBackgrounded(type, text);
}
else if(type === ALERT_NAMES.SESSION_LIVEBROADCAST_FAIL) {
if(context.JK.CurrentSessionModel)
context.JK.CurrentSessionModel.onBroadcastFailure(type, text);
}
else if(type === ALERT_NAMES.SESSION_LIVEBROADCAST_ACTIVE) {
if(context.JK.CurrentSessionModel)
context.JK.CurrentSessionModel.onBroadcastSuccess(type, text);
}
else if(type === ALERT_NAMES.SESSION_LIVEBROADCAST_STOPPED) {
if(context.JK.CurrentSessionModel)
context.JK.CurrentSessionModel.onBroadcastStopped(type, text);
}
else if(type === ALERT_NAMES.RECORD_PLAYBACK_STATE) {
if(context.JK.CurrentSessionModel)
context.JK.CurrentSessionModel.onPlaybackStateChange(type, text);
}
else if((!context.JK.CurrentSessionModel || !context.JK.CurrentSessionModel.inSession()) &&
(ALERT_NAMES.INPUT_IO_RATE == type || ALERT_NAMES.INPUT_IO_JTR == type || ALERT_NAMES.OUTPUT_IO_RATE == type || ALERT_NAMES.OUTPUT_IO_JTR== type)) {
// squelch these events if not in session
}
else if(type != 30 && type != 31 && type != 21){ // these are handled elsewhere
onGenericEvent(type, text);
}
}
function initialize() {
context.jamClient.SessionSetAlertCallback("JK.AlertCallback");
}
this.initialize = initialize;
context.JK.AlertCallback = alertCallback;
return this;
}
})(window, jQuery);