},\r
members : {\r
// The URI of the MessageListenerServlet\r
- uri : '/amq',\r
+ uri : '/org.argeo.slc.webapp/amq',\r
\r
// Polling. Set to true (default) if waiting poll for messages is needed\r
poll : true,\r
_messageQueue : '',\r
_queueMessages : 0,\r
\r
- _messageHandler : function(request) {\r
- try {\r
- if (request.status == 200) {\r
- var response = request.responseXML\r
- .getElementsByTagName("ajax-response");\r
- if (response != null && response.length == 1) {\r
- for (var i = 0; i < response[0].childNodes.length; i++) {\r
- var responseElement = response[0].childNodes[i];\r
-\r
- // only process nodes of type element.....\r
- if (responseElement.nodeType != 1)\r
- continue;\r
-\r
- var id = responseElement.getAttribute('id');\r
-\r
- var handler = this._handlers[id];\r
- if (handler != null) {\r
- for (var j = 0; j < responseElement.childNodes.length; j++) {\r
- handler(responseElement.childNodes[j]);\r
- }\r
- }\r
- }\r
- }\r
+ _messageHandler : function(response) {\r
+ var doc = response.getContent();\r
+ var NSMap = {slc:"http://argeo.org/projects/slc/schemas"};\r
+ var messages = org.argeo.ria.util.Element.selectNodes(doc, "//response", NSMap);\r
+ //this.info("Received " + messages.length + " messages");\r
+ for(var i=0;i<messages.length;i++){\r
+ var id = messages[i].getAttribute("id");\r
+ var slcExec = org.argeo.ria.util.Element.selectSingleNode(messages[i], "slc:slc-execution", NSMap); \r
+ if(id && this._handlers[id] && slcExec){\r
+ this._handlers[id](slcExec);\r
}\r
- } catch (e) {\r
- alert(e);\r
}\r
},\r
\r
},\r
\r
endBatch : function() {\r
- this._queueMessages--;\r
+ this._queueMessages--; \r
if (this._queueMessages == 0 && this._messages > 0) {\r
var body = this._messageQueue;\r
this._messageQueue = '';\r
this._messages = 0;\r
this._queueMessages++;\r
- var request = new qx.io.remote.Request(this.uri, "post", "text/plain");\r
+ var request = new qx.io.remote.Request(this.uri, "POST", "text/plain");\r
request.addListener("completed", this.endBatch, this);\r
request.send();\r
}\r
},\r
\r
- _pollHandler : function(request) {\r
+ _pollHandler : function(response) {\r
this.startBatch();\r
try {\r
- this._messageHandler(request);\r
+ this._messageHandler(response);\r
this._pollEvent(this._first);\r
this._first = false;\r
} catch (e) {\r
},\r
\r
_sendPoll : function(request) {\r
- var request = new qx.io.remote.Request(this.uri, "get", "application/xml");\r
+ var request = new qx.io.remote.Request(this.uri, "GET", "application/xml");\r
request.addListener("completed", this._pollHandler, this);\r
request.send();\r
},\r
},\r
\r
// Listen on a channel or topic. handler must be a function taking a message arguement\r
- addListener : function(id, destination, handler) {\r
- this._handlers[id] = handler;\r
+ addListener : function(id, destination, handler, context) {\r
+ this._handlers[id] = qx.lang.Function.bind(handler, context);\r
this._sendMessage(destination, id, 'listen');\r
},\r
\r
this._messages++;\r
} else {\r
this.startBatch();\r
- var req = new qx.io.remote.Request(this.uri, "post", "application/xml");\r
+ var req = new qx.io.remote.Request(this.uri, "POST", "text/plain");\r
req.setParameter("destination", destination);\r
req.setParameter("message", message);\r
req.setParameter("type", type);\r
}\r
},\r
\r
- _startPolling : function() {\r
+ startPolling : function() {\r
if (this.poll){\r
- var req = new qx.io.remote.Request(this.uri, "get", "application/xml");\r
+ var req = new qx.io.remote.Request(this.uri, "GET", "application/xml");\r
req.setParameter("timeout", "10");\r
req.addListener("completed", this._pollHandler, this);\r
req.send();\r