ICQ - форум. Всё про ICQ.  

Вернуться   ICQ - форум. Всё про ICQ. > Мастерская > Программирование

Программирование C / C++ / Visual C++ / Delphi / Visual Basic / ASM / Windows / Pascal

 
 
Опции темы Рейтинг: Рейтинг темы: голосов - 29, средняя оценка - 4.48.
Старый 28.05.2007, 06:59   #1
Участник
 
Регистрация: 06.08.2006
Сообщений: 243

ICQ: 272727765

Репутация: 406
По умолчанию TICQClient - исправления, дополнения и прочее

В этой теме будут выкладываться исправления и дополнения к компоненту TICQClient от Кобана для Delphi.


Компонент, актуально работающий на 13.08.2010
скачать: TICQClient
Пример работы с компонентом:
скачать: СheatICQ
Официальный хелп от coban2k
скачать: TICQClientHelp.rar



==============================

Оригинальный компонент (с демо): скачать


Компонент с работающими прокси и кодировками скачать тут


Компонент от Romen'a (с демо):
- движок на ICQ
- к архиве есть все необходимые модули (для WSocket'a от ICS 1.4, плюс из RxLib несколько модулей)
- из компонента убрано все "лишнее"
скачать

Демки делались в Turbo Delphi 2006, поэтому если вы будете собирать их под Delphi 7 и ниже не забудте в насткойках проекта указать пути, иначе среда не найдет эти модули и будет ругаться на их отсутствие.



1) Project -> Options
2) Закладка Directories/Conditionals
3) -> Units output directory: Units
-> Search path: ICQClient

Последний раз редактировалось DjFly; 04.02.2012 в 20:23.
Sax-mmS вне форума  
Плюсанули Sax-mmS — 3 :
Старый 20.06.2008, 15:43   #226
Участник
 
Аватар для metal
 
Регистрация: 31.10.2003
Сообщений: 568

Репутация: 1627
По умолчанию

Цитата:
Сообщение от Alex14 Посмотреть сообщение
Я не могу превратить эти 3000 байт в картинку.
Нужны 3 объекта для этого.

TMemoryStream *stream;
TJpegImage *jpg;
TBitmap *BMP;

Буфер из этого TLV($0002) копируешь в стрим, потом из стрима в TJpegImage.

Код:
          stream->Clear();
          stream->SetSize(тут длина буфера в этом TLV);
          stream->Position = 0;
          stream->Write((VOID*)указатель на этот буфер, длина буфера);
          stream->Position = 0;
          try
          {
            jpg->LoadFromStream(stream);
            BMP->Assign(jpg);
          }
          catch(...)
          {
// обработка исключения с джпегом
          }
теперь можно делать с BMP все чо угодно

ADD: На дельфи примерно то же самое. С синтаксисом боюсь прошибиться. Буквально стрелочки на точечки заменить + по мелочи.
__________________
Красивые номерки - niceuin.ru
info
icq [553-555]

Последний раз редактировалось metal; 20.06.2008 в 15:49.
metal вне форума  
Плюсанул metal :
Старый 20.06.2008, 17:45   #227
Участник
 
Регистрация: 12.12.2007
Сообщений: 6

Репутация: 2
По умолчанию

metal
спасибо, кстати на Delpi этот код выглядит так:
Код:
function GetImageFromPacket(p: PPack): TPicture;
var
  MS: TMemoryStream;
  TempImage: TJPEGImage;
begin
  MS := TMemoryStream.Create();
  MS.write(p^.data, p^.length);
  MS.Position := 0;
  TempImage := TJPEGImage.Create();
  TempImage.LoadFromStream(MS);

  Result := TPicture.Create();
  Result.Assign(TempImage);

  TempImage.Destroy;
  MS.Destroy;
end;
Alex14 вне форума  
Старый 20.06.2008, 23:47   #228
Участник
 
Регистрация: 15.06.2008
Сообщений: 17

ICQ: 117868

Репутация: 34
По умолчанию

Цитата:
Сообщение от Tsar_Ioann_XIII Посмотреть сообщение
И тем не менее, ни ICQ6, ни qip8060 не определяли, что я ставил такой Хстатус.
Я посмотрел повнимательнее с помощью ICQMenace и увидел, что если в ICQ6 менять XStatus, то второй ICQ6 получает 2 пакета SNAC(03,0B), причём в одном из них - icqmood. А если я в своей программе пытаюсь поставить XStatus, то ICQ6 получает всего 1 пакет SNAC(03, 0B). Пакеты установки XStatus'а почти совпадают (за исключением FLAP, см. выше). В чём проблема - непонятно... Подскажите, пожалуйста.
Tsar_Ioann_XIII вне форума  
Плюсанул Tsar_Ioann_XIII :
Старый 21.06.2008, 11:37   #229
Участник
 
