📄 jquery.cometd.js
字号:
_subscribeSuccess(message); break; case '/meta/unsubscribe': _unsubscribeSuccess(message); break; default: _messageSuccess(message); break; } }); _transport.complete(request, success, comet); }; function _handleFailure(request, messages, reason, exception, comet) { var xhr = request.xhr; _debug('Request failed, status: {}, reason: {}, exception: {}', xhr && xhr.status, reason, exception); $.each(messages, function(index, message) { var channel = message.channel; switch (channel) { case '/meta/handshake': _handshakeFailure(xhr, message); break; case '/meta/connect': _connectFailure(xhr, message); break; case '/meta/disconnect': _disconnectFailure(xhr, message); break; case '/meta/subscribe': _subscribeFailure(xhr, message); break; case '/meta/unsubscribe': _unsubscribeFailure(xhr, message); break; default: _messageFailure(xhr, message); break; } }); _transport.complete(request, false, comet); }; function _handshakeSuccess(message) { if (message.successful) { _debug('Handshake successful'); // Save clientId, figure out transport, then follow the advice to connect _clientId = message.clientId; var newTransport = _findTransport(message); if (newTransport === null) { throw 'Could not agree on transport with server'; } else { if (_transport.getType() != newTransport.getType()) { _debug('Changing transport from {} to {}', _transport.getType(), newTransport.getType()); _transport = newTransport; } } // Notify the listeners // Here the new transport is in place, as well as the clientId, so // the listener can perform a publish() if it wants, and the listeners // are notified before the connect below. _notifyListeners('/meta/handshake', message); var action = _advice.reconnect ? _advice.reconnect : 'retry'; switch (action) { case 'retry': _delayedConnect(); break; default: break; } } else { _debug('Handshake unsuccessful'); var retry = !_isDisconnected() && _advice.reconnect != 'none'; if (!retry) _setStatus('disconnected'); _notifyListeners('/meta/handshake', message); _notifyListeners('/meta/unsuccessful', message); // Only try again if we haven't been disconnected and // the advice permits us to retry the handshake if (retry) { _increaseBackoff(); _debug('Handshake failure, backing off and retrying in {} ms', _backoff); _delayedHandshake(); } } }; function _handshakeFailure(xhr, message) { _debug('Handshake failure'); // Notify listeners var failureMessage = { successful: false, failure: true, channel: '/meta/handshake', request: message, xhr: xhr, advice: { action: 'retry', interval: _backoff } }; var retry = !_isDisconnected() && _advice.reconnect != 'none'; if (!retry) _setStatus('disconnected'); _notifyListeners('/meta/handshake', failureMessage); _notifyListeners('/meta/unsuccessful', failureMessage); // Only try again if we haven't been disconnected and the // advice permits us to try again if (retry) { _increaseBackoff(); _debug('Handshake failure, backing off and retrying in {} ms', _backoff); _delayedHandshake(); } }; function _connectSuccess(message) { var action = _isDisconnected() ? 'none' : (_advice.reconnect ? _advice.reconnect : 'retry'); if (!_isDisconnected()) _setStatus(action == 'retry' ? 'connecting' : 'disconnecting'); if (message.successful) { _debug('Connect successful'); // End the batch and allow held messages from the application // to go to the server (see _handshake() where we start the batch). // The batch is ended before notifying the listeners, so that // listeners can batch other cometd operations _endBatch(true); // Notify the listeners after the status change but before the next connect _notifyListeners('/meta/connect', message); // Connect was successful. // Normally, the advice will say "reconnect: 'retry', interval: 0" // and the server will hold the request, so when a response returns // we immediately call the server again (long polling) switch (action) { case 'retry': _resetBackoff(); _delayedConnect(); break; default: _resetBackoff(); _setStatus('disconnected'); break; } } else { _debug('Connect unsuccessful'); // Notify the listeners after the status change but before the next action _notifyListeners('/meta/connect', message); _notifyListeners('/meta/unsuccessful', message); // Connect was not successful. // This may happen when the server crashed, the current clientId // will be invalid, and the server will ask to handshake again switch (action) { case 'retry': _increaseBackoff(); _delayedConnect(); break; case 'handshake': // End the batch but do not deliver the messages until we connect successfully _endBatch(false); _resetBackoff(); _delayedHandshake(); break; case 'none': _resetBackoff(); _setStatus('disconnected'); break; } } }; function _connectFailure(xhr, message) { _debug('Connect failure'); // Notify listeners var failureMessage = { successful: false, failure: true, channel: '/meta/connect', request: message, xhr: xhr, advice: { action: 'retry', interval: _backoff } }; _notifyListeners('/meta/connect', failureMessage); _notifyListeners('/meta/unsuccessful', failureMessage); if (!_isDisconnected()) { var action = _advice.reconnect ? _advice.reconnect : 'retry'; switch (action) { case 'retry': _increaseBackoff(); _debug('Connect failure, backing off and retrying in {} ms', _backoff); _delayedConnect(); break; case 'handshake': _resetBackoff(); _delayedHandshake(); break; case 'none': _resetBackoff(); break; default: _debug('Unrecognized reconnect value: {}', action); break; } } }; function _disconnectSuccess(message) { if (message.successful) { _debug('Disconnect successful'); _disconnect(false); _notifyListeners('/meta/disconnect', message); } else { _debug('Disconnect unsuccessful'); _disconnect(true); _notifyListeners('/meta/disconnect', message); _notifyListeners('/meta/usuccessful', message); } }; function _disconnect(abort) { _cancelDelayedSend(); if (abort) _transport.abort(); _clientId = null; _setStatus('disconnected'); _batch = 0; _messageQueue = []; _resetBackoff(); }; function _disconnectFailure(xhr, message) { _debug('Disconnect failure'); _disconnect(true); var failureMessage = { successful: false, failure: true, channel: '/meta/disconnect', request: message, xhr: xhr, advice: { action: 'none', interval: 0 } }; _notifyListeners('/meta/disconnect', failureMessage); _notifyListeners('/meta/unsuccessful', failureMessage); }; function _subscribeSuccess(message) { if (message.successful) { _debug('Subscribe successful'); _notifyListeners('/meta/subscribe', message); } else { _debug('Subscribe unsuccessful'); _notifyListeners('/meta/subscribe', message); _notifyListeners('/meta/unsuccessful', message); } }; function _subscribeFailure(xhr, message) { _debug('Subscribe failure'); var failureMessage = { successful: false, failure: true, channel: '/meta/subscribe', request: message, xhr: xhr, advice: { action: 'none', interval: 0 } }; _notifyListeners('/meta/subscribe', failureMessage); _notifyListeners('/meta/unsuccessful', failureMessage); }; function _unsubscribeSuccess(message) { if (message.successful) { _debug('Unsubscribe successful'); _notifyListeners('/meta/unsubscribe', message); } else { _debug('Unsubscribe unsuccessful'); _notifyListeners('/meta/unsubscribe', message); _notifyListeners('/meta/unsuccessful', message); } }; function _unsubscribeFailure(xhr, message) { _debug('Unsubscribe failure'); var failureMessage = { successful: false, failure: true, channel: '/meta/unsubscribe', request: message, xhr: xhr, advice: { action: 'none', interval: 0 } }; _notifyListeners('/meta/unsubscribe', failureMessage); _notifyListeners('/meta/unsuccessful', failureMessage); };
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -