Модераторы: Snowy, Poseidon, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как добавить контакт с сохранением на сервере? TICQClient 
:(
    Опции темы
Coderr
Дата 20.5.2007, 04:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 234
Регистрация: 27.1.2006
Где: Vesnet

Репутация: нет
Всего: 0



Доброго времени суток, товарищи форумчане!
Возникла проблема с добавлением контакта.
Функция AddContact добавляет контакт, но не добавляет в контакт-лист на сервере.
Что делать, какими функциями пользоваться?  smile 
--------------------
Кодинг - это стиль жизни!   
PM WWW ICQ   Вверх
Данкинг
Дата 20.5.2007, 08:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 1
Всего: 130



Там же справка есть, вроде, SSLAddUser надо использовать.


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Snowy
Дата 20.5.2007, 11:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 53
Всего: 484



Coderr, для работы с ServerSideList используются функции, начинающиеся на SSL.
Загляни в справку - там есть полные примеры, как дать запрос на авторизацию, начать изменение списка, добавить/удалить, завершить модификацию списка.
А назначение AddContact - запросить уведомление о сменах статуса контакта.
Да и вообще она немного криво написана - будет некрасиво себя вести при больших контакт-листах.
PM MAIL   Вверх
Coderr
Дата 20.5.2007, 22:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 234
Регистрация: 27.1.2006
Где: Vesnet

Репутация: нет
Всего: 0



Хорошо. Сейчас почитаем про SSL.  smile 

Цитата

Да и вообще она немного криво написана - будет некрасиво себя вести при больших контакт-листах. 


Совершенно согласен. А есть соображения как это исправить?
--------------------
Кодинг - это стиль жизни!   
PM WWW ICQ   Вверх
Snowy
Дата 21.5.2007, 11:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 53
Всего: 484



Только правкой кода компонента.
Вот здесь я расписал, что нужно исправить: http://forum.vingrad.ru/index.php?showtopi...t&p=1076193
PM MAIL   Вверх
Coderr
Дата 22.5.2007, 08:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 234
Регистрация: 27.1.2006
Где: Vesnet

Репутация: нет
Всего: 0



Сделал всё как написано... Чё-то Абстракт еррор говорит...  smile 
--------------------
Кодинг - это стиль жизни!   
PM WWW ICQ   Вверх
Snowy
Дата 22.5.2007, 11:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 53
Всего: 484



Абстракт епоп - это скорее всего от того, что ты заюзал TStrings, а не TStringList ;-)
PM MAIL   Вверх
Coderr
Дата 22.5.2007, 17:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 234
Регистрация: 27.1.2006
Где: Vesnet

Репутация: нет
Всего: 0



Угу! Оно самое.  smile  Лана. Ща поправимся...

Добавлено через 1 минуту и 16 секунд
Кстати, у тебя там написано
Код

procedure CreateCLI_ADDCONTACT(Pkt: PRawPkt; UINS: TStrings; var Seq: Word);

 smile

Добавлено через 9 минут и 32 секунды
Хм... Исправил 
Код

procedure TICQClient.AddBuddy(ContactLst: TStrings);


на 
Код

procedure TICQClient.AddBuddy(ContactLst: TStringList);


Скомпилился. Но теперь не меняются статусы...  smile 
--------------------
Кодинг - это стиль жизни!   
PM WWW ICQ   Вверх
Snowy
Дата 22.5.2007, 18:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 53
Всего: 484



Всё правильно у меня там написано.
А не меняются статусы - значит ты не вызываешь AddBuddy.
Либо вызываешь, но с пустым листом.
Либо вызываешь его чётное кол-во раз с одним и тем же листом.
PM MAIL   Вверх
Coderr
Дата 22.5.2007, 19:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 234
Регистрация: 27.1.2006
Где: Vesnet

Репутация: нет
Всего: 0



Вот у меня второй случай, а именно с пустым листом.
Не знаю... Вроде ошибиться негде... =(
Вот код:

Код

procedure TMainForm.ICQClientServerListRecv(Sender: TObject;
  SrvContactList: TList);
var
  i: Integer;
  UserInfo: TUINEntry;
  ListItem: TListItem;
  Contact_List_Var: TStringList;
begin
  Contact_List_Var := TStringList.Create;
  if SrvContactList.Count > 0 then
    for i := 0 to SrvContactList.Count - 1 do
    begin
      UserInfo := PUINEntry(SrvContactList.Items[i])^;
      if USerInfo.CTag = 0 then
       Groups.Add(IntToStr(UserInfo.UIN))
      else if UserInfo.CType = U_VISIBLE_LIST then
        ICQClient.VisibleList.Add(IntToStr(UserInfo.UIN))
      else if UserInfo.CType = U_INVISIBLE_LIST then
        ICQClient.InvisibleList.Add(IntToStr(UserInfo.UIN))
      else if UserInfo.CType = U_IGNORE_LIST then
        Ignore_List.Add(IntToStr(UserInfo.UIN))
      else if UserInfo.CType = U_NORMAL then
      begin
       Contact_List_Var.Add(IntToStr(UserInfo.UIN));
       if not UINExists(UserInfo.UIN) then begin
        ListItem := ListView.Items.Add;
        ListItem.SubItems.Add(IntToStr(UserInfo.UIN));
        ListItem.ImageIndex := 7;
        if UserInfo.Nick <> '' then
         ListItem.Caption := UserInfo.Nick
        else
         ListItem.Caption := IntToStr(UserInfo.UIN);
       end;
      end;
    end;
  ICQClient.DestroyUINList(SrvContactList);
  ListItem.Free;
  ICQClient.AddBuddy(Contact_List_Var);
end;

--------------------
Кодинг - это стиль жизни!   
PM WWW ICQ   Вверх
Snowy
Дата 22.5.2007, 20:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 53
Всего: 484



Ну во-первых внеси создание, AddBuddy и удаление временного листа в
 if SrvContactList.Count > 0 then
А во-вторых - у тебя ж отладчик есть.
Вот пошагово пройдись и посмотри, что у тебя и гуда...
PM MAIL   Вверх
Coderr
Дата 24.5.2007, 23:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 234
Регистрация: 27.1.2006
Где: Vesnet

Репутация: нет
Всего: 0



Отладчиком прохожу... Не помогает...  smile  Заколдованный код... Contact_List_Var просто пуст...
Изменил код вот так, тож не помогло:
Код

procedure TMainForm.ICQClientServerListRecv(Sender: TObject;
  SrvContactList: TList);
var
  i: Integer;
  UserInfo: TUINEntry;
  ListItem: TListItem;
  Contact_List_Var: TStringList;
begin
  if SrvContactList.Count > 0 then begin
   Contact_List_Var := TStringList.Create;
   for i := 0 to SrvContactList.Count - 1 do
    begin
      UserInfo := PUINEntry(SrvContactList.Items[i])^;
      if USerInfo.CTag = 0 then
       Groups.Add(UserInfo.Cellular)
      else if UserInfo.CType = U_VISIBLE_LIST then begin
        ICQClient.VisibleList.Add(IntToStr(UserInfo.UIN));
        Contact_List_Var.Add(SysUtils.IntToStr(UserInfo.UIN));
       end
      else if UserInfo.CType = U_INVISIBLE_LIST then begin
        ICQClient.InvisibleList.Add(IntToStr(UserInfo.UIN));
        Contact_List_Var.Add(SysUtils.IntToStr(UserInfo.UIN));
       end
      else if UserInfo.CType = U_IGNORE_LIST then
        Ignore_List.Add(SysUtils.IntToStr(UserInfo.UIN))
      else if UserInfo.CType = U_NORMAL then
      begin
       Contact_List_Var.Add(SysUtils.IntToStr(UserInfo.UIN));
       if not UINExists(UserInfo.UIN) then begin
        ListItem := ListView.Items.Add;
        ListItem.SubItems.Add(SysUtils.IntToStr(UserInfo.UIN));
        ListItem.ImageIndex := 7;
        if UserInfo.Nick <> '' then
         ListItem.Caption := UserInfo.Nick
        else
         ListItem.Caption := IntToStr(UserInfo.UIN);
       end;
      end;
    end;
   ICQClient.AddBuddy(Contact_List_Var);
   Contact_List_Var.Free;
  end;
  ICQClient.DestroyUINList(SrvContactList);
  ListItem.Free;

end;

--------------------
Кодинг - это стиль жизни!   
PM WWW ICQ   Вверх
Snowy
Дата 24.5.2007, 23:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 53
Всего: 484



Цитата(Coderr @  24.5.2007,  23:19 Найти цитируемый пост)
Отладчиком прохожу... Не помогает...
А это и не должно помогать - это инструмент диагностики. Он должен тебе помочь определить, в какой момент в него что попадает или не попадает.
И в какой момент он становится пуст.

Цитата(Coderr @  24.5.2007,  23:19 Найти цитируемый пост)
Заколдованный код... Contact_List_Var просто пуст...
Ну тут я бессилен - только отладчик поможет тебе определить место глюка.
Глазом этого не видно...
PM MAIL   Вверх
Coderr
Дата 25.5.2007, 20:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 234
Регистрация: 27.1.2006
Где: Vesnet

Репутация: нет
Всего: 0



Цитата

только отладчик поможет

А я думал трассировщик и отладчик одно и тоже... А как до отладчика докапаться?
--------------------
Кодинг - это стиль жизни!   
PM WWW ICQ   Вверх
Snowy
Дата 25.5.2007, 20:35 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 53
Всего: 484



Трассировка - один из инструментов отладчика.
В процессе выполнения кода, ты можешь остановить его в нужном месте, оттрассировать пошагово по коду, посмотреть содержимое переменных и объектов, изменить его...
В процессе трассировки ты можешь видеть значения в Watch листе, можешь показать значение полей объекта по Ctrl+Click...
Да много чего можно...
Но и просто трассировкой можно посмотреть - выполняется ли добавление, и куда потом идёт выполнение.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0632 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.