![]() |
Модераторы: korob2001, ginnie |
![]() ![]() ![]() |
|
FooBar |
|
||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 58 Регистрация: 25.2.2008 Репутация: 1 Всего: 3 |
написал небольшой класс для работы с icq,
вызываю его методы вот таким образом
номер выходит в онлайн, отсылает сообщение но если вызвать вот так:
то приходит сообщение только с $icq2, а $icq1 заходит в сеть и сразу из нее вылетает. по всей видимости при вызове второго метода new происходит уничтожение данных класса $icq1, вопрос в том как от этой проблемы избавится? |
||||||
|
|||||||
tishaishii |
|
|||
![]() Создатель ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1262 Регистрация: 14.2.2006 Где: Москва Репутация: 4 Всего: 8 |
use Net::ICQ
|
|||
|
||||
ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
FooBar, надо смотреть ошибки при соединении. Уничтожение данных класса $icq1 происходить не должно, т.к. там из данных только $self->{SOCK}.
Кроме того, неверно реализована функция seqNum(), т.к. она использует общую для всех объектов переменную $seqNum (по идее она должна быть для каждого объекта своя). -------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
FooBar |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 58 Регистрация: 25.2.2008 Репутация: 1 Всего: 3 |
tishaishii, я знаю и о Net::ICQ и о Net::OSCAR, но мне прежде всего интересно разобраться в самом протоколе,
ginnie, спасибо, это происходило из за номера пакета который генерировался функцией seqNum(), хотя в описании протокола говорилось что он не имеет значения. сам патч: $self->{SEQNUM} = sub { $seqNum++; $seqNum = 0 if $seqNum > 65535; return int2bytes($seqNum) }; &{$self->{SEQNUM}} |
|||
|
||||
ginnie |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
FooBar, предлагаю нормальный вариант:
в конструкторе new() пишем
и модифицируем функцию seqNum()
-------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
||||
|
|||||
nitr |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2543 Регистрация: 10.2.2006 Где: Россия :) Репутация: 37 Всего: 84 |
Поддержу ответ ginnie, я так и делал (однажды).
FooBar, молодец, что решил разобраться. Сколько знаю, мало кто может понять протокол ![]() Но ваш модуль "слишком тяжёлый". Например, метод new, такого стиля я ещё не встречал, думаю, стоит разделить на "функциональные" части. Вам же проще в дальнейшем будет. P.S.: Если приноровиться, то как логгер ошибок можно использовать Data::Dumper::Dumper ;) |
|||
|
||||
KSURi |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 887 Регистрация: 8.6.2006 Где: Russia Репутация: 20 Всего: 27 |
nitr, спецификацию протокола открыли недавно.
Раньше оно посложнее было, имхо, т.к. люди полагались только на снифер. Я свой модуль (около года назад) так и не дописал дальше выхода в онлайн, не хватило терпения =( -------------------- Died at Life.pl line 21 |
|||
|
||||
nitr |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2543 Регистрация: 10.2.2006 Где: Россия :) Репутация: 37 Всего: 84 |
KSURi, так я приводил здесь несколько ресурсов на "неофициальное описание", которое хоть и было построено на данных сниффера и других источников, но работало "как часы"
![]() Писать свой модуль, даже не знаю, имхо, только для изучения или мини-сервисов/ботов. А так надо, чтобы Net::OSCAR обновлялся и совершенствовался. Открыли протокол это хорошо, но он проще от этого не стал ;) |
|||
|
||||
KSURi |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 887 Регистрация: 8.6.2006 Где: Russia Репутация: 20 Всего: 27 |
Да, я читал несколько "неофициальных" статей по исследованию протокола, но они были написаны для относительно старых версий (7ая против текущей 11ой) и там были описаны только процедуры логина и отправки сообщений.
Мне не хватило терпения доделать отправку/прием сообщения по той "документации", а вот как делать, например, получение офлайновых сообщений, direct connect, передавать файлы и прочие вещи, которые не были описаны вообще нигде, я слабо представлял. -------------------- Died at Life.pl line 21 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Perl" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |