/sdk/src/direct/PollingProvider.js

https://bitbucket.org/mobile_venkys/mobisale1 · JavaScript · 145 lines · 65 code · 14 blank · 66 comment · 11 complexity · 9c042fc5f3d1707fcb13e8d40d979df0 MD5 · raw file

  1. /**
  2. * @class Ext.direct.PollingProvider
  3. *
  4. * <p>Provides for repetitive polling of the server at distinct {@link #interval intervals}.
  5. * The initial request for data originates from the client, and then is responded to by the
  6. * server.</p>
  7. *
  8. * <p>All configurations for the PollingProvider should be generated by the server-side
  9. * API portion of the Ext.Direct stack.</p>
  10. *
  11. * <p>An instance of PollingProvider may be created directly via the new keyword or by simply
  12. * specifying <tt>type = 'polling'</tt>. For example:</p>
  13. * <pre><code>
  14. var pollA = Ext.create('Ext.direct.PollingProvider', {
  15. type:'polling',
  16. url: 'php/pollA.php',
  17. });
  18. Ext.direct.Manager.addProvider(pollA);
  19. pollA.disconnect();
  20. Ext.direct.Manager.addProvider(
  21. {
  22. type:'polling',
  23. url: 'php/pollB.php',
  24. id: 'pollB-provider'
  25. }
  26. );
  27. var pollB = Ext.direct.Manager.getProvider('pollB-provider');
  28. * </code></pre>
  29. */
  30. Ext.define('Ext.direct.PollingProvider', {
  31. extend: 'Ext.direct.JsonProvider',
  32. alias: 'direct.pollingprovider',
  33. uses: ['Ext.direct.ExceptionEvent'],
  34. requires: ['Ext.Ajax', 'Ext.util.DelayedTask'],
  35. config: {
  36. /**
  37. * @cfg {Number} interval
  38. * How often to poll the server-side in milliseconds. Defaults to every 3 seconds.
  39. */
  40. interval: 3000,
  41. /**
  42. * @cfg {Object} baseParams
  43. * An object containing properties which are to be sent as parameters on every polling request
  44. */
  45. baseParams: null,
  46. /**
  47. * @cfg {String/Function} url
  48. * The url which the PollingProvider should contact with each request. This can also be
  49. * an imported Ext.Direct method which will accept the baseParams as its only argument.
  50. */
  51. url: null
  52. },
  53. /**
  54. * @event beforepoll
  55. * Fired immediately before a poll takes place, an event handler can return false
  56. * in order to cancel the poll.
  57. * @param {Ext.direct.PollingProvider} this
  58. */
  59. /**
  60. * @event poll
  61. * This event has not yet been implemented.
  62. * @param {Ext.direct.PollingProvider} this
  63. */
  64. // inherited
  65. isConnected: function() {
  66. return !!this.pollTask;
  67. },
  68. /**
  69. * Connect to the server-side and begin the polling process. To handle each
  70. * response subscribe to the data event.
  71. */
  72. connect: function() {
  73. var me = this,
  74. url = me.getUrl(),
  75. baseParams = me.getBaseParams();
  76. if (url && !me.pollTask) {
  77. me.pollTask = setInterval(function() {
  78. if (me.fireEvent('beforepoll', me) !== false) {
  79. if (Ext.isFunction(url)) {
  80. url(baseParams);
  81. } else {
  82. Ext.Ajax.request({
  83. url: url,
  84. callback: me.onData,
  85. scope: me,
  86. params: baseParams
  87. });
  88. }
  89. }
  90. }, me.getInterval());
  91. me.fireEvent('connect', me);
  92. } else if (!url) {
  93. //<debug>
  94. Ext.Error.raise('Error initializing PollingProvider, no url configured.');
  95. //</debug>
  96. }
  97. },
  98. /**
  99. * Disconnect from the server-side and stop the polling process. The disconnect
  100. * event will be fired on a successful disconnect.
  101. */
  102. disconnect: function() {
  103. var me = this;
  104. if (me.pollTask) {
  105. clearInterval(me.pollTask);
  106. delete me.pollTask;
  107. me.fireEvent('disconnect', me);
  108. }
  109. },
  110. // private
  111. onData: function(opt, success, response) {
  112. var me = this,
  113. i = 0,
  114. len,
  115. events;
  116. if (success) {
  117. events = me.createEvents(response);
  118. for (len = events.length; i < len; ++i) {
  119. me.fireEvent('data', me, events[i]);
  120. }
  121. } else {
  122. me.fireEvent('data', me, Ext.create('Ext.direct.ExceptionEvent', {
  123. data: null,
  124. code: Ext.direct.Manager.exceptions.TRANSPORT,
  125. message: 'Unable to connect to the server.',
  126. xhr: response
  127. }));
  128. }
  129. }
  130. });