OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Четверг, 28 Март, 2024 22:51

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 65 ]  На страницу 1, 2, 3, 4  След.
Автор Сообщение
 Заголовок сообщения: HTTP-клиент для ББ
СообщениеДобавлено: Пятница, 29 Октябрь, 2010 19:49 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
Как получить данные в программу BlackBox по URL?
Существует ли специальная функция для этого? В справке не обнаружил.
============

Небольшой HTTP клиент.
https://svn.oberoncore.ru/community/bbcc/Dia/Dia/Mod/HTTPClient.odc

Пример использования (скачивает по URL документ и открывает в новом окне):
DiaHTTPClient.LoadInAux('www.uniprot.org/uniprot/P68871.fasta')

На его основе сделал лист для установки модулей — DiaSetupList.

(устаревшие вложения удалены)


Последний раз редактировалось Иван Денисов Вторник, 10 Май, 2011 05:14, всего редактировалось 11 раз(а).

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 29 Октябрь, 2010 20:00 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2449
Откуда: Россия, Томск
Если я правильно понял, вопрос - об HTTP-клиенте в ББ. Есть ли такой в природе?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 29 Октябрь, 2010 20:05 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
Александр Ильин писал(а):
Если я правильно понял, вопрос - об HTTP-клиенте в ББ. Есть ли такой в природе?

Вроде того... или надо писать с нуля используя имеющийся пакет TCP? Судя по переносу темы так и есть :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: (ищу) HTTP-клиент для ББ
СообщениеДобавлено: Пятница, 29 Октябрь, 2010 20:32 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2449
Откуда: Россия, Томск
В системе O3 есть подозрительный модуль O3bbWebClient.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: (ищу) HTTP-клиент для ББ
СообщениеДобавлено: Среда, 08 Декабрь, 2010 23:41 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
Написал свой клиент с минимальными функциями в итоге :) прикреплю к первому сообщению.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: HTTP-клиент для ББ
СообщениеДобавлено: Понедельник, 13 Декабрь, 2010 22:23 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
Из которого логически вытек лист для установки модулей — DiaSetupList.
Загрузил в первое сообщение.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: HTTP-клиент для ББ
СообщениеДобавлено: Вторник, 14 Декабрь, 2010 04:30 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2449
Откуда: Россия, Томск
д'Иван, это же просто замечательно то, что вы сделали! : )
Серьёзно! Давно пора было обзавестись автоматической установкой плагинов в ББ.

Почему такой грустный код? (Кстати, опечатка в комментарии.)
Код:
FOR k := 0 TO LEN(len) - 1 DO len[k] := 0X END; (* очистка сроки :( *)
Достаточно сделать len[j] := 0X сразу после WHILE. Аналогичный код есть в процедуре Load.

Вот это опасная проверка:
Код:
IF i = 1000 THEN
   NEW(r.buf, l);
ELSE
   r.ready := TRUE;
А что если у вас принятый файл окажется как раз такого размера, что закончится вместе с буфером? Маловероятно, но тем труднее будет найти ошибку. А вот здесь вы совершенно правильно проверяете:
Код:
IF r.rpos = LEN(r.result) THEN
   r.ready := TRUE;
   NEW(r.buf, 1000);
END


Замечу также мимоходом, что Reader у вас никогда не заканчивает работу:
Код:
IF r # NIL THEN
   Services.DoLater(r, Services.now)
END
Проверка всегда будет давать истину. Я бы порекомендовал проверять хотя бы ~r.ready, а по-хорошему, надо бы и при ошибках заканчивать работу. Например, если заголовок "HTTP" не найден и т.п.

В процедуре Load, я считаю, вам не нужен цикл
Код:
WHILE ~ stream.r.ready DO
   ProcessMessages
END;
Во-первых, stream.r.ready может никогда не наступить. Во-вторых, вы уже научились пользоваться Services.Action, так и пользуйтесь ими! И вообще, пользователь ведь может в процессе вашего цикла с ProcessMessages повторно нажать на коммандер. Почему бы не избавиться от глобальной переменной и не запустить несколько закачек параллельно?

В процедуре Setup рекомендую заменить код
Код:
t := TextModels.dir.New();
w := t.NewWriter(NIL);
res := Load(url);
FOR i := 0 TO LEN(res) - 1 DO
   w.WriteChar(res[i]);
END;
на следующий:
Код:
res := Load(url);
t := TextModels.dir.NewFromString(res^);


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: HTTP-клиент для ББ
СообщениеДобавлено: Вторник, 14 Декабрь, 2010 08:34 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
Большое спасибо за подсказки, поправил почти все, выложил новый вариант в первом сообщении. Проверил :) действительно получается параллельно все скачивать. Но, пришлось убрать спрашивалку при распаковке, может плохого ничего и нет в этом.

Не успел поправить на случай совпадения длины сообщения с 1000.
Код:
IF i = 1000 THEN
   NEW(r.buf, l);
ELSE
   r.ready := TRUE;

А также не получилось последнее, поскольку res не имеет 0X в конце, на него NewFromString ругается.
Код:
res := Load(url);
t := TextModels.dir.NewFromString(res^);
Надо теперь добавить будет разные варианты на случай обрыва связи.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: HTTP-клиент для ББ
СообщениеДобавлено: Вторник, 14 Декабрь, 2010 10:21 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Не согласен с формулировкой
Цитата:
Идея: установка модулей трудоемкий и неинтересный процесс, также достаточно непонятный для новичков.
Что может быть для разработчика непонятного в "распаковать и нажать командер компиляции" (или в редких случаях дописать данный кусок текста в документ Strings/Menus)? Про не разработчика, которому даётся архив распаковал-запустил-пользуйся, тут речь не идёт и не может идти.

Но это не значит, что я против тулзы, которая выполняет определённую рутинную работу.
И, пожалуй, было бы полезно выписать, какие действия эта тулза автоматизирует. Т.е. сформулировать ТЗ.

P.S. Поглядтие обсуждение: viewtopic.php?p=16368#p16368


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: HTTP-клиент для ББ
СообщениеДобавлено: Вторник, 14 Декабрь, 2010 11:39 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Здорово и остроактуально, сам хотел уж браться.

---------------------
Только почему бы просто не нумеровать версии? Зачем существуют номера версий?
Зарезервировать позиции четыре: 0000, 0001 ... для легкости упорядочивания в файл-менеджерах, и вперед.
Вторая цифра будет major-version. В случае чего можно и перепрыгнуть сколько-то номеров.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: HTTP-клиент для ББ
СообщениеДобавлено: Вторник, 14 Декабрь, 2010 12:17 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2449
Откуда: Россия, Томск
divan писал(а):
А также не получилось последнее, поскольку res не имеет 0X в конце, на него NewFromString ругается.
Просто замените
Код:
NEW(r.buf, l);
на
Код:
NEW(r.buf, l + 1); r.buf[l] := 0X;
И кстати, не использовали бы вы одиночную букву l в качестве имени переменной: плохо читается, похожа на 1 и i.

Процедуру Process логично переименовать в Install, и сделайте ей строки IN-параметрами.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: HTTP-клиент для ББ
СообщениеДобавлено: Вторник, 14 Декабрь, 2010 19:02 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
To: Александр
Поправил, а также сделал чтобы после установки открывался Quick-Start.odc или *-Quick-Start.odc

To: Евгений
Убрал "идею", теперь там просто просьба расширить лист. По моему мнению там должны быть все доступные в интернете подсистемы для КП. Но вот что касается порядка и комментариев, тут надо подумать. Звездочкой помечать, например те, системы которые рекомендуются для пробы (это когда речь про Ext).

