Issue 6 in caffeineim: Реализовать реакцию на обрыв соединения

6 views
Skip to first unread message

codesite...@google.com

unread,
Jan 17, 2010, 2:23:41 AM1/17/10
to caffein...@googlegroups.com
Status: Accepted
Owner: b...@caffeine-soft.org
Labels: Type-Defect Priority-Critical

New issue 6 by b...@caffeine-soft.org: Реализовать реакцию на обрыв
соединения
http://code.google.com/p/caffeineim/issues/detail?id=6

Критическая проблема в нашей библиотеке - отсутствие проверки соединения на
живучесть и обеспечения реакции на такое соединение. Моя переписка на
форумах и гугление пока ничего не дало. Максимум что можно сделать -
отследить наличие обрыва в Windows, но не в Linux.

Есть идеи:
- Пинговать ICQ посылкой какого-то запроса, но ICQ после N-го пинга
обрывает соединение.

- Пинговать сервер ICQ с помощью команды ping операционной системы, но
тогда приложение будет зависить от используемой ОС (например, сложно будет
портировать на Android).

--
You received this message because you are listed in the owner
or CC fields of this issue, or because you starred this issue.
You may adjust your issue notification preferences at:
http://code.google.com/hosting/settings

codesite...@google.com

unread,
Apr 29, 2010, 11:37:47 PM4/29/10
to caffein...@googlegroups.com

Comment #1 on issue 6 by dilshat.aliev: Реализовать реакцию на обрыв
соединения
http://code.google.com/p/caffeineim/issues/detail?id=6

connection.sendFlap(new KeepAlive());

package ru.caffeineim.protocols.icq.packet.sent.generic;

import ru.caffeineim.protocols.icq.Flap;

/**
*
* @author daliev
*/
public class KeepAlive extends Flap {

public KeepAlive()
{
super(5);
}

}


сервер не бортует

--
Для того, чтобы отправить сообщение в эту группу, пошлите его по адресу
caffein...@googlegroups.com

Чтобы отменить подписку на эту группу, отправьте сообщение по адресу:
caffeineim-de...@googlegroups.com

Дополнительные варианты находятся на странице группы
http://groups.google.com/group/caffeineim-dev?hl=ru

codesite...@google.com

unread,
Apr 29, 2010, 11:41:49 PM4/29/10
to caffein...@googlegroups.com

Comment #2 on issue 6 by dilshat.aliev: Реализовать реакцию на обрыв
соединения
http://code.google.com/p/caffeineim/issues/detail?id=6

у меня отсылается не чаще чем раз в минуту при условии что не было входящих
и
успешных выходящих пакетов

codesite...@google.com

unread,
Jun 2, 2010, 4:51:50 AM6/2/10
to caffein...@googlegroups.com

Comment #3 on issue 6 by dark.cri...@gmail.com: Реализовать реакцию на
обрыв соединения
http://code.google.com/p/caffeineim/issues/detail?id=6

ru.caffeineim.protocols.icq.core.OscarClient
+ public synchronized boolean getRuning() { return running; }

ru.caffeineim.protocols.icq.core.OscarPingHandler
+ try {
while(connection.getClient().getRuning()) {
if (connection.isAuthorized()) {
//System.err.println("ping...");
connection.sendFlap(new KeepAlive());
}
Thread.sleep(interval);
}
} catch (InterruptedException e) { e.printStackTrace(); }

И уже в главном классе, написать например так:
public void onLogout(Exception exception) {
try {
Logger.writelnErr("ReConnect #0\nReconnect on 60
secounds...");
Thread.sleep(60000);
this.reConnect();
} catch (Exception ex) {
try {
Logger.writelnErr("ReConnect
#1\n"+ex.getMessage()+"\nReconnect on 60
secounds...");
Thread.sleep(60000);
this.reConnect();
} catch (Exception ex1) {
Logger.writelnErr(ex1.getMessage()+"\nLogged
out (possibly due to error)"); ex1.printStackTrace();
System.out.println("Logged out
(possibly due to error)"); }
} Logger.writelnErr("ReConnect #X");
}

public void reConnect() {
try {
Logger.writelnErr("Init reConnect");
try {
this.connection.getClient().disconnect();
} catch (Exception ex0) { Logger.writelnErr(ex0.getMessage()); }
Thread.sleep(4000);
Logger.writelnErr("Stop all listners... wait 60 secounds...");
this.connection.removeOurStatusListener(this);
this.connection.removeUserStatusListener(this);
this.connection.removeMessagingListener(this);
this.connection.close();
Thread.sleep(60000);
this.connection = null;
Logger.writelnErr("Login to:"+SERVER+":"+PORT+"\nUIN: "+UIN);
this.connection = new OscarConnection(SERVER, PORT, UIN,
PASSWORD, null);
connection.addMessagingListener(this);
connection.addUserStatusListener(this);
connection.addOurStatusListener(this);
connection.connect();
} catch (Exception ex) { Logger.writelnErr(ex.getMessage()); }
}

codesite...@google.com

unread,
Jun 3, 2010, 1:29:13 AM6/3/10
to caffein...@googlegroups.com

Comment #4 on issue 6 by samolisov: Реализовать реакцию на обрыв соединения
http://code.google.com/p/caffeineim/issues/detail?id=6

Огромное спасибо за патч! В ближайшее время опробую и закоммичу.

codesite...@google.com

unread,
Jun 3, 2010, 2:58:53 AM6/3/10
to caffein...@googlegroups.com

Comment #5 on issue 6 by dark.cri...@gmail.com: Реализовать реакцию на
обрыв соединения
http://code.google.com/p/caffeineim/issues/detail?id=6

Запустил сегодня своего информера :)
Кстати, у меня была версия годичной давности вашей библиотеки, и когда был
Ping(), то
тоже работало хорошо все, аптайм максимум я замечал 3 недели(с реконнектами
ес-но).
Теперь попробуем с KeepAlive() как будет себя вести...

dilshat.aliev: "у меня отсылается не чаще чем раз в минуту при условии что
не было
входящих и успешных выходящих пакетов" - вот этот код еще бы увидеть...

Reply all
Reply to author
Forward
0 new messages