Регистрация: 27.09.2006
Сообщений: 1,045

ICQ: 272768

Репутация: 2856
Отправить сообщение для .fry с помощью Skype™ Bimoid
По умолчанию

Tsar_Ioann_XIII, ну так разбери в Menace этот пакет, и сделай в TICQClient, это очень просто ;)
__________________
Хочешь знать как работает ICQ? Читай документацию по протоколу в OSCAR.
.fry вне форума  
Плюсанул .fry :
Старый 21.06.2008, 12:52   #230
Участник
 
Регистрация: 15.06.2008
Сообщений: 17

ICQ: 117868

Репутация: 34
По умолчанию

Разобрал, но в чём причина, остаётся загадкой.

Когда я ставлю XStatus в ICQ6, то qip8060 принимает SNAC(03,0B), где в конце - TLV13 (в нём капабилити), TLV29 (в нём текст XStatus'а) и снова TLV13 (в нём две Unknown (для Menace) капабилити, в первой icqmood).

Когда я ставлю XStatus в своей программе, то qip8060 принимает SNAC(03,0B), где в конце - TLV13 (в нём капабилити), TLV15 и TLV3 (в них Time). Про XStatus нет и речи...

Тем не менее пакеты установки XStatus'а одинаковы и у ICQ6, и у моей проги (их я приводил здесь - http://forum.asechka.ru/showpost.php...&postcount=244 ).

В чём же проблема тогда?

Добавлено через 3 минуты
Кстати, народ, у кого-то ведь работает? Посмотрите, пожалуйста, до сих пор работает? Если да, то будьте так любезны, выложите сырцы.

Последний раз редактировалось Tsar_Ioann_XIII; 21.06.2008 в 12:55. Причина: Добавлено сообщение
Tsar_Ioann_XIII вне форума  
Плюсанул Tsar_Ioann_XIII :
Старый 23.06.2008, 08:35   #231
Участник
 
Регистрация: 04.02.2008
Сообщений: 11

Репутация: 1
По умолчанию

Sax-mmS, там уже есть глобальная константа, однако по неизвестной причине в самой программе вместо неё используется прямое указание значения...

Вопрос по поводу ошибки "Recived malformed packet" остаётся открытым. Пробовал закоментировать проверку условия - начинает вылетать Access violation. Сообщение возникает когда я требую у сервера офф-лайн сообщения...
Llirik81 вне форума  
Старый 23.06.2008, 15:56   #232
Участник
 
Регистрация: 15.06.2008
Сообщений: 17

ICQ: 117868

Репутация: 34
По умолчанию

Моя проблема (по поводу XStatus'ов) похоже решена! Я взял TICQClient от Romen'а - там всё работает!

Добавлено через 13 минут
А теперь я понял, почему у меня не работало! Не надо было понтиться с версией протокола (я поставил 666). Ставим 8 или 11, и всё работает. Пока я бился над своим компонентом, я переделал уже почти всё "по образу и подобию" пакетов ICQ6, а надо было всего лишь поменять одну цифирю.
Я благодарен всем, кто пытался дать мне совет или помочь (без этой моральной поддержки я бы ничего не добился).
Llirik81, щас повожусь над твоей проблемой...

Последний раз редактировалось Tsar_Ioann_XIII; 23.06.2008 в 16:10. Причина: Добавлено сообщение
Tsar_Ioann_XIII вне форума  
Плюсанул Tsar_Ioann_XIII :
Старый 27.06.2008, 11:47   #233
Участник
 
Регистрация: 15.06.2008
Сообщений: 17

ICQ: 117868

Репутация: 34
По умолчанию

Llirik81, учёл, что в функциях GetInt, GetLInt и GetStr написано 8100?
Tsar_Ioann_XIII вне форума  
Плюсанул Tsar_Ioann_XIII :
Старый 27.06.2008, 13:15   #234
 
Аватар для bART
 
Регистрация: 27.06.2007
Сообщений: 311

ICQ: 888944

По умолчанию %)

Вы что, не читаете посты, которые с верху? Ухо ведь написал, что нужно исправлять здесь:
Код:
procedure TICQNet.HandleFlapData(Buffer: Pointer; BufLen: LongWord);
Код:
if FNewFlap.DataLen > 998192 then  //  исправленно с 8192
{Как видите, из продседуры, если размер пакета больше 8192, то вызвать ошибку! Ставим вместо 8192 число, которое намного больше и ошибка не вылетит!}
      begin
        if Assigned(OnError) then
          OnError(Self, ERR_PROTOCOL, ICQLanguages[FErrLang].Translate(IMSG_EPROTO_LEN), IMSG_EPROTO_LEN);
        FSocket.Disconnect;
        Exit;
      end;
У меня тоже раньше возникала эта проблема, и именно этим удалось её решить! Спасибо, ухо , ибо он подсказал, как сделать! ;)
__________________

bART вне форума  
Плюсанул bART :
Старый 27.06.2008, 13:31   #235
Участник
 
Регистрация: 04.02.2008
Сообщений: 11

Репутация: 1
По умолчанию

[.BarT], читай внимательнее пожалуйста, я уже указал, что ошибку с размером пакета я исправил указанным методом...

Tsar_Ioann_XIII, сейчас стоит вопрос не о размере пакета, а о том, что у меня вылетает ошибка во фрагмете:

Цитата:
if FNewFlap.Ident <> $2a then
begin
if Assigned(OnError) then;
OnError(Self, ERR_PROTOCOL, ICQLanguages[FErrLang].Translate(IMSG_EMALFORMED_PKT ), IMSG_EMALFORMED_PKT);
FSocket.Disconnect;
Exit;
end;
При этом, если этот код закоментировать, то вылетает Access Violation через два пакета на третий...
Llirik81 вне форума  
Старый 29.06.2008, 14:15   #236
Участник
 
Регистрация: 15.06.2008
Сообщений: 17

ICQ: 117868

Репутация: 34
По умолчанию

Ты меня запутал... Она у тебя вылетает именно в ситуации приёма больших пакетов или всегда?
Tsar_Ioann_XIII вне форума  
Плюсанул Tsar_Ioann_XIII :
Старый 29.06.2008, 14:24   #237
Участник
 
Регистрация: 27.09.2006
Сообщений: 1,045

ICQ: 272768

Репутация: 2856
Отправить сообщение для .fry с помощью Skype™ Bimoid
По умолчанию

Llirik81, да у тебя просто приходит не пакет ICQ, успокойся.
в заголовке нет 2A это *, начало любого ICQ-пакета
__________________
Хочешь знать как работает ICQ? Читай документацию по протоколу в OSCAR.
.fry вне форума  
Плюсанул .fry :
Старый 29.06.2008, 17:14   #238
Участник
 
Регистрация: 04.02.2008
Сообщений: 11

Репутация: 1
По умолчанию

Tsar_Ioann_XIII, она у меня вылетает тогда, когда в оффлайне скапливается очень много сообщений и я пытаюсь их вычитать...


.fry, да вот проблема заключается в том, что в ответ на то, что приходит такой пакет компонент отключается от сервера, а если закоментить строку, в которой происходит отключение от сервера, то на следующих пакетах, в случайном порядке начинает вылетать Access Violation...
Llirik81 вне форума  
Старый 01.07.2008, 23:51   #239
Участник
 
Аватар для kaleostra
 
Регистрация: 09.01.2005
Сообщений: 525

ICQ: 577388

Репутация: 1607
По умолчанию

Итак, компонент, вроде умер :(
Кто то нашол лечение?
__________________
ботов уже нету :))
kaleostra вне форума  
Плюсанул kaleostra :
Старый 01.07.2008, 23:54   #240
Участник
 
Регистрация: 27.09.2006
Сообщений: 1,045

ICQ: 272768

Репутация: 2856
Отправить сообщение для .fry с помощью Skype™ Bimoid
По умолчанию

kaleostra, а что с ним? ты о чем? %)

Добавлено через 5 минут
Хм, я запустил делфю, проверил.. всё компилится, номера выходят в онлайн...

Добавлено через 7 минут
Llirik81, это "не правильный" пакет, советую переподключиться если получаешь такой пакет, или это повторяется каждый раз?..
__________________
Хочешь знать как работает ICQ? Читай документацию по протоколу в OSCAR.

Последний раз редактировалось .fry; 02.07.2008 в 00:01. Причина: Добавлено сообщение
.fry вне форума  
Плюсанул .fry :
Старый 02.07.2008, 00:16   #241
Участник
 
Регистрация: 27.09.2006
Сообщений: 1,045

ICQ: 272768

Репутация: 2856
Отправить сообщение для .fry с помощью Skype™ Bimoid
По умолчанию

На крайний случай ;)
кусочками переписанный..
Вложения
Тип файла: rar ICQClient.rar (76.1 Кб, 521 просмотров)
__________________
Хочешь знать как работает ICQ? Читай документацию по протоколу в OSCAR.
.fry вне форума  
Плюсанул .fry :
Старый 02.07.2008, 12:55   #242
Участник
 
Регистрация: 02.07.2008
Сообщений: 4

Репутация: 1
По умолчанию socks proxy

уважаемые, а есть компонента с рабочей реализацией проксей?
в целом у меня всe работает, но при добавлении прокси висит
PHP код:
icq.ProxyType := P_SOCKS5;
icq.ProxyAuth := true;
icq.ProxyHost := 'xxx.xxx.xxx.xxx';
icq.ProxyPort := StrTOInt('xxxx');
icq.ProxyUserID := 'xxx';
icq.ProxyPass := 'xxxxxx'
подключаюсь к порту 443, как писали выше.
TForm вне форума  
Старый 02.07.2008, 13:11   #243
Участник
 
