PollingProvider.html 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <title>The source code</title>
  6. <link href="../resources/prettify/prettify.css" type="text/css" rel="stylesheet" />
  7. <script type="text/javascript" src="../resources/prettify/prettify.js"></script>
  8. <style type="text/css">
  9. .highlight { display: block; background-color: #ddd; }
  10. </style>
  11. <script type="text/javascript">
  12. function highlight() {
  13. document.getElementById(location.hash.replace(/#/, "")).className = "highlight";
  14. }
  15. </script>
  16. </head>
  17. <body onload="prettyPrint(); highlight();">
  18. <pre class="prettyprint lang-js"><span id='Ext-direct-PollingProvider'>/**
  19. </span> * @class Ext.direct.PollingProvider
  20. *
  21. * &lt;p&gt;Provides for repetitive polling of the server at distinct {@link #interval intervals}.
  22. * The initial request for data originates from the client, and then is responded to by the
  23. * server.&lt;/p&gt;
  24. *
  25. * &lt;p&gt;All configurations for the PollingProvider should be generated by the server-side
  26. * API portion of the Ext.Direct stack.&lt;/p&gt;
  27. *
  28. * &lt;p&gt;An instance of PollingProvider may be created directly via the new keyword or by simply
  29. * specifying &lt;tt&gt;type = 'polling'&lt;/tt&gt;. For example:&lt;/p&gt;
  30. * &lt;pre&gt;&lt;code&gt;
  31. var pollA = new Ext.direct.PollingProvider({
  32. type:'polling',
  33. url: 'php/pollA.php',
  34. });
  35. Ext.direct.Manager.addProvider(pollA);
  36. pollA.disconnect();
  37. Ext.direct.Manager.addProvider(
  38. {
  39. type:'polling',
  40. url: 'php/pollB.php',
  41. id: 'pollB-provider'
  42. }
  43. );
  44. var pollB = Ext.direct.Manager.getProvider('pollB-provider');
  45. * &lt;/code&gt;&lt;/pre&gt;
  46. */
  47. Ext.define('Ext.direct.PollingProvider', {
  48. /* Begin Definitions */
  49. extend: 'Ext.direct.JsonProvider',
  50. alias: 'direct.pollingprovider',
  51. uses: ['Ext.direct.ExceptionEvent'],
  52. requires: ['Ext.Ajax', 'Ext.util.DelayedTask'],
  53. /* End Definitions */
  54. <span id='Ext-direct-PollingProvider-cfg-interval'> /**
  55. </span> * @cfg {Number} interval
  56. * How often to poll the server-side in milliseconds. Defaults to every 3 seconds.
  57. */
  58. interval: 3000,
  59. <span id='Ext-direct-PollingProvider-cfg-baseParams'> /**
  60. </span> * @cfg {Object} baseParams
  61. * An object containing properties which are to be sent as parameters on every polling request
  62. */
  63. <span id='Ext-direct-PollingProvider-cfg-url'> /**
  64. </span> * @cfg {String/Function} url
  65. * The url which the PollingProvider should contact with each request. This can also be
  66. * an imported Ext.Direct method which will accept the baseParams as its only argument.
  67. */
  68. // private
  69. constructor : function(config){
  70. this.callParent(arguments);
  71. this.addEvents(
  72. <span id='Ext-direct-PollingProvider-event-beforepoll'> /**
  73. </span> * @event beforepoll
  74. * Fired immediately before a poll takes place, an event handler can return false
  75. * in order to cancel the poll.
  76. * @param {Ext.direct.PollingProvider} this
  77. */
  78. 'beforepoll',
  79. <span id='Ext-direct-PollingProvider-event-poll'> /**
  80. </span> * @event poll
  81. * This event has not yet been implemented.
  82. * @param {Ext.direct.PollingProvider} this
  83. */
  84. 'poll'
  85. );
  86. },
  87. // inherited
  88. isConnected: function(){
  89. return !!this.pollTask;
  90. },
  91. <span id='Ext-direct-PollingProvider-method-connect'> /**
  92. </span> * Connect to the server-side and begin the polling process. To handle each
  93. * response subscribe to the data event.
  94. */
  95. connect: function(){
  96. var me = this, url = me.url;
  97. if (url &amp;&amp; !me.pollTask) {
  98. me.pollTask = Ext.TaskManager.start({
  99. run: function(){
  100. if (me.fireEvent('beforepoll', me) !== false) {
  101. if (Ext.isFunction(url)) {
  102. url(me.baseParams);
  103. } else {
  104. Ext.Ajax.request({
  105. url: url,
  106. callback: me.onData,
  107. scope: me,
  108. params: me.baseParams
  109. });
  110. }
  111. }
  112. },
  113. interval: me.interval,
  114. scope: me
  115. });
  116. me.fireEvent('connect', me);
  117. } else if (!url) {
  118. //&lt;debug&gt;
  119. Ext.Error.raise('Error initializing PollingProvider, no url configured.');
  120. //&lt;/debug&gt;
  121. }
  122. },
  123. <span id='Ext-direct-PollingProvider-method-disconnect'> /**
  124. </span> * Disconnect from the server-side and stop the polling process. The disconnect
  125. * event will be fired on a successful disconnect.
  126. */
  127. disconnect: function(){
  128. var me = this;
  129. if (me.pollTask) {
  130. Ext.TaskManager.stop(me.pollTask);
  131. delete me.pollTask;
  132. me.fireEvent('disconnect', me);
  133. }
  134. },
  135. // private
  136. onData: function(opt, success, response){
  137. var me = this,
  138. i = 0,
  139. len,
  140. events;
  141. if (success) {
  142. events = me.createEvents(response);
  143. for (len = events.length; i &lt; len; ++i) {
  144. me.fireEvent('data', me, events[i]);
  145. }
  146. } else {
  147. me.fireEvent('data', me, new Ext.direct.ExceptionEvent({
  148. data: null,
  149. code: Ext.direct.Manager.exceptions.TRANSPORT,
  150. message: 'Unable to connect to the server.',
  151. xhr: response
  152. }));
  153. }
  154. }
  155. });</pre>
  156. </body>
  157. </html>