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

134 lines
4.9 KiB
JavaScript

(function(context,$) {
"use strict";
context.JK = context.JK || {};
context.JK.TestBridgeScreen = function(app) {
var logger = context.JK.logger;
var selectors = {
clientId: '#testBridge-clientid',
tClientId: '#template-testBridge-clientid',
cSession: '#testBridge-createSession',
sessionId: '#testBridge-createdSessionId',
jSession: '#testBridge-joinSession',
testLatency: '#testBridge-TestLatency',
testLatencyResponse: '#testBridge-TestLatencyResponse',
getDevices: '#testBridge-GetDevices',
ftue: '#testBridge-GetSetFTUE'
};
function afterShow(data) {}
function loggedIn(header, payload) {
var clientId = payload.client_id;
renderClientId(clientId);
}
function renderClientId(clientId) {
var template = $(selectors.tClientId).html();
var replacements = {
clientid: clientId
};
var html = context.JK.fillTemplate(template, replacements);
$(selectors.clientId).html(html);
}
function createSessionHandler(evt) {
var prefix = $(selectors.cSession + ' input[type="text"]').val();
createTestSession(prefix);
}
function createTestSession(prefix) {
var session = {
client_id: app.clientId,
description: "Test Session " + prefix,
genres: ["african"],
fan_chat: true,
fan_access: true,
approval_required: false,
musician_access: true,
as_musician: true,
legal_terms: true,
tracks: [
{ instrument_id: "electric guitar", sound: "mono" }
]
};
var url = "/api/sessions";
$.ajax({
type: "POST",
dataType: "json",
contentType: 'application/json',
url: url,
processData:false,
data: JSON.stringify(session),
success: function(response) {
var newSessionId = response.id;
$(selectors.sessionId).html(newSessionId);
},
error: app.ajaxError
});
}
function joinSessionHandler(evt) {
var sessionId = $(selectors.jSession + ' input[type="text"]').val();
logger.debug('joinSessionHandler. ID: ' + sessionId);
context.JK.joinMusicSession(sessionId, app);
}
function testLatencyHandler(evt) {
var clientId = $(selectors.testLatency + ' input[type="text"]').val();
logger.debug('testBridge Screen: testLatencyHandler: clientId: ' + clientId);
var jsFunction = "JK.TestBridgeLatencyResponse";
context.jamClient.TestLatency(clientId, jsFunction);
}
function latencyResponse(response) {
logger.debug("latencyResponse, called from jamClient: " + response);
var latency = JSON.stringify(response);
$(selectors.testLatencyResponse).html(latency);
}
function getDevicesHandler(evt) {
var response = context.jamClient.GetASIODevices();
logger.debug(response);
$(selectors.getDevices + ' textarea').val(JSON.stringify(response));
}
function getFTUEHandler(evt) {
var response = context.jamClient.GetFTUE();
logger.debug(response);
$(selectors.ftue + ' textarea[data-what="GetFTUE"]').val(JSON.stringify(response));
}
function setFTUEHandler(evt) {
var val = Boolean($(selectors.ftue + ' form input[name="ftue"]:checked').val());
logger.debug('ftue:' + val);
logger.debug(typeof(val));
context.jamClient.SetFTUE(val);
}
function events() {
$(selectors.cSession + ' input[type="button"]').click(createSessionHandler);
$(selectors.jSession + ' input[type="button"]').click(joinSessionHandler);
$(selectors.testLatency + ' input[type="button"]').click(testLatencyHandler);
$(selectors.getDevices + ' input[type="button"]').click(getDevicesHandler);
$(selectors.ftue + ' input[type="button"][value="Get"]').click(getFTUEHandler);
$(selectors.ftue + ' input[type="button"][value="Set"]').click(setFTUEHandler);
}
function initialize() {
var screenBindings = { 'afterShow': afterShow };
app.bindScreen('testBridge', screenBindings);
events();
context.JK.JamServer.registerMessageCallback(
context.JK.MessageType.LOGIN_ACK, loggedIn);
}
// Public
this.initialize = initialize;
context.JK.TestBridgeLatencyResponse = latencyResponse;
};
})(window,jQuery);