|
( function ($){
$.ev = {
handlers : {},
running : false ,
xhr : null ,
verbose : true ,
timeout : null ,
run: function (messages) {
var i, m, h;
for (i = 0; i < messages.length; i++) {
m = messages[i];
if (!m) continue ;
h = this .handlers[m.type];
if (!h) h = this .handlers['* '];
if ( h) h(m);
}
},
/* Method: stop
*
* Stop the loop
*
*/
stop: function() {
if (this.xhr) {
this.xhr.abort();
this.xhr = null;
}
this.running = false;
},
/*
* Method: loop
*
* Long poll on a URL
*
* Arguments:
*
* url
* handler
*
*/
loop: function(url, handlers) {
var self = this;
if (handlers) {
if (typeof handlers == "object") {
this.handlers = handlers;
} else if (typeof handlers == "function") {
this.run = handlers;
} else {
throw("handlers must be an object or function");
}
}
this.running = true;
this.xhr = $.ajax({
type : ' GET ',
dataType : ' json ',
url : url,
timeout : self.timeout,
cache : false,
success : function(messages, status) {
self.run(messages);
},
complete : function(xhr, status) {
var delay;
if (status == ' success') {
delay = 100;
} else {
delay = 5000;
}
window.setTimeout( function (){
if (self.running)
self.loop(url);
}, delay);
}
});
}
};
})(jQuery);
|