Регистрация: 11.06.2007
Сообщений: 1

Репутация: 1
По умолчанию

сори все пашет, у меня просто в компоненте не было ScreenName, а зачем эту переменную ввели?

Только вот что-то не работает ICQClient1.SearchByUIN('...'). ..

Последний раз редактировалось ewrrrr; 02.07.2008 в 13:39.
ewrrrr вне форума  
Старый 02.07.2008, 13:40   #244
Участник
 
Регистрация: 27.09.2006
Сообщений: 1,045

ICQ: 272768

Репутация: 2856
Отправить сообщение для .fry с помощью Skype™ Bimoid
По умолчанию

ewrrrr, в мой TICQClient можно логиниться с AIM-Screen name, что довольно полезно, это единственное отличие..
НО, у меня вообще не работают прокси..
__________________
Хочешь знать как работает ICQ? Читай документацию по протоколу в OSCAR.
.fry вне форума  
Плюсанул .fry :
Старый 02.07.2008, 14:25   #245
Участник
 
Регистрация: 15.06.2008
Сообщений: 17

ICQ: 117868

Репутация: 34
По умолчанию

Так! Для пользователей "козачка" (см. стр. 2):
Перед кодом:
Код:
{signon errors}
if (T = $8) and (Length(FValue) >= 2) then
 begin
   case ord(FValue[2]) of
пишем так:
Код:
if (T = $8) and (Length(FValue) >= 2) and (Ord(FValue[2]) = $1C) then
 begin
  //do nothing
 end
else
Если кому надо, могу объяснить, с чем связано.
Tsar_Ioann_XIII вне форума  
Плюсанул Tsar_Ioann_XIII :
Старый 02.07.2008, 15:02   #246
Участник
 
Регистрация: 11.12.2007
Сообщений: 1

Репутация: 1
По умолчанию

Ну это несколько прямолинейно :). А поэлегантнее варианта нет? ;)
xStarter вне форума  
Старый 02.07.2008, 15:20   #247
Участник
 
Регистрация: 15.06.2008
Сообщений: 17

ICQ: 117868

Репутация: 34
По умолчанию

Ну уж не знаю, как поэлегантнее... Суть в том, что когда нам пишут TLV(8), а в нём $1C, то мы это не воспринимаем как ошибку, а просто игнорируем.

Кстати, свой TICQClient я переписал - теперь это компонент с сайта "козачок", правленый мною (например очень важно было поменять пакеты при загрузке и их порядок).
Tsar_Ioann_XIII вне форума  
Плюсанул Tsar_Ioann_XIII :
Старый 02.07.2008, 16:02   #248
Участник
 
Регистрация: 02.07.2008
Сообщений: 4

Репутация: 1
По умолчанию

Цитата:
Сообщение от Tsar_Ioann_XIII Посмотреть сообщение
Ну уж не знаю, как поэлегантнее... Суть в том, что когда нам пишут TLV(8), а в нём $1C, то мы это не воспринимаем как ошибку, а просто игнорируем.

Кстати, свой TICQClient я переписал - теперь это компонент с сайта "козачок", правленый мною (например очень важно было поменять пакеты при загрузке и их порядок).
а в козачке прокси рабочие?
TForm вне форума  
Старый 02.07.2008, 16:10   #249
Участник
 
Регистрация: 04.02.2008
Сообщений: 11

Репутация: 1
По умолчанию

.fry, рассказываю подробно:
данная проблема всплывает в двух случаях:
1. Ошибочный процесс при авторизации (что решается повторным реконнектом)
2. После подключения при вычитке с сервера оффлайновых сообщений (количеством больше 100). В этом случае компонент делает попытку уйти в глубокий даун... с одной стороны сервер считает, что клиент уже в сети и шлёт ему данные, с другой стороны - компонент ничего не позволяет принимать и отправлять... в лучшем случае он просто выдаёт дисконнект... в худшем - начинает выпихивать Access Violation
Llirik81 вне форума  
Старый 02.07.2008, 21:59   #250
Участник
 
Аватар для kaleostra
 
Регистрация: 09.01.2005
Сообщений: 525

ICQ: 577388

Репутация: 1607
По умолчанию

Блин, прокси перестало работать и это факт... До этого у меня работало через прокси...
__________________
ботов уже нету :))
kaleostra вне форума  
Плюсанул kaleostra :
 

Метки
delphi, ticqclient

Опции темы
Оценка этой теме
Оценка этой теме:

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +3, время: 20:55.


Перевод: zCarot
Форум Асечников © Asechka.RU

Новости Сочи