📄 jquery.cometd.js
字号:
break;
case '/meta/subscribe':
_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
}
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -