/* * Copyright (c) 2010-2011 Synleaf. All Rights Reserved. This material may not be reproduced, modified or distributed * without the express prior written permission of the copyright holder. For permission, contact legal@synleaf.com */ function CometClient(url, query, callback) { this.url = url; this.query = query; this.callback = callback; } CometClient.prototype.version = function() { return "DEFAULT"; } CometClient.prototype.connect = function() { var EOLMARKER = "EOL"; var RESPONSE_BUFFER_SIZE = 16384; var bytesRead = 0; var connected = false; var resetConnection = false; var invalidateResponseText = false; var nextEOLMarkerPos = -1; var initializeSession = true; var xhr = $.ajax( { beforeSend : function(oXhr) {} }); var params = { url : this.url, query : this.query, callback: this.callback }; if (sessionStorage != null) { sessionStorage['X-ClientId'] = 'JS-xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) { var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8); return v.toString(16); }); } var lr = function() { var allContent = ""; var query = params['query']; query['init'] = initializeSession; if (sessionStorage['X-ClientId'] != null) { query['X-ClientId'] = sessionStorage['X-ClientId']; } var queryString = $.param(query, true); if (!connected) { xhr.open("POST", params['url'], true); xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8"); xhr.send(queryString); connected = true; } if (initializeSession) { initializeSession = false; } do { if (!connected) { break; } if (xhr.readyState == 3) { allContent = xhr.responseText; } if (xhr.readyState == 4) { resetConnection = true; break; } var unprocessedData = allContent.substring(bytesRead); nextEOLMarkerPos = unprocessedData.indexOf(EOLMARKER); if (nextEOLMarkerPos != -1) { var jsonData = unprocessedData.substring(0, nextEOLMarkerPos); if (connected) { params['callback'](jsonData); } bytesRead += (nextEOLMarkerPos + EOLMARKER.length); } } while (nextEOLMarkerPos != -1); if (bytesRead > RESPONSE_BUFFER_SIZE || resetConnection) { connected = false; xhr.abort(); bytesRead = 0; resetConnection = false; } }; window.setInterval(lr, 200); } CometClient.prototype.close = function() { // not implemented } /* * Copyright (c) 2010-2011 Synleaf. All Rights Reserved. This material may not be reproduced, modified or distributed * without the express prior written permission of the copyright holder. For permission, contact legal@synleaf.com */ function ChartConfiguration(aepId, htmlElementId, options) { this.aepId = aepId; this.htmlElementId = htmlElementId; this.options = options; this.renderer = null; } function ChartClient() { this.observers = new Array(); this.dataProcessorStarted = false; this.profile = ""; } ChartClient.prototype.setProfile = function(profile) { this.profile = profile; } ChartClient.prototype.clearObservers = function() { var allObservers = Array(); for (var i = 0; i < this.observers.length; i++) { allObservers.push(this.observers[i].aepId); } this.observers = []; var payload = { type: 'remove', o: allObservers, options: { profile : this.profile } }; if (window.sessionStorage && sessionStorage['X-ClientId'] != null) { payload['X-ClientId'] = sessionStorage['X-ClientId']; } this.sentNotification(payload); } ChartClient.prototype.addObserver = function(observer) { this.observers.push(observer); var payload = { type: 'add', o: [ observer.aepId ], options: { profile : this.profile } }; if (window.sessionStorage && sessionStorage['X-ClientId'] != null) { payload['X-ClientId'] = sessionStorage['X-ClientId']; } var context = this; setTimeout(function() { context.sentNotification(payload); }, 2000); } ChartClient.prototype.pollObservers = function() { var context = this; for (var i = 0; i < this.observers.length; i++) { if (this.observers[i].renderer == null) { setTimeout(function() { context.pollObservers(); }, 500); return false; } } return true; } ChartClient.prototype.sentNotification = function(payload) { var observerJSONtext = JSON.stringify(payload); var url = "/synleaf/api/notification"; $.ajax({ url : url, type: 'POST', data: observerJSONtext, dataType: 'json', contentType: 'application/json; charset=utf-8' }); } ChartClient.prototype.startGraphLoader = function(options) { var url = "/synleaf/api/bootstrap/views"; var observerJSONtext = JSON.stringify(this.observers); var defaults = { o: observerJSONtext }; $.extend(defaults, options); var queryString = $.param(defaults); var context = this; $.post(url, queryString, function(data) { context.loadView(data, context); }); } ChartClient.prototype.loadView = function(data, context) { var response = JSON.parse(data); $.each(response['jsFiles'], function(index, objValue) { $('