Вот мой код отлично работает для ReconnectionManager
1) Добавить addConnectionListener
на xmpp соединение
XMPPConnectionListener mConnectionListener = new XMPPConnectionListener(username);
connection.addConnectionListener(mConnectionListener);
2), если соединение закрыто, то переподключиться автоматически, используя класс ReconnectionManager
ReconnectionManager reconnectionManager = ReconnectionManager.getInstanceFor(connection);
reconnectionManager.enableAutomaticReconnection();
reconnectionManager.setEnabledPerDefault(true);
3) ConnectionListener
для переподключения, подключения и аутентификации на сервере. если соединение успешно аутентифицировано на сервере, зарегистрируйте также классы PingManager
и ServerPingWithAlarmManager
.
public class XMPPConnectionListener implements ConnectionListener {
String username="";
public XMPPConnectionListener(String username){
this.username=username;
}
@Override
public void connected(final XMPPConnection connectionObeject) {
sendPresenceAvailable();
Log.d(TAG, "xmpp Connected()");
connected = true;
}
@Override
public void connectionClosed() {
Log.d(TAG, "xmpp ConnectionCLosed()");
isAuthenticatedPreviouly=false;
connected = false;
loggedin = false;
}
@Override
public void connectionClosedOnError(Exception arg0) {
Log.d(TAG, "xmpp ConnectionClosedOnError() :"+System.currentTimeMillis());
isAuthenticatedPreviouly=false;
connected = false;
loggedin = false;
}
@Override
public void reconnectingIn(int arg0) {
Log.d(TAG, "xmpp reconnectingIn() :"+System.currentTimeMillis());
loggedin = false;
}
@Override
public void reconnectionFailed(Exception arg0) {
Log.d(TAG, "xmpp ReconnectionFailed!");
connected = false;
// chat_created = false;
loggedin = false;
try {
connection.connect();
} catch (SmackException | IOException | XMPPException | InterruptedException exception) {
exception.printStackTrace();
}
}
@Override
public void reconnectionSuccessful() {
Log.d(TAG, "xmpp ReconnectionSuccessful");
connected = true;
sendPresenceAvailable();
loggedin = false;
}
@Override
public void authenticated(XMPPConnection connection2, boolean resumed) {
Log.d(TAG, "xmpp Type Main Authenticated() :" + connection.isAuthenticated());
if(connection.isAuthenticated()) {
ServerPingWithAlarmManager.getInstanceFor(connection).setEnabled(true);
PingManager pingManager = PingManager.getInstanceFor(connection);
pingManager.setPingInterval(10);
try {
pingManager.pingMyServer();
pingManager.pingMyServer(true,10);
pingManager.pingServerIfNecessary();
pingManager.registerPingFailedListener(new PingFailedListener() {
@Override
public void pingFailed() {
Log.d("Ping","pingFailed");
disconnect();
connect();
}
});
registerAllListener();
}
}
ЦП находится в миллисекундах. В sql server 2005 и более поздних версиях продолжительность указывается в микросекундах при сохранении в файл или таблицу и в миллисекундах в пользовательском интерфейсе. В sqlserver 2000 это всегда в миллисекундах. Из MSDN .
Пользователь jerryhung дает более точную информацию о версии в комментарии:
Начиная с SQL Server 2005, сервер сообщает продолжительность события в микросекундах (одна миллионная или 10 -6 секунды) и количество процессорного времени, использованного событием в миллисекундах (одна тысячная, или 10 -3 секунды). В SQL Server 2000 сервер сообщал как продолжительность, так и время ЦП в миллисекундах. В SQL Server 2005 и более поздних версиях графический интерфейс пользователя SQL Server Profiler по умолчанию отображает столбец Duration в миллисекундах, но когда трассировка сохраняется либо в файл, либо в таблицу базы данных, значение столбца Duration записывается в микросекундах.