PageRenderTime 58ms CodeModel.GetById 25ms RepoModel.GetById 1ms app.codeStats 0ms

/pollapli/ui/static/pollapli/models/events_models.js

https://bitbucket.org/kaosat_dev/pollapli
JavaScript | 178 lines | 156 code | 19 blank | 3 comment | 19 complexity | dafe55171ead01d9ca4f3bbb5d9b85a6 MD5 | raw file
  1. var LongPollEvent = Backbone.Model.extend(
  2. {
  3. //urlRoot : pollapli.mainUrl+'rest/config/updates',
  4. initialize: function()
  5. {
  6. },
  7. defaults:
  8. {
  9. time:(new Date()).getTime(),
  10. signal:"",
  11. sender:"",
  12. eventType:null,
  13. targetElementId:-1,
  14. targetElement:null
  15. },
  16. parse:function(response)
  17. {
  18. eventArgs=element.signal.split('.');
  19. eventType=eventArgs[eventArgs.length-1];
  20. eventData=element.data;
  21. console.log("long poll event recieved"+eventType);
  22. if (eventType =="node_created")
  23. {
  24. targetElement=eventArgs[eventArgs.length-2]
  25. }
  26. else if (eventType=="plugged_Out")
  27. {
  28. targetElement=eventArgs[eventArgs.length-3]
  29. targetElementId=targetElement.split("_").pop()
  30. }
  31. return {time:response.time,signal:response.signal,sender:response.sender,"eventType":eventType,"targetElement":targetElement,"targetElementId":targetElementId};
  32. }
  33. });
  34. var LongPollEvents = Backbone.Collection.extend(
  35. {
  36. model : LongPollEvent,
  37. url: pollapli.mainUrl+'rest/config/events',
  38. initialize: function()
  39. {
  40. this.timeOut= 2000;
  41. this.initialFetch=true;
  42. this.timeOutFunct=null;
  43. this.lastPollTime=(new Date()).getTime();
  44. this.bind("add",this.updateTimeStamp );
  45. this.callbacks=[];
  46. console.log("events init: lastPollTime:"+this.lastPollTime);
  47. _.bindAll(this, "addCallback","parseEvent");
  48. },
  49. parse: function(response)
  50. {
  51. console.log("long poll event recieved"+JSON.stringify(response.events.items)+"last event time"+this.lastPollTime);
  52. return _.map(response.events.items, this.parseEvent);
  53. },
  54. parseEvent : function(response,key)
  55. {
  56. eventArgs=response.signal.split('.');
  57. eventType=eventArgs[eventArgs.length-1];
  58. eventData=response.data;
  59. targetElement=null;
  60. targetElementId=null;
  61. data=response.data;
  62. element=null;
  63. console.log("long poll event recieved "+eventType);
  64. if (eventType =="node_created")
  65. {
  66. targetElement=eventArgs[eventArgs.length-2];
  67. targetElementId=targetElement.split("_").pop();
  68. element="node";
  69. }
  70. else if (eventType=="node_deleted")
  71. {
  72. targetElement=eventArgs[eventArgs.length-2];
  73. targetElementId=targetElement.split("_").pop();
  74. element="node";
  75. }
  76. else if (eventType=="node_updated")
  77. {
  78. targetElement=eventArgs[eventArgs.length-2];
  79. targetElementId=targetElement.split("_").pop();
  80. element="node";
  81. }
  82. else if (eventType=="plugged_In")
  83. {
  84. targetElement=eventArgs[eventArgs.length-3];
  85. targetElementId=targetElement.split("_").pop();
  86. }
  87. else if (eventType=="plugged_Out")
  88. {
  89. targetElement=eventArgs[eventArgs.length-3];
  90. targetElementId=targetElement.split("_").pop();
  91. }
  92. else if (eventType=="download_updated")
  93. {
  94. targetElement=eventArgs[eventArgs.length-2]
  95. id=targetElement.split("_").pop()
  96. console.log("update_id of download "+id+ " data "+ JSON.stringify(eventData)+ " progress "+eventData.progress);
  97. //$("#mainmenu_lastNotification").text(targetElement+" "+_event);
  98. //pollapli.ui.set_progressbar("#progbardiv_"+id,eventData.progress*100);
  99. }
  100. var tmpEventData= {time:response.time,signal:response.signal,sender:response.sender,data:data,"eventType":eventType,"targetElement":targetElement,"targetElementId":targetElementId};
  101. if(this.callbacks[element])
  102. {
  103. _.each(this.callbacks[element],function(callback)
  104. {
  105. callback(tmpEventData);
  106. });
  107. }
  108. return {time:response.time,signal:response.signal,sender:response.sender,data:data,"eventType":eventType,"targetElement":targetElement,"targetElementId":targetElementId};
  109. },
  110. addCallback : function(eventType,callback)
  111. {
  112. if(!this.callbacks[eventType])
  113. {
  114. this.callbacks[eventType]=[];
  115. }
  116. this.callbacks[eventType].push(callback);
  117. },
  118. updateTimeStamp:function()
  119. {
  120. console.log("Total events"+this.length)
  121. if (this.length>0)
  122. {
  123. this.lastPollTime=this.last().get("time");
  124. console.log("Parsing time from latest event: last event time"+this.lastPollTime);
  125. if (this.length>3)
  126. {
  127. this.remove(this.first(this.length-3));
  128. }
  129. }
  130. this.longPoll();
  131. },
  132. startLongPoll:function(response)
  133. {
  134. this.retry();
  135. },
  136. stopLongPoll:function()
  137. {
  138. if(this.timeOutFunct !=null)
  139. {
  140. this.timeOutFunct.cancel();
  141. }
  142. },
  143. longPoll:function()
  144. {
  145. this.fetch( { data: { "altTimeStamp": this.lastPollTime, "clientId":pollapli.clientId },add: true });
  146. },
  147. retry:function()
  148. {
  149. self=this;
  150. setTimeout
  151. (
  152. function()
  153. {
  154. self.longPoll();
  155. },
  156. this.timeOut
  157. );
  158. }
  159. });