Tertium |
Отправлено: 26.07.2005, 19:43 |
|
Машинист паровоза
Группа: Почетный участник
Сообщений: 192
|
ну что, работает? Стоит выкладывать для всеобщего скачивания?
|
|
olegenty |
Отправлено: 27.07.2005, 14:40 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
выкладывай.
|
|
Tertium |
Отправлено: 27.07.2005, 18:42 |
|
Машинист паровоза
Группа: Почетный участник
Сообщений: 192
|
Тогда вопрос админу: куда можно её выложить-то. Или может где просто ссылку на эту тему поставить? Так чтоб народ видел, а то иначе-то он как узнает. Ну, придумайте там чтонть:) А то покамест только три загрузки.
|
|
xTrim |
Отправлено: 31.07.2005, 22:28 |
|
Машинист паровоза
Группа: Участник
Сообщений: 208
|
Заюзал — прикольно! Не на модеме конечно.. но с работы самое то.
Сразу вопрос. Открывается только последний пост, это так и задумано? может открывать начиная с первого непрочитанного поста (или вообще с первого, опционально) ?
|
|
Tertium |
Отправлено: 31.07.2005, 22:41 |
|
Машинист паровоза
Группа: Почетный участник
Сообщений: 192
|
так и задумано, штоб сразу видно было новописанный.
если надо все, то в ссылки же есть, название темы и вся фигня, там, номера страниц...
к тому же как это ты интересно узнаешь программой удалённой, какой у тебя пост последнй прочитанный.
Я сделал на мой взгляд оптимальный вариант при имеющихся данных:)
Отредактировано Tertium — 31/07/2005, 22:55
|
|
xTrim |
Отправлено: 31.07.2005, 22:53 |
|
Машинист паровоза
Группа: Участник
Сообщений: 208
|
Ну ладно, так тоже сойдет
|
|
Tertium |
Отправлено: 31.07.2005, 22:56 |
|
Машинист паровоза
Группа: Почетный участник
Сообщений: 192
|
и я так подумал.
И ЭХ, ПРЕВРАТИМ ФОРУМЫ В ЧАТЫ!!! ))))))))
кстати, подсказка — в строке адреса есть переменная st, её приравниваешь номеру ответа — на страниуе видишь ответы с этого включительно
Отредактировано Tertium — 31/07/2005, 23:05
|
|
Tertium |
Отправлено: 31.07.2005, 23:06 |
|
Машинист паровоза
Группа: Почетный участник
Сообщений: 192
|
придумал, как сделать, чтоб показывал все непросмотренные, может сделаю, тада выложу
|
|
Tertium |
Отправлено: 01.08.2005, 02:01 |
|
Машинист паровоза
Группа: Почетный участник
Сообщений: 192
|
сделал. выкладываю.
Теперь так. В момент, когда прога проверяет сайт и находит там новые сообщения, если тема не сигналена (не выделена жёлтым), в переменную "посл. просмотренный" записывается кол-во ответов перед текущим опросом.
Таким образом, щёлкнув по предложенной ссылке юзер попадает на последнюю виденную им запись, за которой следуют новые, вероятно ответы на неё.
Если же юзер выставляет проге, что мол были уже свои ответы и она начинает ждать, имея в виду не сигналить, если увидит новые, сколько установлено, то ссылка, которая всплывет после появления не-своего сообщшения(ий), приведёт на последний свой реплай, что тоже логично, ибо если ты его написал, то ты скорей всего читал и предыдущие.
ЕДИНСТВЕННОЕ ГАДСТВО: новая версия не совместима с файлом постов 0.3. Уж звиняйте.
И еще нововведение: теперь показывается кол-во секунд через которое будет совершена проверка. Таким образом видно, что при нажатии на кнопку "проверить сейчас" происходит сброс счётчика.
Отредактировано Tertium — 01/08/2005, 02:05
|
|
Tertium |
Отправлено: 03.08.2005, 18:50 |
|
Машинист паровоза
Группа: Почетный участник
Сообщений: 192
|
Очередной багфикс.
Отредактировано Tertium — 03/08/2005, 18:54
|
|
Tertium |
Отправлено: 03.08.2005, 18:58 |
|
Машинист паровоза
Группа: Почетный участник
Сообщений: 192
|
— добавлена кнопка "сбросить свои"
- если были удалены ответы модером, ссылка переносит на последнюю страницу топика (из расчёта по 30 реплаев/страницу).
|
|
Любитель |
Отправлено: 06.08.2005, 19:10 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 53
|
2 Tertium А не мог бы ты выложить исходник? Я бы много нового узнал из них.
Отредактировано Любитель — 06/08/2005, 19:11
|
|
Tertium |
Отправлено: 06.08.2005, 21:09 |
|
Машинист паровоза
Группа: Почетный участник
Сообщений: 192
|
на ранних этапах без вопросов, а када уже скоко-то времени (в сутках) вложено — не мой стиль Исходник "ранних этапов" — N постами выше на первой странице топика по сути то ничего не изменилось — тока декорации и отладка...
|
|
Admin |
Отправлено: 22.08.2005, 11:21 |
|
Владимир
Группа: Администратор
Сообщений: 1190
|
Так скачал-попробовал. Работает.
Сразу возник вопрос — следилка следит только за теми темами,
которые я добавил и все ??? Маловато будет, маловато ...
Было бы интресно и удобно, чтобы она отслеживала появление в
указанных форумах новых тем (например по галочке) -
"автоматическое отслеживание новых тем."
и автоматически добавляла бы их в этот список слежения.
Например, где-то в CheckListBox я выбираю(галочками) некоторые
форумы после чего следилка при появлении новой темы
автоматически добавляет в список эти темы при наличии галочки "автоматическое отслеживание новых тем." и
продолжает следить за ответами по этим темам.
|
|
Admin |
Отправлено: 22.08.2005, 11:37 |
|
Владимир
Группа: Администратор
Сообщений: 1190
|
Также было бы удобно, чтобы в списке постов была
возможность сортировки по нажатию на заголовок столбца -
по ID постов, названию форума и т.д.
|
|
Gedeon |
Отправлено: 22.08.2005, 12:22 |
|
Ветеран
Группа: Модератор
Сообщений: 1742
|
Да это было бы самое оно!
|
|
Tertium |
Отправлено: 22.08.2005, 14:22 |
|
Машинист паровоза
Группа: Почетный участник
Сообщений: 192
|
2Admin ну насчёт новых тем, это надо вас просить сриптик написать. И потом, я то не модератор, у меня и мысли не было новые темы просматривать. Я прежде всего хотел минимизировать трафик, потому что у многих из нас он либо ограничен либо слишком платный. Сейчас миниминизация трафика на юзере, надоели какие посты, удалил, скостил кол-во запросов, соотв. — трафик. Пусть это и параноидально звучит, но это основная идея проги. RSS-клиенты уже существуют давно. Вот sql.ru к примеру, там можно сайт смотреть через какойнть Abilon. Если программка станет похожа на RSS-клиент (это уже никакой экономии и идет в разрез с основной идеей), тада вам проще скриптик накидать, который бы в RSS хмльное деревцо накидывал, и прицепить его к форуму. Но это уже другая песня.
ПОСТ-ПАТРОЛ СЛЕДИТ ТОЛЬКО ЗА ТЕМИ ТЕМАМИ, КАКИЕ В НЕГО ДОБАВЛЯЕТ ЮЗЕР. И ВСЁ. Он только для этого предназначен. Это не замышлялся как инструмент модератора, если вы об этом.
Дальнейшая работа над ним уйдёт скорее всего в сторону сокетов, но опять же скорее всего это будет очень нескоро. Как сейчас ясно, кучу мусора приволакивает за сабой http запрос, там огромная шапка. Было бы идеально вообще все делать через свой сокет, вот только как к этому отнесётся файрвол сервера... Если удастся сэкономить, урезав шапку запроса, можно будет добавить и скачку имён новых тем. Но в случае с сокетами наверно придётся прогу писать, а не скрипт, на вашей стороне. Тоже простенькую, но, конечно, на порядок сложнее скрипта. Вот на этом может произойти заронка, так сказать. Если это х-система.
Сам я в них ни бум-бум, даже живьём не ввидел, только через шелл.
А соритровка без проблем, ща дотяну до межпроектья и добавлю.
|
|
Admin |
Отправлено: 24.08.2005, 10:57 |
|
Владимир
Группа: Администратор
Сообщений: 1190
|
QUOTE | 2Admin ну насчёт новых тем, это надо вас просить сриптик написать. И потом, я то не модератор, у меня и мысли не было новые темы просматривать. |
Напишу скриптик без проблем, какие данные нужны ?
А новые темы и не модераторам полезно смотреть-изучать,
захочет человек — поставит галочку "Добавлять новые темы"
и будет отслеживать, не поставит(или снял галочку) — не будет,
останется минимальный трафик.
По видимому мне в скрипте нужно будет вам возвращать
номера через запятую новых тем "55;56;57;58" за последние
last-секунд ?
Или еще нужен номер форума ?
Тогда можно так: "55,2;56,2;57,3;58,5"
Параметр last-секунд — может передаваться в строке запроса
этого скрипта Вами.
То есть вы в программе запрашивате типа -
"http://cbuilder.ru/newtema.php?last=300"
я возвращаю "55,2;56,2;57,3;58,5"
вы автоматически добавляете их в список следилки.
Или еще что нужно ?
|
|
Tertium |
Отправлено: 24.08.2005, 14:34 |
|
Машинист паровоза
Группа: Почетный участник
Сообщений: 192
|
скриптик эт хорошо, но хотелось бы самому юзать прогу после доработки, и с включенным флажком. Поэтому — как насчет сокетов?
Я оценивал расход httpшного трафика монитором, и получилось, что на 8 постов при одной проверке уходит 2.8 кб исходящего и 4.1 входящего трафика!! Заголовки, httpшные заголовки нажирают лишние килы, в то время как полезной инфы часто байта на 4. Если поставить интервал в 10 мин, то это полметра мусорного входящего трафа в сутки!! У нас тут в Воронеже метр стоит 2рэ, так что всё я думаю ясно.
Интерфейс уже переработал, перенёс настройки в отдельное окно, добавил кнопку "Просмотрено", чтобы если забыл щелкунуть "Были свои ответы" не переходить на тему, а просто сбросить алертный статус темы. Добавил "галочку" про новые темы, это новый пункт в таблице настроек.
Насчёт сокетов, это все не в ближайшее время, не на этой неделе. У меня на работе похожая темка вызревает, буду драть код у себя же, когда там до сокетов дойдет — иначе руки не доходят.
Вот только вопрос, сможете написать сервер сокетный, который ждёт коннекта на опред. порту, создает thread, устраивает для клиента сессию, убивает thread? Сервер имеет заданное макс число потоков и если оно достигнуто отодвигает входящие коннекции в стек. В это время я на клименте жду коннекции и выхожу по тайм-ауту в, скажем, секунд 5 — это если сервет или пинг умер, как иногда бывает. Ну типа примитивного http-сервера. Если да, то надо будет согласовать посылки. Пока это я вижу так:
40-битные запросы серверу:
CODE |
#pragma pack (push,1)
struct SQuery
{
SQuery(uchar тип_запроса_, uint32 данные_запроса_);
uchar тип_запроса;
uint32 данные_запроса;
};
#pragma pack (pop)
SQuery(1,<id темы>) — имя темы
SQuery(2,<id темы>) — id форума темы
SQuery(3,<id темы>) — количество реплаев
SQuery(4,<time_t>) — новые темы за период с последней даты-время <time_t>. Это штобы люди с модемами могли юзать.
|
соответственно ответы:
первый бай
|
|
Tertium |
Отправлено: 24.08.2005, 14:42 |
|
Машинист паровоза
Группа: Почетный участник
Сообщений: 192
|
связь оборвалась
так вот, первый байт — размер далее передаваемых данных, а потом:
имя темы — сколько байт строка
id форума — 1 байт
колво реплаев — для перестраховки 2 байта, хотя скорее всего можно обойтись одним
новые темы — n по 3 байта, где первый — номер форума, 2 и 3 — 16битный номер топика. (для простоты создания новых тем. а то можно и не передавать номер форума, можно в цикле делать запрос по каждой теме. но мне думается так будет дешевле по времени, потому что я пока не знаю, каковы накладные расходы и какова будет нагрузка на сервер).
вот так вот, если есть комментарии, прошу... Лусше все обсудить заранее, чтоб не вышло накладок.
|
|
Admin |
Отправлено: 24.08.2005, 15:49 |
|
Владимир
Группа: Администратор
Сообщений: 1190
|
QUOTE | скриптик эт хорошо, но хотелось бы самому юзать прогу после доработки, и с включенным флажком. Поэтому — как насчет сокетов?
...
Вот только вопрос, сможете написать сервер сокетный, который ждёт коннекта на опред. порту, создает thread, устраивает для клиента сессию, убивает thread?
|
Вы предлагаете написать программное обеспечение на стороне
сервера Valuehost (под Linux/FreeBSD) ?
То есть нужна программа на PHP(Perl) которая работает с базой
данных MySQL и с множеством сокетов и thread.
Сомневаюсь, я с сокетами под FreeBSD или Linux не работал,
да и не уверен что они(Valuehost) дадут такую возможность
(особенно еще с множеством потоков).
Кстати в Москве безлимитный Стрим 20$ в месяц 160 КБит/сек,
а 2048 Мб — 30$ в месяц при 1024 КБит/сек.
поэтому вопрос трафика так остро не стоит.
QUOTE | так вот, первый байт — размер далее передаваемых данных, а потом:
имя темы — сколько байт строка
id форума — 1 байт
|
Насчет этого посмотрю, попробую разобраться.
|
|
Admin |
Отправлено: 24.08.2005, 16:15 |
|
Владимир
Группа: Администратор
Сообщений: 1190
|
Так, возник вопрос — откуда вы берете список форумов
и используете где-либо номер форума или нет
"Список форумов" (Get Переменную форума f)
при ручном добавлении темы ?
|
|
Tertium |
Отправлено: 24.08.2005, 22:39 |
|
Машинист паровоза
Группа: Почетный участник
Сообщений: 192
|
насчет московского стрима мы прекрасно тут осведомлены, только у нас-то не стрим. не хотелось бы писать что-то, чем я сам не смогу воспользоваться, если вы понимаете, о чем я
плохо, если валуехост не дадут положить у себя прогу. Я имею ввиду не скрипт — не перл и не пхп, а полноценную приладу-сервер на сях. Ну или что-то что может постоянно висеть и слушать один порт, и обрабатывать запросы параллельно, подобно http-серверу — хоть на вижлбейсике под юних:) Насколько я знаю, программирование сокетов (если не юзать винсок) что на виндах, что на юнихе то же или почти. У меня к сожалению пока реального опыта в написании сокетных прилад нет, точнее написание такой одной в процессе — по работе. Там правда не на билдере сокеты, а отдельная дллка на VisualC++.
Список форумов у вас более-менее стабилен, поэтому я его вбил как ассоциативный массив map<ид, имя>. Номер форума я использую, но только из-за избыточности вашего движка. Чтоб посмотреть тему, он просит не только ее ид, но и ид форума, в чем абсолютно нет надобности, ибо уже ид темы уникален. Видимо не совсем правильно организованы таблицы или просто упустили.
Чтобы создать запись о топике, надо: ид ее + ид ее форума. Поэтому есть выпадающий список. Сама по себе тема проверяется без ида форума, но ссылку на нее сформировать можно только если ид известен.
Единственный выход из положения (из-за проблем с сервером) можно найти вот такой: каждый раз я отдаю вам только один запрос, в который набито куча идов. Вначале запроса идут три байта — первые два — uint16 — сколько дальше идет идов, третий — высылать ли иды новых тем с такой-то даты/времени (в этом случае после всех идов идёт 4 байта — time_t).
Тогда и от вас я получаю один ответ, в котором первые два байта — сколько количеств реплаев, еще два байта — если есть новые число идов новых тем, если нет — ноль; потом в каждом байте кол-во реплаев для тем, в том порядке каком я посылал вам их иды, а затем, если есть, двухбайтные иды новых тем. Возможно, для оптимизации придётся еще передавать имена тем после массива идов, предварив каждое байтом с кол-вом символов.
Передавать иды будем не в строковом виде, а для экономии как есть. Чото щас не соображу как это в пхп, как это в пхп, но в сях:
как у нас сейчас — берем ид, делаем sprintf или itoa и сколько получится символов передаём.
как будет: кастим 16 битное беззнаковое целое (uint16) к массиву из двух char char *val=(char*)&intval; и далее пишем эту хрень. Тут одна засада, надо нулевые байты слешить, то есть заменять на \0, иначе это будет зеротерминатор.
В принципе все реализуемо. У меня даже самописные ф-ции есть на сях, которые слешут/анслешут нули (и прочее если надо) в char*. Потом получается на выходе uchar*, который есть байт-массив принятых данных. Я их для хранения бинари в текстовом поле БД писал.
НО: всетаки провентилируйте вопрос с сокетовым приложением... А то через хттп ну извращение какое-то.
Отредактировано Tertium — 24/08/2005, 23:44
|
|
Admin |
Отправлено: 25.08.2005, 14:16 |
|
Владимир
Группа: Администратор
Сообщений: 1190
|
Мне кажется, что проще сделать так — и чтобы трафик сберечь
кому надо, и получать автоматом новые темы.
Кому новые возможности будут не нужны — все остается как есть,
эти запросы не меняются, трафик не увеличивается.
Теперь — если стоит галочка в "следить за новыми темами"
(а надо сделать галочку у каждого форума — ведь если мне не
нужны новые темы из скажем "флейма" или какого другого форума
- зачем лишний напряг и расход трафика ?) то вы даете запрос на
сервер — перечисляете номера id форумов, которые нужны, типа:
"http://cbuilder.ru/newtema.php?last=300&f1=2&f2=5&f3=7"
или если за всеми, то (для экономии трафика)
"http://cbuilder.ru/newtema.php?last=300&all"
Причем f1,f2,f3 и т.д. — пусть ваc не волнуют, это я обработаю,
присвойте им номера форумов в любом порядке.
И отправляете этот запрос на сервер.
Я возвращаю Вам в этом случае, как и запросе отдельной темы
по известному id массив строк с новыми темами за последние
last секунд:
номер форума — номер темы — кол-во ответов — название темы- коммент
то есть строки типа:
5*4904*20*Может кто-нить возьмется за написание проги?*...разыскивается кодер...
3*4905*2*Вывод на печать*
2*4906*1*RichEdit & TStringList*Тормоза при обработке большх text файлов
то есть по сравнению с запросом, который и есть:
http://www.rxlib.ru/forums/post_test.php?post_id=4904
в ответ сервера(строку) добавиться всего 1 число(первое) — номер
форума и если новая тема не одна, то будет возвращена не одна
строка, а несколько строк такого вида.
Так проще ? И трафик не увеличивается для тех, кому это не надо.
Удобно Вам так будет сделать ?
|
|
Admin |
Отправлено: 25.08.2005, 14:23 |
|
Владимир
Группа: Администратор
Сообщений: 1190
|
То есть по сравнению с тем, что уже есть -
если человек отмечает галочками некоторые форумы, то
Вы посылаете еще один запрос:
"http://cbuilder.ru/newtema.php?last=300&f1=2&f2=5&f3=7"
указывая id выбранных форумов и время(интервал проверки).
Получаете список строк вида:
5*4904*20*Может кто-нить возьмется за написание проги?*...разыскивается кодер...
3*4905*2*Вывод на печать*
2*4906*1*RichEdit & TStringList*Тормоза при обработке большх text файлов
и автоматически заносите их в список.
|
|
Tertium |
Отправлено: 25.08.2005, 14:49 |
|
Машинист паровоза
Группа: Почетный участник
Сообщений: 192
|
про галочки понял, сделаю чекбокслист.
про данные — вы принимаете от меня не GET, как сейчас, а POST. Гет-строка имеет ограниченый размер и его может не хватить. Я присылаю вам не тестовые данные. это просто макссив байт, в котором нули заменены на \0, чтобы строка не оборвалась. Исходящий трафик экономить нет смысла, так что хрен с ней с шапкой пост-запроса.
от вас в свою очередь я жду таких же действий. Не через *, и не в текстовом виде через echo или print. Точнее через эхо и принт, но после преобразования. ну представьте себе пример:
CODE |
uint16 reply_recs=5;
uint16 new_topic_recs=12;
uint16 * replies=(uint16*)calloc(1,reply_recs*sizeof(uint16));
uint16 * new_topics=(uint16*)calloc(1,new_topic_recs*sizeof(uint16));
....
uint16 bytes=sizeof(uint16)+sizeof(uint16)+sizeof(uint16)+reply_recs*sizeof(uint16)+new_topic_recs*sizeof(uint16);
uchar *data=(uchar*)calloc(1,bytes);
uchar *marker=data;
memcpy(marker,&bytes,sizeof(uint16));
marker+=sizeof(uint16);
memcpy(marker,&reply_recs,sizeof(uint16));
marker+=sizeof(uint16);
memcpy(marker,&new_topic_recs,sizeof(uint16));
marker+=sizeof(uint16);
for (int i=0;i<reply_recs;i++)
{
memcpy(marker,&replies[i],sizeof(uint16));
marker+=sizeof(uint16);
}
for (int i=0;i<new_topic_recs;i++)
{
memcpy(marker,&new_topics[i],sizeof(uint16));
marker+=sizeof(uint16);
}
char* str=add_zero_slashes(data,bytes);
free(data);
//теперь в str строковое представление массива data
|
Вот я о чем говорю, и вот что надо сделать вам на пхп.
-----
блин, да чтож у вас форум все выравнивание кода бьёт...
Отредактировано Tertium — 25/08/2005, 15:50
|
|
Tertium |
Отправлено: 02.09.2005, 22:54 |
|
Машинист паровоза
Группа: Почетный участник
Сообщений: 192
|
2Admin:
пока у нас с вами не появилось время на доработку, выложите пожалуйста эту на текущий момент последнюю имеющуюся версию для всеобщего скачивания, как обещали. может и в текущей инкарнации кому приглянеца...
|
|
Tertium |
Отправлено: 03.10.2005, 12:42 |
|
Машинист паровоза
Группа: Почетный участник
Сообщений: 192
|
мда.. кончился у нас энтуазизьм.. жаль, а так все начинаалось...
|
|
kea |
Отправлено: 04.01.2006, 19:07 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 80
|
QUOTE (Tertium @ 21/07/2005, 10:06) | CODE |
int delay=0;
int seconds=0;
do
{
EnterCriticalSection(&cs);
seconds=mainWnd->getSetup().check_period;
LeaveCriticalSection(&cs);
delay++;
Sleep(250);
}
while(!Terminated && delay<seconds*4);
|
|
Здравсвтуйте! Функции EnterCriticalSection() и LeaveCriticalSection() для чего требуются? Для работы с потоками? Как оин работают?
Как рабоатет программа PostPatrol: висит в трее. Как только я подключаюсь к интернету, она проверяет заданые темы в форуме и дает мне знать есть ли на них ответы? Я правильно понял? |
|
Tertium |
Отправлено: 26.01.2006, 12:09 |
|
Машинист паровоза
Группа: Почетный участник
Сообщений: 192
|
EnterCriticalSection() и LeaveCriticalSection() требуются для исключения одновременного выполнения куска кода образно говоря. Они работают на объектах ядра — евентах. когда один поток доходит до EnterCriticalSection() он помечает секцию и пока он не дойдет до LeaveCriticalSection(), остальные потоки будут тупить около EnterCriticalSection(). Потом, когда он вызовет LeaveCriticalSection() — он "покинет" (leave) секцию мультипоточно-критичного кода, и следующий поток, ждущий на строчке с EnterCriticalSection() получит возможность войти. Рихтер сравнивает эту ситуацию с туалетом в самолете, расчитанном на одного человека — один поток. почитайте Рихтера "Создание эффективных WIN32-приложений с учетом специфики 64-разрядной версии Windows". Я ее в электронном виде давно еще гдето видал. Там про мультипоточность виндов оч хорошо и доступно.
Постпатрол не сразу как только происходит подключение к нету проверяет посты, а через заданный интервал. просто когда соединения нет, он не проверяет а снова ждет заданный интервал.
|
|
|