| 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>
 |