123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175 |
- <!DOCTYPE html>
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>The source code</title>
- <link href="../resources/prettify/prettify.css" type="text/css" rel="stylesheet" />
- <script type="text/javascript" src="../resources/prettify/prettify.js"></script>
- <style type="text/css">
- .highlight { display: block; background-color: #ddd; }
- </style>
- <script type="text/javascript">
- function highlight() {
- document.getElementById(location.hash.replace(/#/, "")).className = "highlight";
- }
- </script>
- </head>
- <body onload="prettyPrint(); highlight();">
- <pre class="prettyprint lang-js"><span id='Ext-direct-PollingProvider'>/**
- </span> * @class Ext.direct.PollingProvider
- *
- * <p>Provides for repetitive polling of the server at distinct {@link #interval intervals}.
- * The initial request for data originates from the client, and then is responded to by the
- * server.</p>
- *
- * <p>All configurations for the PollingProvider should be generated by the server-side
- * API portion of the Ext.Direct stack.</p>
- *
- * <p>An instance of PollingProvider may be created directly via the new keyword or by simply
- * specifying <tt>type = 'polling'</tt>. For example:</p>
- * <pre><code>
- var pollA = new Ext.direct.PollingProvider({
- type:'polling',
- url: 'php/pollA.php',
- });
- Ext.direct.Manager.addProvider(pollA);
- pollA.disconnect();
- Ext.direct.Manager.addProvider(
- {
- type:'polling',
- url: 'php/pollB.php',
- id: 'pollB-provider'
- }
- );
- var pollB = Ext.direct.Manager.getProvider('pollB-provider');
- * </code></pre>
- */
- Ext.define('Ext.direct.PollingProvider', {
-
- /* Begin Definitions */
-
- extend: 'Ext.direct.JsonProvider',
-
- alias: 'direct.pollingprovider',
-
- uses: ['Ext.direct.ExceptionEvent'],
-
- requires: ['Ext.Ajax', 'Ext.util.DelayedTask'],
-
- /* End Definitions */
-
- <span id='Ext-direct-PollingProvider-cfg-interval'> /**
- </span> * @cfg {Number} interval
- * How often to poll the server-side in milliseconds. Defaults to every 3 seconds.
- */
- interval: 3000,
- <span id='Ext-direct-PollingProvider-cfg-baseParams'> /**
- </span> * @cfg {Object} baseParams
- * An object containing properties which are to be sent as parameters on every polling request
- */
-
- <span id='Ext-direct-PollingProvider-cfg-url'> /**
- </span> * @cfg {String/Function} url
- * The url which the PollingProvider should contact with each request. This can also be
- * an imported Ext.Direct method which will accept the baseParams as its only argument.
- */
- // private
- constructor : function(config){
- this.callParent(arguments);
- this.addEvents(
- <span id='Ext-direct-PollingProvider-event-beforepoll'> /**
- </span> * @event beforepoll
- * Fired immediately before a poll takes place, an event handler can return false
- * in order to cancel the poll.
- * @param {Ext.direct.PollingProvider} this
- */
- 'beforepoll',
- <span id='Ext-direct-PollingProvider-event-poll'> /**
- </span> * @event poll
- * This event has not yet been implemented.
- * @param {Ext.direct.PollingProvider} this
- */
- 'poll'
- );
- },
- // inherited
- isConnected: function(){
- return !!this.pollTask;
- },
- <span id='Ext-direct-PollingProvider-method-connect'> /**
- </span> * Connect to the server-side and begin the polling process. To handle each
- * response subscribe to the data event.
- */
- connect: function(){
- var me = this, url = me.url;
-
- if (url && !me.pollTask) {
- me.pollTask = Ext.TaskManager.start({
- run: function(){
- if (me.fireEvent('beforepoll', me) !== false) {
- if (Ext.isFunction(url)) {
- url(me.baseParams);
- } else {
- Ext.Ajax.request({
- url: url,
- callback: me.onData,
- scope: me,
- params: me.baseParams
- });
- }
- }
- },
- interval: me.interval,
- scope: me
- });
- me.fireEvent('connect', me);
- } else if (!url) {
- //<debug>
- Ext.Error.raise('Error initializing PollingProvider, no url configured.');
- //</debug>
- }
- },
- <span id='Ext-direct-PollingProvider-method-disconnect'> /**
- </span> * Disconnect from the server-side and stop the polling process. The disconnect
- * event will be fired on a successful disconnect.
- */
- disconnect: function(){
- var me = this;
-
- if (me.pollTask) {
- Ext.TaskManager.stop(me.pollTask);
- delete me.pollTask;
- me.fireEvent('disconnect', me);
- }
- },
- // private
- onData: function(opt, success, response){
- var me = this,
- i = 0,
- len,
- events;
-
- if (success) {
- events = me.createEvents(response);
- for (len = events.length; i < len; ++i) {
- me.fireEvent('data', me, events[i]);
- }
- } else {
- me.fireEvent('data', me, new Ext.direct.ExceptionEvent({
- data: null,
- code: Ext.direct.Manager.exceptions.TRANSPORT,
- message: 'Unable to connect to the server.',
- xhr: response
- }));
- }
- }
- });</pre>
- </body>
- </html>
|