Касаемо удаления, то для подсистем из oberoncore есть список файлов в отдельном файле, по которому реально составить список для удаления, но вот у Цина таких файлов нету. Тут нужна таблица, которая в линуксе например тоже хранится в интернете. Таблицу с описанием подсистем (какие файлы включаются, версия, зависимости, источник т.п.) можно хранить и к ней обращаться за инструкциями, тогда отпадает необходимость строго называть файл Quick-Start.odc и т.п.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: HTTP-клиент для ББ
СообщениеДобавлено: Вторник, 14 Декабрь, 2010 19:38 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2449
Откуда: Россия, Томск
Вы там по умолчанию качаете у Цинна Pac-файлы, но сам Pac не у всех установлен. Логично его качать и устанавливать первым.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: HTTP-клиент для ББ
СообщениеДобавлено: Вторник, 14 Декабрь, 2010 20:03 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
Александр Ильин писал(а):
Вы там по умолчанию качаете у Цинна Pac-файлы, но сам Pac не у всех установлен. Логично его качать и устанавливать первым.
нет нет, везде стандартное все. StdCoder.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: HTTP-клиент для ББ
СообщениеДобавлено: Вторник, 14 Декабрь, 2010 21:09 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2449
Откуда: Россия, Томск
divan писал(а):
нет нет, везде стандартное все. StdCoder.
Виноват, это я не так понял. Предложение снимается.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: HTTP-клиент для ББ
СообщениеДобавлено: Воскресенье, 09 Январь, 2011 20:27 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2662
Откуда: Россия, Ярославль
А у меня не заработал :(
Выдаёт тряп, upd: заработало, ибо надо было указать localAdr='0.0.0.0' ибо Win7 :)
кстати, зачем внутри модуля используется WinAPI? наверное, для блокировки процесса в ожидании подключения. но зачем если есть (s: CommStreams.Stream)IsConnected(): BOOLEAN;


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: HTTP-клиент для ББ
СообщениеДобавлено: Воскресенье, 09 Январь, 2011 21:28 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
Сейчас SetupListV0003.odc более правильно организован, чем клиент, там было обсуждение по улучшению кода.
WinApi понадобился для
Код:
PROCEDURE ProcessMessages;
   VAR msg: Win.MSG; res: INTEGER;
BEGIN
   WHILE Win.PeekMessage(msg, 0, 0, 0, Win.PM_REMOVE) # 0 DO
      res := Win.TranslateMessage(msg);
      res := Win.DispatchMessageA(msg)
   END
END ProcessMessages;
Который используется в
Код:
...
   WHILE ~ stream.r.ready DO
      ProcessMessages
   END;
   stream.s.Close();
   RETURN stream.r.result
Сейчас в SetupListV0003.odc все совсем подругому организованно, через Services.Action
Но такой вариант тоже может оказаться полезным, поскольку так (с WHILE) сохраняется последовательность выполнения программы и не нужно выдумывать ничего с синхронизацией.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: HTTP-клиент для ББ
СообщениеДобавлено: Воскресенье, 09 Январь, 2011 22:55 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2662
Откуда: Россия, Ярославль
это хорошо, а то винапи - вызывает оторопь


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: HTTP-клиент для ББ
СообщениеДобавлено: Понедельник, 10 Январь, 2011 00:04 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
Пётр Кушнир писал(а):
это хорошо, а то винапи - вызывает оторопь
Спасибо, что обратили внимание на WinApi, а то таскался код мусорный, который стал не нужен в новой реализации. Почистил и заменил модуль DiaSetupList в первом сообщении.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: HTTP-клиент для ББ
СообщениеДобавлено: Понедельник, 10 Январь, 2011 11:34 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2662
Откуда: Россия, Ярославль
а вы не думали выделить клиент в отдельную подсистему? ну, реализовать хотя-бы http/1.1, это было бы полезно в плане накопления функционала.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 65 ]  На страницу 1, 2, 3, 4  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7


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

Найти:
cron
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB