OberonCore https://forum.oberoncore.ru/ |
|
HTTP-клиент для ББ https://forum.oberoncore.ru/viewtopic.php?f=47&t=2948 |
Страница 1 из 4 |
Автор: | Иван Денисов [ Пятница, 29 Октябрь, 2010 19:49 ] |
Заголовок сообщения: | HTTP-клиент для ББ |
Как получить данные в программу BlackBox по URL? Существует ли специальная функция для этого? В справке не обнаружил. ============ Небольшой HTTP клиент. https://svn.oberoncore.ru/community/bbcc/Dia/Dia/Mod/HTTPClient.odc Пример использования (скачивает по URL документ и открывает в новом окне): DiaHTTPClient.LoadInAux('www.uniprot.org/uniprot/P68871.fasta') На его основе сделал лист для установки модулей — DiaSetupList. (устаревшие вложения удалены) |
Автор: | Александр Ильин [ Пятница, 29 Октябрь, 2010 20:00 ] |
Заголовок сообщения: | Re: Как проще всего получить данные в BlackBox по URL ? |
Если я правильно понял, вопрос - об HTTP-клиенте в ББ. Есть ли такой в природе? |
Автор: | Иван Денисов [ Пятница, 29 Октябрь, 2010 20:05 ] |
Заголовок сообщения: | Re: Как проще всего получить данные в BlackBox по URL ? |
Александр Ильин писал(а): Если я правильно понял, вопрос - об HTTP-клиенте в ББ. Есть ли такой в природе? Вроде того... или надо писать с нуля используя имеющийся пакет TCP? Судя по переносу темы так и есть |
Автор: | Александр Ильин [ Пятница, 29 Октябрь, 2010 20:32 ] |
Заголовок сообщения: | Re: (ищу) HTTP-клиент для ББ |
В системе O3 есть подозрительный модуль O3bbWebClient. |
Автор: | Иван Денисов [ Среда, 08 Декабрь, 2010 23:41 ] |
Заголовок сообщения: | Re: (ищу) HTTP-клиент для ББ |
Написал свой клиент с минимальными функциями в итоге прикреплю к первому сообщению. |
Автор: | Иван Денисов [ Понедельник, 13 Декабрь, 2010 22:23 ] |
Заголовок сообщения: | Re: HTTP-клиент для ББ |
Из которого логически вытек лист для установки модулей — DiaSetupList. Загрузил в первое сообщение. |
Автор: | Александр Ильин [ Вторник, 14 Декабрь, 2010 04:30 ] |
Заголовок сообщения: | Re: HTTP-клиент для ББ |
д'Иван, это же просто замечательно то, что вы сделали! : ) Серьёзно! Давно пора было обзавестись автоматической установкой плагинов в ББ. Почему такой грустный код? (Кстати, опечатка в комментарии.) Код: 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 Проверка всегда будет давать истину. Я бы порекомендовал проверять хотя бы ~r.ready, а по-хорошему, надо бы и при ошибках заканчивать работу. Например, если заголовок "HTTP" не найден и т.п.Services.DoLater(r, Services.now) END В процедуре Load, я считаю, вам не нужен цикл Код: WHILE ~ stream.r.ready DO Во-первых, stream.r.ready может никогда не наступить. Во-вторых, вы уже научились пользоваться Services.Action, так и пользуйтесь ими! И вообще, пользователь ведь может в процессе вашего цикла с ProcessMessages повторно нажать на коммандер. Почему бы не избавиться от глобальной переменной и не запустить несколько закачек параллельно?ProcessMessages END; В процедуре 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^); |
Автор: | Иван Денисов [ Вторник, 14 Декабрь, 2010 08:34 ] |
Заголовок сообщения: | Re: HTTP-клиент для ББ |
Большое спасибо за подсказки, поправил почти все, выложил новый вариант в первом сообщении. Проверил действительно получается параллельно все скачивать. Но, пришлось убрать спрашивалку при распаковке, может плохого ничего и нет в этом. Не успел поправить на случай совпадения длины сообщения с 1000. Код: IF i = 1000 THEN NEW(r.buf, l); ELSE r.ready := TRUE; А также не получилось последнее, поскольку res не имеет 0X в конце, на него NewFromString ругается. Код: res := Load(url); Надо теперь добавить будет разные варианты на случай обрыва связи.
t := TextModels.dir.NewFromString(res^); |
Автор: | Евгений Темиргалеев [ Вторник, 14 Декабрь, 2010 10:21 ] |
Заголовок сообщения: | Re: HTTP-клиент для ББ |
Не согласен с формулировкой Цитата: Идея: установка модулей трудоемкий и неинтересный процесс, также достаточно непонятный для новичков. Что может быть для разработчика непонятного в "распаковать и нажать командер компиляции" (или в редких случаях дописать данный кусок текста в документ Strings/Menus)? Про не разработчика, которому даётся архив распаковал-запустил-пользуйся, тут речь не идёт и не может идти.Но это не значит, что я против тулзы, которая выполняет определённую рутинную работу. И, пожалуй, было бы полезно выписать, какие действия эта тулза автоматизирует. Т.е. сформулировать ТЗ. P.S. Поглядтие обсуждение: viewtopic.php?p=16368#p16368 |
Автор: | Info21 [ Вторник, 14 Декабрь, 2010 11:39 ] |
Заголовок сообщения: | Re: HTTP-клиент для ББ |
Здорово и остроактуально, сам хотел уж браться. --------------------- Только почему бы просто не нумеровать версии? Зачем существуют номера версий? Зарезервировать позиции четыре: 0000, 0001 ... для легкости упорядочивания в файл-менеджерах, и вперед. Вторая цифра будет major-version. В случае чего можно и перепрыгнуть сколько-то номеров. |
Автор: | Александр Ильин [ Вторник, 14 Декабрь, 2010 12:17 ] |
Заголовок сообщения: | Re: HTTP-клиент для ББ |
divan писал(а): А также не получилось последнее, поскольку res не имеет 0X в конце, на него NewFromString ругается. Просто заменитеКод: NEW(r.buf, l); наКод: NEW(r.buf, l + 1); r.buf[l] := 0X; И кстати, не использовали бы вы одиночную букву l в качестве имени переменной: плохо читается, похожа на 1 и i.Процедуру Process логично переименовать в Install, и сделайте ей строки IN-параметрами. |
Автор: | Иван Денисов [ Вторник, 14 Декабрь, 2010 19:02 ] |
Заголовок сообщения: | Re: HTTP-клиент для ББ |
To: Александр Поправил, а также сделал чтобы после установки открывался Quick-Start.odc или *-Quick-Start.odc To: Евгений Убрал "идею", теперь там просто просьба расширить лист. По моему мнению там должны быть все доступные в интернете подсистемы для КП. Но вот что касается порядка и комментариев, тут надо подумать. Звездочкой помечать, например те, системы которые рекомендуются для пробы (это когда речь про Ext). Касаемо удаления, то для подсистем из oberoncore есть список файлов в отдельном файле, по которому реально составить список для удаления, но вот у Цина таких файлов нету. Тут нужна таблица, которая в линуксе например тоже хранится в интернете. Таблицу с описанием подсистем (какие файлы включаются, версия, зависимости, источник т.п.) можно хранить и к ней обращаться за инструкциями, тогда отпадает необходимость строго называть файл Quick-Start.odc и т.п. |
Автор: | Александр Ильин [ Вторник, 14 Декабрь, 2010 19:38 ] |
Заголовок сообщения: | Re: HTTP-клиент для ББ |
Вы там по умолчанию качаете у Цинна Pac-файлы, но сам Pac не у всех установлен. Логично его качать и устанавливать первым. |
Автор: | Иван Денисов [ Вторник, 14 Декабрь, 2010 20:03 ] |
Заголовок сообщения: | Re: HTTP-клиент для ББ |
Александр Ильин писал(а): Вы там по умолчанию качаете у Цинна Pac-файлы, но сам Pac не у всех установлен. Логично его качать и устанавливать первым. нет нет, везде стандартное все. StdCoder.
|
Автор: | Александр Ильин [ Вторник, 14 Декабрь, 2010 21:09 ] |
Заголовок сообщения: | Re: HTTP-клиент для ББ |
divan писал(а): нет нет, везде стандартное все. StdCoder. Виноват, это я не так понял. Предложение снимается.
|
Автор: | Пётр Кушнир [ Воскресенье, 09 Январь, 2011 20:27 ] |
Заголовок сообщения: | Re: HTTP-клиент для ББ |
А у меня не заработал Выдаёт тряп, upd: заработало, ибо надо было указать localAdr='0.0.0.0' ибо Win7 кстати, зачем внутри модуля используется WinAPI? наверное, для блокировки процесса в ожидании подключения. но зачем если есть (s: CommStreams.Stream)IsConnected(): BOOLEAN; |
Автор: | Иван Денисов [ Воскресенье, 09 Январь, 2011 21:28 ] |
Заголовок сообщения: | Re: HTTP-клиент для ББ |
Сейчас 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; Код: ... Сейчас в SetupListV0003.odc все совсем подругому организованно, через Services.ActionWHILE ~ stream.r.ready DO ProcessMessages END; stream.s.Close(); RETURN stream.r.result Но такой вариант тоже может оказаться полезным, поскольку так (с WHILE) сохраняется последовательность выполнения программы и не нужно выдумывать ничего с синхронизацией. |
Автор: | Пётр Кушнир [ Воскресенье, 09 Январь, 2011 22:55 ] |
Заголовок сообщения: | Re: HTTP-клиент для ББ |
это хорошо, а то винапи - вызывает оторопь |
Автор: | Иван Денисов [ Понедельник, 10 Январь, 2011 00:04 ] |
Заголовок сообщения: | Re: HTTP-клиент для ББ |
Пётр Кушнир писал(а): это хорошо, а то винапи - вызывает оторопь Спасибо, что обратили внимание на WinApi, а то таскался код мусорный, который стал не нужен в новой реализации. Почистил и заменил модуль DiaSetupList в первом сообщении.
|
Автор: | Пётр Кушнир [ Понедельник, 10 Январь, 2011 11:34 ] |
Заголовок сообщения: | Re: HTTP-клиент для ББ |
а вы не думали выделить клиент в отдельную подсистему? ну, реализовать хотя-бы http/1.1, это было бы полезно в плане накопления функционала. |
Страница 1 из 4 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |