this.keepAlive = paramArray.keepAlive;
this.sessionID = null;
+ this.serviceId = paramArray.serviceId || null;
this.initStatusOK = false;
this.pingStatusOK = false;
this.searchStatusOK = false;
this.currRecOffset = null;
//timers
+ this.pingTimer = null;
this.statTime = paramArray.stattime || 1000;
this.statTimer = null;
this.termTime = paramArray.termtime || 1000;
}
// else, auto init session or wait for a user init?
if (this.useSessions && paramArray.autoInit !== false) {
- this.init();
+ this.init(this.sessionId, this.serviceId);
}
};
this.sessionID = null;
this.initStatusOK = false;
this.pingStatusOK = false;
+ clearTimeout(this.pingTimer);
}
this.searchStatusOK = false;
this.stop();
this.resetCallback();
},
- init: function ( sessionId )
+ init: function (sessionId, serviceId)
{
this.reset();
// session id as a param
- if ( sessionId != undefined && this.useSessions ) {
+ if (sessionId && this.useSessions ) {
this.initStatusOK = true;
this.sessionID = sessionId;
this.ping();
} else if (this.useSessions) {
var context = this;
var request = new pzHttpRequest(this.pz2String, this.errorHandler);
+ var opts = {'command' : 'init'};
+ if (serviceId) opts.service = serviceId;
request.safeGet(
- { "command": "init" },
+ opts,
function(data) {
if ( data.getElementsByTagName("status")[0]
.childNodes[0].nodeValue == "OK" ) {
context.sessionID =
data.getElementsByTagName("session")[0]
.childNodes[0].nodeValue;
- setTimeout(
- function () {
- context.ping();
- },
- context.keepAlive
- );
+ context.pingTimer =
+ setTimeout(
+ function () {
+ context.ping();
+ },
+ context.keepAlive
+ );
if ( context.initCallback )
context.initCallback();
}
'Pz2.js: Ping not allowed (proxy mode) or session not initialized.'
);
var context = this;
+
+ clearTimeout(context.pingTimer);
+
var request = new pzHttpRequest(this.pz2String, this.errorHandler);
request.safeGet(
- { "command": "ping", "session": this.sessionID },
+ { "command": "ping", "session": this.sessionID, "windowid" : window.name },
function(data) {
if ( data.getElementsByTagName("status")[0]
.childNodes[0].nodeValue == "OK" ) {
context.pingStatusOK = true;
- setTimeout(
- function () {
- context.ping();
- },
- context.keepAlive
- );
+ context.pingTimer =
+ setTimeout(
+ function () {
+ context.ping();
+ },
+ context.keepAlive
+ );
}
else
context.throwError('Ping failed. Malformed WS resonse.',
else
var start = 0;
- var searchParams = {
- "command": "search",
- "query": this.currQuery,
- "session": this.sessionID
+ var searchParams = {
+ "command": "search",
+ "query": this.currQuery,
+ "session": this.sessionID,
+ "windowid" : window.name
};
if (filter !== undefined)
- searchParams["filter"] = filter;
+ searchParams["filter"] = filter;
// copy additional parmeters, do not overwrite
if (addParamsArr != undefined) {
var context = this;
var request = new pzHttpRequest(this.pz2String, this.errorHandler);
request.safeGet(
- { "command": "stat", "session": this.sessionID },
+ { "command": "stat", "session": this.sessionID, "windowid" : window.name },
function(data) {
if ( data.getElementsByTagName("stat") ) {
var activeClients =
"num": this.currentNum,
"sort": this.currentSort,
"block": 1,
- "type": this.showResponseType
+ "type": this.showResponseType,
+ "windowid" : window.name
},
- function(data, type) {
+ function(data, type) {
var show = null;
+ var activeClients = 0;
if (type === "json") {
show = {};
- context.activeClients = Number(data.activeclients[0]);
- show.activeclients = context.activeClients;
+ activeClients = Number(data.activeclients[0]);
+ show.activeclients = activeClients;
show.merged = Number(data.merged[0]);
show.total = Number(data.total[0]);
show.start = Number(data.start[0]);
.childNodes[0].nodeValue == "OK") {
// first parse the status data send along with records
// this is strictly bound to the format
- var activeClients =
+ activeClients =
Number(data.getElementsByTagName("activeclients")[0]
.childNodes[0].nodeValue);
- context.activeClients = activeClients;
show = {
"activeclients": activeClients,
"merged":
Number( data.getElementsByTagName("num")[0]
.childNodes[0].nodeValue ),
"hits": []
- };
+ };
// parse all the first-level nodes for all <hit> tags
var hits = data.getElementsByTagName("hit");
for (i = 0; i < hits.length; i++)
context.throwError('Show failed. Malformed WS resonse.',
114);
}
+ context.activeClients = activeClients;
context.showCounter++;
var delay = context.showTime;
if (context.showCounter > context.showFastCount)
var recordParams = {
"command": "record",
"session": this.sessionID,
- "id": this.currRecID
+ "id": this.currRecID,
+ "windowid" : window.name
};
this.currRecOffset = null;
{
"command": "termlist",
"session": this.sessionID,
- "name": this.termKeys
+ "name": this.termKeys,
+ "windowid" : window.name
},
function(data) {
if ( data.getElementsByTagName("termlist") ) {
var context = this;
var request = new pzHttpRequest(this.pz2String, this.errorHandler);
request.safeGet(
- { "command": "bytarget", "session": this.sessionID },
+ {
+ "command": "bytarget",
+ "session": this.sessionID,
+ "block": 1,
+ "windowid" : window.name
+ },
function(data) {
if ( data.getElementsByTagName("status")[0]
.childNodes[0].nodeValue == "OK" ) {
bytarget[i][nodeName] = nodeText;
}
}
+ if (bytarget[i]["state"]=="Client_Disconnected") {
+ bytarget[i]["hits"] = "Error";
+ } else if (bytarget[i]["state"]=="Client_Error") {
+ bytarget[i]["hits"] = "Error";
+ } else if (bytarget[i]["state"]=="Client_Working") {
+ bytarget[i]["hits"] = "...";
+ }
+ if (bytarget[i].diagnostic == "1") {
+ bytarget[i].diagnostic = "Permanent system error";
+ } else if (bytarget[i].diagnostic == "2") {
+ bytarget[i].diagnostic = "Temporary system error";
+ }
+ var targetsSuggestions = targetNodes[i].getElementsByTagName("suggestions");
+ if (targetsSuggestions != undefined && targetsSuggestions.length>0) {
+ var suggestions = targetsSuggestions[0];
+ bytarget[i]["suggestions"] = Element_parseChildNodes(suggestions);
+ }
}
context.bytargetCounter++;
}
};
+
pzHttpRequest.prototype =
{
safeGet: function ( params, callback )
this.request.responseXML == null) {
if (this.request.responseText != null) {
//assume JSON
- var json = eval("(" + this.request.responseText + ")");
- this.callback(json, "json");
+
+ var json = null;
+ var text = this.request.responseText;
+ if (typeof window.JSON == "undefined")
+ json = eval("(" + text + ")");
+ else {
+ try {
+ json = JSON.parse(text);
+ }
+ catch (e) {
+ // Safari: eval will fail as well. Considering trying JSON2 (non-native implementation) instead
+ /* DEBUG only works in mk2-mobile
+ if (document.getElementById("log"))
+ document.getElementById("log").innerHTML = "" + e + " " + length + ": " + text;
+ */
+ try {
+ json = eval("(" + text + ")");
+ }
+ catch (e) {
+ /* DEBUG only works in mk2-mobile
+ if (document.getElementById("log"))
+ document.getElementById("log").innerHTML = "" + e + " " + length + ": " + text;
+ */
+ }
+ }
+ }
+ this.callback(json, "json");
} else {
var err = new Error("XML response is empty but no error " +
"for " + savedUrlForErrorReporting);