Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

MyDC.ru _ Технические вопросы по RusHub'у _ Предложения для развития

Автор: mariner 28.8.2009, 15:11

/rеквестую сабж на qt в режиме - сервер-модра (чтобы мона было без гуи пахать). ну и да - кроссплатформенность тоже не помешает

Автор: INVISIBLE 29.8.2009, 10:53

Setuper
Респект Илюха!!!!!!! Прям ЛЕТАЕТ все!!! Удачи в дальнейших разработках big_smile.gif

Автор: STRELOK 29.8.2009, 12:02

Цитата(INVISIBLE @ 29.8.2009, 10:53) *
Setuper
Респект Илюха!!!!!!! Прям ЛЕТАЕТ все!!! Удачи в дальнейших разработках big_smile.gif

+1, прикрутить бы ещё к этому хабу поддержку LUA скриптов.

PS: Самому нравится DBHUB, но возможности поставить Linux нет :(
Был бы рад, если бы данная программа стала похожа точь в точь на DBHUB big_smile.gif

Автор: Delion 30.8.2009, 11:32

Цитата
это касается нагрузки на сервер? Но никак не на трафик?

Миллион раз уже перетирали. Объём траффика для всего хабсофта одинаков,ибо идентичен.
Цитата
ADC для канала полегче будет?

Насколько я себе представляю,нет. Но там, по-моему, чуть другая модель взаимодействия. Поправьте,если ошибаюсь.
Откуда такие мысли: один из моих провов приоритезирует инетовский P2P траффик. Так вот когда на YnHub у меня не было ни одного инетовца,на ADC хабе их сидело три сотни. Из примерно шестисот.

Автор: Setuper 30.8.2009, 12:42

IP адрес 0.0.0.0 означает любой доступный ip адрес на твоей машине. Хаб пока не проверяет занятость 413 порта, поэтому проследи за этим!

Что касается ADC, то всё же некоторую, хоть и малую оптимизацию этот протокол, по сравнению с NMDC, содержит. Хотя бы в том, что ключевые слова команд короче (не более 4 символов), следовательно меньше передаётся в сеть, следовательно меньше трафа потребляется, следовательно чуть быстрее всё передаётся. Однако, это практически не возможно заметить big_smile.gif

Автор: Alexey 6.9.2009, 1:48

Радует, что караван идёт.

Автор: mariner 7.9.2009, 21:44

ай-я-яй. какой молодец илья! Еще бы таки птоковое апи скриптовое (желательно расширенное), чтоб мона скрипты прикрутить и про упертого PPK можно забыть

Автор: Setuper 7.9.2009, 22:20

В ближайшее время думаю прикручу lua big_smile.gif
Тут 2 задачи: lua и mysql.
Сам хаб уже готов. Остаётся сделать дополнительные (приятные) вещи))

Хотя ещё много что нужно сделать: баны, антифлуд, и тд.

Автор: Alexey 8.9.2009, 3:43

Хотелось-бы отправлять хабтопик после мотд, а не до.

Автор: Trans 8.9.2009, 5:29

2Setuper:
По возможности - хорошо бы заглушку на время, по IP и диапазону IP (это особенно важно по расплодившимся динамическим адресам), и тихую (чтоб заглушенный не знал, что заглушен) - это тоже важно для борьбы с рекламщиками - спамерами с динамическими IP.
Или хотя бы по IP на время, как минимум.
Это в сочетании с киком уже позволит вполне успешкно жить хабу даже без скриптов.

Автор: ZZZZZ 8.9.2009, 6:52

все работает, люди заходят, а вот как команды управления использовать никак не пойму.

Автор: Otshelnik-Fm 8.9.2009, 9:47

Спасибо Setuper! Сегодня вечером перенесу основной хаб на твой.

Автор: Trans 8.9.2009, 10:17

Без скриптов перенесешь? Там же нет ещё Луа.
И нет никаких способов воздействия на юзеров.
И регистрации.
Если я правильно понимаю.
По крайней мере, хелпа никакого нет и Сетапер не говорил.

Автор: Otshelnik-Fm 8.9.2009, 10:26

Луа - ну я думаю недолго с ним. Просто интересно в бою посмотреть. Так случилось что мой хаб - тест почти всегда (да простят меня пользователи). Регистрация - в локалке не так уж и много пользователей. Так что не так страшно. Хелпа тут не надо - все есть в hub_config.dat

Автор: Setuper 8.9.2009, 10:39

Цитата(Alexey @ 8.9.2009, 4:43) *
Хотелось-бы отправлять хабтопик после мотд, а не до.

А есть большая разница? Конечно можно сделать настройку.


Баны сейчас первостепенная задача, и в то же время большая, так как для того, чтобы сделать баны, нужно сделать права пользователям, то есть профили пользователей, и, соответственно, отсюда и регистрацию нужно реализовать. Я буду на этим работать big_smile.gif

Автор: Otshelnik-Fm 8.9.2009, 12:13

rushub_v_1.0.2.rar ( 180.45 килобайт ) Кол-во скачиваний: 10 - вот его я качал в 9 утра сегодня. Распаковал. Запустил. Появились еще 2 файла:hub_config.dat. и lang_config.dat - и работает уже почти 4 часа (правда локалхостом - с 1 юзером). Получение файл листа прошло нормально. Все поля - ip, dns, e-mail, description, hubs etc... вобщем всё отобразилось.

Автор: Drakula 8.9.2009, 17:52

Во общем штука хорошая, а если за неё и взяться, то думаю что в будущем данный сервер будет самым лучшим из всех ДЦ серверов. Учитывая что мы знаем что требуется видеть в меню администрации и в меню пользователя. Я лично, когда данный хаб станет лучше, я перейду на него+можно даже будет писать что бы ты хотел видеть на хабе и это возможно реализует. Во общем Желаю отличного развития. Я думаю, когда сделается профили там уже пойдёт легче... да и вообще чем больше сделана тем легче, смотри через год уже по всему миру будут пользоваться им!!!!! exciting.gif
P.S. Если чем смогу помочь то помогу, хотя я бесполезен=(

Автор: Otshelnik-Fm 11.9.2009, 22:51

p.s. - предлагаю закрепить первый пост (он нужен на остальных страницах тоже)

Смотрю в архиве libmysql.dll и после запуска db_config.dat появилась. а как в базу записывать? - lua держит?

Автор: Setuper 11.9.2009, 23:07

Прикрепил.

К базе данных пока подключения нет. Это только подготовительные работы.


Вот ещё вопрос назрел... Делать ли систему подключения к хабу сторонних dll библиотек, так называемых плагинов? То есть чтобы другие с++ программисты могли написать свой дополнительный плагин, запихнуть в dll и подключить к хабу.

И сделать ли lua как плагин (dll библиотеку)?

Автор: Delion 12.9.2009, 20:06

Идея: реализуй возможность линковки двух и более хабов.
Рунет тебя не забудет.

Автор: Setuper 12.9.2009, 22:54

Хорошая идея. Возможно попробую реализовать позже, когда хаб будет более стабильным и будет подключены бд и lua

Провёл тестирование на вместимость списков (хеш-таблиц) до 10000 пользователей big_smile.gif

Автор: Otshelnik-Fm 13.9.2009, 21:09

так для чего libmysql.dll нужна?

Цитата
Провёл тестирование на вместимость списков (хеш-таблиц) до 10000 пользователей
- а на ком и сколько по времени тестировалось? Что за хаб? Уж не на озерках который?

Автор: Nickolya 13.9.2009, 22:03

Цитата(Trans @ 11.9.2009, 17:07) *
Не совсем по теме - в этом странице темы в сообщении #1 не отражаются ссылки на файлы. На первой странице темы - все нормально.
Коммент скорее к веб-мастеру форума.

Поправил, не в движке к сожалению, в посте. Весь прикол в 3 подряд аттачах вставленных в пост бб-кодом, надо было просто делать эти бб-коды каждый с новой строки, тогда все нормально, видимо так сделан парсер...

Насчет хаба: очень рад что идет такое бурное действо в этой области, наконец-то лед тронулся, лично я жду хотя бы луа и потом встроенный веб-сервер управляемый из луа, как в кексике, тогда и интерфейс захреначим и скрипты и все что хотите! big_smile.gif

Добавлено чуть позже: извиняюсь, ничерта не поправил, это после изменения поста все ок, буду копать дальше заря.

Автор: mariner 13.9.2009, 23:00

может не ндо, это, вэбсервер то?
есть отличные вэбсервера. нужен тока mysql.

Автор: Trans 14.9.2009, 3:20

Лично меня бы устроил обычный GUI big_smile.gif Не хочется (да и не можется) возиться с вебом, проблемы на серверной стороне (хаб у меня удаленный на линуксе).

Автор: Nickolya 14.9.2009, 8:15

Цитата(mariner @ 14.9.2009, 0:00) *
может не ндо, это, вэбсервер то?
есть отличные вэбсервера. нужен тока mysql.

Цитата(Trans @ 14.9.2009, 4:20) *
Лично меня бы устроил обычный GUI big_smile.gif Не хочется (да и не можется) возиться с вебом, проблемы на серверной стороне (хаб у меня удаленный на линуксе).


Ну хорошо, можно и без этого, так только сложнее немного будет все делать. Просто я немного извращался с вебсервером что генерирует страницы из-под луа, довольно удобно, да и язык (имхо) привычней и проще.

Автор: Otshelnik-Fm 14.9.2009, 9:19

В 53 посту ссылка (интересно она отличается от версии 1.0.3 в 1 посте?) - работает отлично. Багов не замечено. От себя могу назвать стабильной версией big_smile.gif .

Веб сервер апач - чем он вам не нравится? ( я против когда все в одном).

В 56 посту вопрос открыт, и еще один вопрос: Как свернуть в трей консоль хаба? - эта функция нужна.
И как запустить rusHub как системную службу?

По поводу линковки - было бы неплохо. Также как и управление через веб или icq

Автор: Setuper 14.9.2009, 10:57

Итак, по порядку.

1). Ссылка в 53 посту отличается от версии 1.0.3. Отличия состоят в оптимизации хеш-таблиц, а именно в изменении зарезервированного места в зависимости от количества пользователей. Плюсы: 1) быстрый поиск по хеш-таблице за одну итерацию 2) освобождение оперативной памяти при снижении количества пользователей на хабе.

2). Разумнее сделать просто веб-морду, а веб сервером использовать, например, апач. Это опять же связано с оптимизацией. Хотя и можно засунуть веб сервер в ещё один поток, однако не вижу смысла изобретать велосипед, тем более, что апач справляется на все сто.

3). Теперь по поводу GUI. Разумно делать GUI через веб. Плюсы: 1) удалённое управление хабом с любого компа без дополнительной установки каких-либо программ (достаточно браузера); 2) ну и конечно кроссплатформеннсть такого GUI.

4). В принципе, можно будет сделать и обычное GUI, так сказать на выбор. Однако, это GUI будет как отдельная программа, и это позже.

5). Файл libmysql.dll - это заготовка для соединения с mysql сервером.

6). Как установить хаб как службу можно прочитать тут: http://mydc.ru/topic201.html (у меня установлен, и отлично работает).

Автор: Wariner 15.9.2009, 22:40

предлагаю убрать все предыдущие версии иначе щас начнётся великая путаница! Думаю что в теме должен присутствовать только последний релиз!

Автор: Serx 15.9.2009, 22:54

Кстати о логах... как насчет опциональной возможности вести лог гл.чата самим хабом?

Автор: mariner 15.9.2009, 23:45

думаю не стоит. Все-таки лучше не тащить все в хаб, а сделать нормальную систему подключаемых модулей.

Автор: Delion 16.9.2009, 8:48

Цитата
Все-таки лучше не тащить все в хаб, а сделать нормальную систему подключаемых модулей.

Чего ради? По-моему идеология "хаб в коробке" вполне себя оправдала. Модули нужны,но не под такие мелочи,однозначно.

Автор: Nickolya 16.9.2009, 10:50

Система логов нужна, это однозначно, в плане падений, ошибок, работы и всего прочего что касается работы всей системы. А вот уже логи чата или что-то такое дополнительное можно делать скриптами, именно для того чтобы было проще изменить все под себя.

Автор: Delion 16.9.2009, 11:38

Цитата
проще изменить все под себя

Что в скрипте такого изменять,для чего заранее нельзя придумать условие? Имена файлов? Их предельный размер? Директорию? Содержание? Формат ввода? События для логирования?

Автор: mariner 16.9.2009, 15:49

делион. начинаем считать ресурсы. не все могут позволить, чтобы хаб вел 100500 логов и делал это сам. для логов давно созданы базы данных. Т.к. логи чата оно должно типо "при входе" показывать? Если чат тактивный - ресурсов будет есть достаточно, а в базах данных это все нормально будет решаться.

Автор: Setuper 16.9.2009, 16:04

Пока речь идёт о логировании действий хаба для обнаружения багов, а не чата. И логироваться они будут на текущую сессию работы хаба.

Конечно для логирования чата оптимальнее использовать бд, однако, думаю, что нужно реализовать обе возможности по выбору либо запись в бд, либо запись в файл, а администратор уже будет сам выбирать подключать ли ему бд или нет big_smile.gif это в идеале, однако хз, возможно будет только через бд, посмотрим...

Автор: Delion 16.9.2009, 18:06

Цитата
для логов давно созданы базы данных

Вместо глупого текстового файла юзать БД? Гм. Ну это ладно,большой текстовый файл радости ещё никому не приносил,было б что в него писать,те же сообщения хаба при работе.
Цитата
логи чата оно должно типо "при входе" показывать? Если чат тактивный - ресурсов будет есть достаточно, а в базах данных это все нормально будет решаться

Ну юзверю как бы весь чат даром не нужен,ему 20 последних сообщений хватит,и то не факт что нужно. Админам аналогично,в клиентах прокрутка есть,да и логи те же самые. Так что БД для логов главного чата или нечто скриптовое из сообщения выше видятся мне одинаково не к месту secret_smile.gif

Автор: Alexey 23.9.2009, 5:19

Оооооо... появилось API!! Шикарно, шикарно! Ждём остальных вкусностей.
Хаб будет распознавать реконнект юзеров?

По поводу хабтопика, я в прошлый раз недостаточно ясно изложил своё пожелание, прошу прощения. А хотел я, что-бы сообщение хабтопика было последним сообщением, которое отсылается пользователю при входе на хаб. После Сообщения Дня, статистики, истории последних сообщений и т.д и т.п., после всех скриптов, обрабатывающих вход, самым последним. Какая разница? IMHO, это логично. А во-вторых, я к этому привык. Надеюсь на понимание.

PS: Предлог "посредством" пишется слитно.

Автор: Nickolya 23.9.2009, 14:10

Класс! А когда будет версия с луа уже??? Пока от себя хочу пожелать на будущее для луа: чтобы была отдельная папка libs которая создается если ее нет при запуске хаба и из нее подгружаются либсы для скриптов по умолчанию, это чтобы не было путаницы с библиотеками. И по поводу апи: когда будет апи настроек хаба мы тут же сделаем веб-интерфейс, обещаю! И я надеюсь имена функций меняться не будут, а то будет большая путаница?! Кстати, как вам идея общего веб-интерфейса для хабов на нашем портале (кому лень ставить апач и скрипты на него), надо будет только закинуть скриптик в свой хаб, настроить там права и ввести имя и пароль пользователя имеющего права на изменение настроек (может конечно это дурацкая идея)? big_smile.gif

Автор: Setuper 23.9.2009, 15:05

Не выкладываю версию с lua плагином, только из-за того, что на данном этапе (этапе разработки) api функции могут меняться.
Когда будет окончательное согласование и ясность, при достаточном количестве функций, тогда и выложу либу lua.dll и новую версию хаба big_smile.gif

1) Обращаю внимание на то, что в отличии от птохи, в параметрах данных api функций отсутствует таблица tUser. Вместо неё, в большинстве функций присутствует только ник. Именно ник, а не идентификатор как в hex хабе, так как идентификатор никак не используется, а ник - это уже характеристика пользователя. Сделано это из соображения оптимизации. Остальные характеристики пользователя при необходимости можно будет получать по нику при помощи специальной функции. Дело в том, что в птохе при каждом вызове api функции, таблица tUser строится заново, соответственно поля этой таблицы помещаются каждый раз в lua стек, что по сути является каждый раз лишним, так как в луа скриптах редко используются некоторые поля этой таблицы, а иногда и вообще не используются. Спрашивается зачем каждый раз помещать эти поля в таблицу tUser, если они не будут использоваться. Давайте лучше будем вызывать функцию, которая будет строить эту таблицу, если нам нужен тот или иной параметр.
И ещё... Указанную функцию можно будет вызывать с параметром, который будет указывать на то, какие паля таблицы нам нужны. Это тоже оптимизация, так как в большинстве случаев нам не нужны все поля таблицы tUser.

2) В api1 и api2 птохи есть различия в том, что должна возвращать, например функция ChatArrival. В api1 для блокировки чата нужно возвращать 1, в api2 нужно возвращать true. Я совместил эти признаки и поэтому в api функции OnChat данного хаба для блокировки можно возвращать как 1, так и true (это не только для OnChat, но и для других функций).

3) На данный момент работаю над следующей фишкой:
пусть у нас есть 2 скрипта: скрипт антимата и скрипт истории сообщений чата. Скрипт антимата заменяет "плохие" слова в чате.
В PtokaX это бы реализовывалось следующим методом: скрипт антимата отсылал в чат изменённые сообщения и блокировал отправку реального сообщения. В таком случае, если бы скрипт истории чата стоял после скрипта антимата, то он бы не залогировал данное сообщение вообще, если же история чата находилась до антимата, то залогировалось бы сообщение с матом.
Итак, теперь как будет сделано в rushub...
Будет существовать такая функция, которая изменяет сообщение чата (изменяет реальное сообщение). И самое главное, что в скрипт, который будет находится ниже, будет поступать уже изменённое сообщение.

4) Если функция OnChat в каком-либо скрипте вернёт true, то, в отличии от птохи, выполнение функций OnChat всех остальных скриптов, которые находятся ниже, не блокируется. Блокируется только отправка сообщения в чат.

5) Функция Core.SendToAllWithoutNick будет отправлять сообщение всем, кроме указанного в параметрах ника.

6) Парсинг команд происходит до выполнения lua скриптов. Например, в команде OnChat(sNick, sMsg), sNick - это ник пользователя, а sMsg - это чистое сообщение, то есть без ника. Таким образом в скриптах не надо каждый раз парить и выполнять как в птохе код sData = sData:sub(tUser.sNick:len() + 4, -2). Кстати, символ | на конце сообщения также уже отсутствует.

Ну вот... Не удержался и раскрыл некоторые фишки big_smile.gif

Что касается папки libs, то это я сделаю big_smile.gif
По поводу функции реконнекта, то это реализую чуть позже. Пока это не так уж и важно.

Автор: Trans 23.9.2009, 15:07

1.

Цитата
Будет существовать такая функция, которая изменяет сообщение чата (изменяет реальное сообщение). И самое главное, что в скрипт, который будет находится ниже, будет поступать уже изменённое сообщение.
По-моему, это революционно!
2. А какая будет у РусХаба совместимость со скриптами для Птоки?

Автор: Setuper 23.9.2009, 15:12

По поводу совместимости можно будет написать такой же скриптик, как я писал для быстрого перевода скриптов, ну или руками переводить, или возможно написать конвертер.
Я не повторяю api птохи, так как считаю, что некоторые вещи там сделаны не лучшим образом. Всё же когда хаб работает быстро - это радует глаз! Поэтому всё ради оптимизации.

Автор: mariner 23.9.2009, 16:49

реквестую юникс сервию!!1111111 Я хотеть это!

Автор: Jaska 23.9.2009, 17:54

Вообще шикарный апи. А возможно как-нить реализовать функцию обращения к другому скрипту? Допустим поменять какие-то значения в таблице... и еще можно ли сделать чтобы Core.SendToAllWithoutNick(sNick, sData) принимала так же tNick тоесть таблицы с никами, сама проходила по ней и отпрвляла всем кроме этих пользователей?

Автор: Setuper 23.9.2009, 19:32

Функцию обращения к другому скрипту реализовать конечно можно, однако, есть одно но. Чтобы найти другой скрипт нужно будет пробежаться по всем скрипам, что является далеко не оптимальным решением. На дынный момент все скрипты хранятся в векторе. Для того, чтобы находить скрипт за одну итерацию нужно будет сделать хранение всех скриптов в хеш-таблице. Пока что я этого делать не буду, однако, предложение дельное и я обязательно реализую это big_smile.gif

Что касается предложения по поводу функции SendToAllWithoutNick, то тут тоже не всё так просто, однако, опять же возможно и я постараюсь сделать, хотя и не сейчас, а чуть позже big_smile.gif

Сделать надо ещё очень много...

Автор: Jaska 23.9.2009, 19:52

Ну окей) главное запиши в ToDo big_smile.gif потому что первого очень нехватает ..

Автор: Sekretchik 24.9.2009, 16:23

Отличный хаб. Ребятки-разработчики, я за Вас помолюсь. Дай Вам Бог всем самых лучших идей и жизненных успехов. RusHub - удачи тебе!!! big_smile.gif

Автор: Nickolya 24.9.2009, 18:48

По-моему актуально (или маленький реквест): в функцю OnUserConnected(sIP) добавить еще один параметр (или два), в котором будет передан адрес на который заходит юзер (еще одним параметром можно сделать порт на который он заходит, хотя это и не очень обязательно), либо же сделать чтобы это значение можно было получить вызвав функцию что передает дополнительные параметры пользователя. И надеюсь функция что возвращает доп. параметры будет работать как с ip, так и с ником юзера, к примеру данная функция (OnUserConnected), где мы знаем только айпи. Все это хочется чтобы знать с какого порта и адреса заходит юзер, чтобы, к примеру, сообщить ему что он зашел на старый адрес который больше не поддерживается или же просто для статистики big_smile.gif

И еще хочу спросить, не надо ли функции апи, что вызываются по событию (они же ивенты, events), поместить в отдельную таблицу, к примеру Api, чтобы функции выглядели примерно так: Api.OnUserConnected(sIP), не будет ли это оптимизацией выполнения скрипта?

Все остальные замечания к месту, надеюсь разработчик (он же Илюха) не захлебнется в наших запросах и все сделает как надо, еще раз удачи! victory.gif

P.S.: может уже пора открывать ветку на форуме для хаба? feel_good.gif

Автор: Jaska 24.9.2009, 19:11

Думаю как только появится "очерченая" версия (с api минимальным) можно смело открывать ветку big_smile.gif

Автор: Setuper 24.9.2009, 20:03

Что касается ip адреса и порта, то тут не всё так, как кажется.
Сервер работает следующим образом:
сервер "слушает" какой-то ip адрес с какими-то портами. Если ip адрес 0.0.0.0, то это будет означать, что сервер будет принимать соединения с любого ip адреса, доступного машине. Ну так вот... допустим мы слушаем ip адрес 0.0.0.0. Для прослушки порта 411 мы создаём отдельный сокет и привязываем этот порт к этому сокету. Для любого другого дополнительного порта мы также создаём сокет и привязываем его к порту. И после создания сервер в цикле начинает слушать все эти сокеты.
Допустим пользователь коннектится на адрес 127.0.0.1:411. Сервер принимает соединение на сокете, за которым закреплён 411 порт. После того как сервер принял соединение, для этого соединения тут же создаётся свой сокет с каким-то свободным в системе TCP портом. И соединение с 411 порта перекидывается на этот свободный порт, к которому был привязан созданный сокет. А порт 411 освобождается и продолжается его прослушка. При каждом следующем соединении происходит тоже самое.

Поэтому говорить о том, что клиент подключен через 411 порт неверно, так как клиент уже переброшен на другой свободный порт, на котором его и держит сервер. Номер этого порта конечно можно определить, однако разве это нужно? Ведь этот порт всегда случайный. Или вы хотите запоминать на какой порт именно коннектился клиент?

Что касается помещения глобальных функций в отдельную таблицу, то это будет лишним действием, так как надо будет сначала найти эту глобальную таблицу в lua состоянии, а потом найти функцию в этой таблице. Легче просто искать глобальную функцию в lua состоянии. Тут дело именно в глобальности, в отличие от обычных функций типа Core.SendToAll, которые могут быть и локальными, с помощью финта local Core = Core.

Что касается определения таблицы пользователя tUser как по нику, так и по ip, то тут тоже не так всё просто. Дело в том, что ник на хабе уникален по протоколу, а ip адрес не уникален. На хабе могут присутствовать 2 пользователя с одним ip, и тогда параметры какого пользователя помещать в таблицу tUser? Да и вообще, в функции OnUserConnected никакие другие параметры пользователя не определены (пользователь ещё не отсылал на хаб ни ник, ни команду MyINFO) - определён только один ip.

Поэтому все предложенные идеи бракуются big_smile1.gif

Что касается отдельной ветки, то пока ещё рано big_smile.gif

Автор: Nickolya 25.9.2009, 11:45

Цитата(Setuper @ 24.9.2009, 21:03) *
Или вы хотите запоминать на какой порт именно коннектился клиент?

Именно, адрес и порт по которому юзер заходит на хаб, если не трудно, пусть это будет в возможных для изъятия в луа данных. Хотя и порт на котором сидит юзер на хабе тоже может быть полезной информацией, для разных там извращений big_smile.gif Со всем остальным соглашусь, спасибо за объяснения feel_good.gif

Ждем новой информации, версий, предложений, вопросов и всего остального!

Кстати, мое предложение веб-интерфейса на портале никому не нравится? surrender.gif

И еще вопрос: библиотека lua.dll стандартная, или же в духе PPK будут исправлены некоторые недочеты в ней. И из этого вопроса вытекает другой: будут ли подключаться стандартные (или может не так выразился, те либсы, которые бы были при работе из-под чистого луа, ни к чему не прикрученного) библиотеки луа, которые можно скачать к примеру отсюда: http://mydc.ru/r/?http://luaforge.net/

Автор: Setuper 25.9.2009, 16:49

Насчёт портов сделаю.
Насчёт ip адреса и ника в параметрах глобальных функций, решил сделать более оптимизированно, объясню чуть позже.

Насчёт веб интерфейса не совсем понял. Можно по-подробнее?

Насчёт библиотеки: библиотеку lua.dll я собираю собственную, потому как в файле исходников luaconf.h нужно прописывать собственные директории scripts и libs, так как по умолчанию там прописана директория lua, поэтому если использовать стандартную библиотеку lua5.1.dll, то скрипты и библиотеки нужно будет помещать в папку lua, а не в папки scripts и libs соответственно, что не удобно.

Однако, стандартные библиотеки отсюда http://mydc.ru/r/?http://luaforge.net/ можно использовать, если класть рядом соответствующий стандартный файл lua5.1.dll под vs9.

Поэтому с совместимостью всё путём big_smile.gif


Стандартные библиотеки нужно будет качать отсюда: http://mydc.ru/r/?http://luaforge.net/frs/?group_id=110&release_id=1329
Стандартные библиотеки для vs9:  lua5_1_4_Win32_dll9_lib.zip ( 105.27 килобайт ) : 4


Хехе Сделал ещё круче. Не нужно никаких дополнительных библиотек. Я просто переименовал свою либу в lua5.1.dll, и теперь она подцепляется любыми либами, скаченными с вышеупомянутого сайта big_smile.gif Я что-то сразу не додумался до этого))))

В общем всё путём. Проверил luasql пашет big_smile.gif

Автор: Nickolya 25.9.2009, 16:54

Спасибо, ждем информации big_smile.gif Про библиотеку спрашивал чтобы знать как дополнительные длл будут существовать, будут ли они подходить без применения напильника, получается что так, значит просто класс!

Цитата(Setuper @ 25.9.2009, 13:38) *
Насчёт веб интерфейса не совсем понял. Можно по-подробнее?

Ну можно же сделать управление всеми настройками хаба через интерфейс на сайте, в который ты вбиваешь адрес хаба (в отличии от стандартного способа написания скриптов в которых адрес хаба вбит уже в настройки скрипта), на котором стоит скрипт для этих настроек, и управляешь хабом.

Автор: Setuper 25.9.2009, 17:04

Ну да. Можно сделать всё, что угодно. Все настройки будут храниться в базе данных откуда их можно модифицировать хоть через что. Хоть через сайт, хоть через прогу.

Адреса хаба я думаю будет не достаточно. Нужно будет ещё настройки бд (хост, юзер, пароль и название базы).

Автор: Nickolya 25.9.2009, 20:44

Не ко всем базам данных можно конектиться из внешки, тут можно придумать доп. причендалы, но это уже моя заморочка, опять же сделать можно все что угодно big_smile.gif

Потом вопрос: вот лежит в базе данных настройка, она берется оттуда только при запуске (или при обновлении настроек) или же каждый раз мы получаем эту настройку? К примеру лимит по слотам, в базе данных установлен в минимум 5 штук, мы каждый раз при входе юзера извлекаем настройку из базы данных???

Автор: Setuper 25.9.2009, 21:08

Нет. Настройка загружается один раз, при старте хаба. Однако, предусмотрена функция перезагрузки. Поэтому можно написать dll библиотеку, которая будет работать с настройками, и функция из этой dll библиотеки сможет вызываться функцией из php. Я над этим ещё работаю.

То есть, мы меняем что либо средствами php и после изменения вызываем функцию php, которая привязана к дополнению (дополнения (dll либы) подключаются в файле php.ini, например как это делается для бд, extension=php_mysql.dll). Наша библиотека дополнения подгружена как дополнительный плагин хаба, и будет перезагружать только что изменённую настройку.

Идея потрясная и достаточно оптимальная big_smile.gif

Кстати, на данный момент реализовал определение мак адреса пользователя, однако, будут определяться только маки пользователей, которые подключаются к хабу напрямую, а не через шлюз. Для остальных пользователей переменная мак адреса будет содержать строку "n/a".
В общем мак адреса будут определяться только в локальных сетях с соединением напрямую (не через шлюз) big_smile.gif

Автор: Jaska 25.9.2009, 21:17

Ну за шлюзом то никак и не определить, а вот то что ты сделал в локале это тебе +10!

Автор: Setuper 25.9.2009, 21:22

Ну в локалке тоже могут быть шлюзы. Например, шлюз сегмента. В таких локалках мак адрес будет определяться только в том сегменте, в котором находится хаб.
Я сделал определения мака, а будет ли оно нужно будет видно позже.

Автор: Otshelnik-Fm 25.9.2009, 21:33

Ну.. Очень круто это всё! Желаю Setuper тебе времени свободного побольше big_smile.gif. Последняя версия работает стабильно. Только вот заметил я что у меня только 63/64 человека подключено - уже 5 дней подряд. Ни больше и не меньше. ..

Автор: Setuper 25.9.2009, 22:33

А в логи смотрел? И сам перезаходил на хаб. Попробуй другим клиентом войти и проверить увеличивается ли число.

Автор: Jaska 26.9.2009, 6:09

Цитата(Setuper @ 26.9.2009, 0:22) *
Ну в локалке тоже могут быть шлюзы. Например, шлюз сегмента. В таких локалках мак адрес будет определяться только в том сегменте, в котором находится хаб.
Я сделал определения мака, а будет ли оно нужно будет видно позже.


определяется и в других сегментах? Ну вообще как я понимаю в локалки все пользователи в одном сегменте иначе как они друг с другом контактировать то будут

Автор: Alexey 26.9.2009, 6:31

Цитата(Jaska @ 26.9.2009, 7:09) *
Ну вообще как я понимаю в локалки все пользователи в одном сегменте иначе как они друг с другом контактировать то будут

Это пока локалка маленькая и простая. Через шлюз сегмента и статическую маршрутизацию.

Автор: Delion 26.9.2009, 20:50

Как насчёт ADC версии проекта?

Автор: Setuper 26.9.2009, 21:44

Не вижу особого смысла в переходе на adc. Возможно в будущем, когда он станет более распространён.

Автор: Sekretchik 27.9.2009, 10:22

Ущё раз выражаю огромную признательность за разработку RusHabа.
Вопрос:
Можно ли реализовать функцию, которая позволяла бы в MOTD (в виде приветствия)
отображать Ник присоединившегося пользователя, его IP, количество пользователей на хабе,
ну и шару подключившегося?

Автор: Jaska 27.9.2009, 10:36

Это все можно будет я полагаю сделать с помощью lua big_smile.gif

Автор: Sekretchik 27.9.2009, 10:41

still_dreaming.gif м-м-м-м... Буду ждать с нетеРпеньем!!! big_smile.gif

Автор: Delion 27.9.2009, 12:02

Цитата
Не вижу особого смысла в переходе на adc

Ну,я имел в виду не просто переход,а отдельную ветку разработки.

Автор: Setuper 27.9.2009, 12:34

Да, ник и другие параметры в сообщении дня можно будет сделать при помощи скриптов.

Отдельная ветка разработки adc... Возможно позже.

Автор: Trans 27.9.2009, 12:40

1. Интересно, реально ли при установке хаба (хоть Птоки, хоть РусХаба) вместе с хабом из одного комплекта поставить и библиотеки? Подобрать комплект минимальный (или максимальный big_smile.gif ) библиотек и сразу пусть ставятся.
2. Ещё больше интересует такая же возможность для линуха, ибо я до сих пор не могу добиться, чтоб владелец сервера почесался и поставил хотя бы LFS...
3. Исходя из этих 2-х пунктов, - нельзя ли приделать к РусХабу библиотеки? И если будет сделана версия для линуха, то линуховые библиотеки..

Автор: Setuper 27.9.2009, 12:56

О каких библиотеках идёт речь? Я что-то не понял.
О библиотеках для скриптов? LFS, mysql и тд?

Автор: Trans 27.9.2009, 19:10

Да. Для погоды, PX-control, Юзер-инфо и т.д.

Автор: Setuper 27.9.2009, 19:16

А что так сложно эти либы положить в папку libs?

Автор: Delion 28.9.2009, 19:34

Цитата
А что так сложно эти либы положить в папку libs?

Так пусть будут сразу,вместе с дистрибутивом хаба.

Автор: Trans 28.9.2009, 21:03

Цитата
- а мне кажется на момент тестирования это лишнее
Я не про тестовый период, а вообще.
И в особенности интересует вопрос - нельзя ли автоматизировать установку этих библиотек и мускула при установке хаба НА ЛИНУКС? big_smile.gif Возможно, вопрос глупый для линуксоидов, но я то простой виндозер, хотя мой хаб и стоит на линукс-сервере ... Но если так в приниципе нельзя для линукса - то последний вопрос отпадает.

Автор: Sekretchik 28.9.2009, 21:06

Уважаемый Setuper , а бан IP диапазонов тоже будет реализовываться скриптами или как в Ptokax? (или я слишком спешу?)
P.S.
RusHab отработал трое суток без каких либо проблем. Сутки на версии 1.0.4 и двое суток на 1.0.5. Но может проблем не было из-за малого кол-ва юзверов? (10 человек в режиме теста).

Автор: Setuper 28.9.2009, 21:33

Всё будет, но со временем.

Да, проблем нет именно из-за малого количества пользователей, однако, я вроде нашёл ошибку))

Автор: mariner 28.9.2009, 23:17

Цитата(Trans @ 28.9.2009, 22:03) *
Я не про тестовый период, а вообще.
И в особенности интересует вопрос - нельзя ли автоматизировать установку этих библиотек и мускула при установке хаба НА ЛИНУКС? big_smile.gif Возможно, вопрос глупый для линуксоидов, но я то простой виндозер, хотя мой хаб и стоит на линукс-сервере ... Но если так в приниципе нельзя для линукса - то последний вопрос отпадает.


конечно можно, я гарантирую это! Если мне предоставят достойные исходники - соберу пакет. PS тока будет небольшой разговор по файлам хаба, ибо по хорошему, если мы хотим попасть в оффициальные репозитории должны быть кое-какое разделение мух и котлет. То есть изменяемые файлы лежат в директори /var/*/*/rushub
Статичные файлы (бинарники, файлы переводов) в /usr/share/rushub/*, конфиги в /etc/rushub/*, а логи в /var/log/rushub/*

Автор: Nickolya 29.9.2009, 14:07

Цитата(Otshelnik-Fm @ 28.9.2009, 22:56) *
В середине я немного урезал этот лог - т.к. форум больше 2 метров не дает загрузить (а он 2.04 был big_smile.gif - но это к Nikolya вопрос)

Поднял до 12, все для вашего удобства, пользуйтесь мои дорогие big_smile.gif

Автор: Sekretchik 30.9.2009, 16:29

А как "оперативно" - без перезапуска RusHuba сменить топики (sTopic) или (sHubTopic)?

Автор: Trans 1.10.2009, 7:53

В первом посте:
Lua API функции:

2. Core.SendToAll(sData)
3. Core.SendToAllWithoutNick(sNick, sData)

Мне кажется, либо в функции №3 слово Without надо заменить на With или From, либо не мешало бы пояснить смысл последней функции. Иначе не пойму, почему называется "БЕЗ_ника", а ник все же есть, а предыдущая функция как раз реально без ника (и без всяких уточнений в названии).

Автор: Alexey 1.10.2009, 8:16

ПослатьВсемКромеНика(Ник, Данные)
А так понятнее?

Автор: mariner 1.10.2009, 8:16

да все ясно же! функция отсыла всем и функция отсыла всем, кроме

Автор: Trans 1.10.2009, 8:50

Как Алексей показал - на русском - так понятно. big_smile.gif
А вот английский вариант - неправильный, без комментариев не понять.
Ну раз теперь объяснили, так тому и быть.
Хотя можно было бы и так:

Core.SendToAllExceptNick(sNick, sData)

Автор: Jaska 3.10.2009, 13:17

Тестил на онлайне в 1,5к. Память хавается логами просто ужасно! Тем не менее хаб летает. После пары минут работы вылезла ошибка переполнения буфера в клиенте.

Автор: Setuper 3.10.2009, 14:11

Думаю сделать настройку для уровня логирования, чтобы можно было снизить количество логирующихся событий или вовсе отключить лог.
Думаю глюки именно из-за больших логов, точнее из-за огромного файлового потока логов.

Для того, чтобы хаб не ел процессорное время служит параметр настроек iStepDelay. Когда на хаб нет нагрузки, хаб пробегает циклы очень быстро и из-за этого ест процессор. Устанавливаем параметр iStepDelay = 10 (это означает задержку на каждом цикле в 10 мсек), и хаб не есть процессорное время. Можно варьировать этот параметр и тем самым загружать или разгружать хаб. Однако, увеличение этого параметра ведёт к замедлению действий. Самым быстрым действиям соответствует 0 в этом параметре!!!

Автор: Otshelnik-Fm 4.10.2009, 17:27

добавились 2 параметра -
iStartPing = 300
iPingInterval = 60

Что они задают?

Автор: Wariner 5.10.2009, 7:09

Илюх, стесняюсь спросить, название хаба окончательное?

Автор: Nickolya 5.10.2009, 9:31

Цитата(Delion @ 4.10.2009, 18:49) *

Это теория. А практика? Есть ли готовое программное решение?

Это изложение практики, программное решение - скрипт на луа, который конектится к хабу, выкладывать его в паблик не думаю что хорошая идея, ибо переделывается в автоматизированный спам-бот в 5 минут, да еще и на луа, простейшем языке. Компиляция как защита толком не работает.

Цитата(Wariner @ 5.10.2009, 8:09) *
Илюх, стесняюсь спросить, название хаба окончательное?

Хочешь вложить в название какое-то исхищрение? Можно опять же вечерком собраться и провести по этому поводу обсуждение на хабе.

Автор: Setuper 5.10.2009, 13:50

Ага. Рад выслушать все предложения по поводу названия и не только big_smile.gif

Автор: Jaska 5.10.2009, 15:28

Ну давайте тогда завтра в 10 по мск на хабе встретимся и обсудим.

Автор: Sekretchik 12.10.2009, 22:14

Название Отличное - RusHub

Автор: Setuper 13.10.2009, 2:47

создал опрос))

Автор: Sekretchik 13.10.2009, 10:48

Уважаемый Setuper
Вот http://mydc.ru/index.html?showtopic=401&view=findpost&p=21903 написал для чего и как big_smile.gif
СПАСИБО ЗА ПРОЕКТ!
Удачи Вам! Все работает отлично. На сегодняшний день - ошиПков нет big_smile.gif

Автор: Delion 13.10.2009, 15:14

Цитата
создал опрос))

Добавь ещё вариант: "мне всё равно".

Автор: Setuper 13.10.2009, 16:09

А смысл в этом ответе? Не хочешь - не отвечай big_smile.gif

Автор: Delion 13.10.2009, 17:29

Цитата
А смысл в этом ответе?

Не меньше чем в вопросе "подскажите пожалуйста,как мне назвать свой проект".

Автор: Setuper 13.10.2009, 17:38

Как раз смысл в опросе мнений, нравится ли название или нет, - есть. А вот смысла писать не нужный никому ответ, который является не однозначным, как раз нету. Повторяю, тем, кому всё равно, предлагаю не голосовать или посмотреть результат, лишившись голоса))

Автор: Sekretchik 13.10.2009, 22:15

Вопрос "тупого" - как выставить минимальное ограничение по шаре в 5 Гб
iMinShare = 0 - какое тут число указать? чет к вечеру голова кругом идет... Чувствую что 5 ...

Автор: Delion 13.10.2009, 22:27

Цитата
ответ, который является не однозначным

Цитата
нравится ли название или нет

Категорически не согласен. Сам опрос абсурден,ибо сколько людей,столько и мнений. Не надо подменять одно другим.

Автор: Setuper 13.10.2009, 23:05

iMinShare = 5368709120 - это 5 Гб (5368709120 байт)
После того, как будет сделана веб-морда, можно будет в ней сделать текст-боксы с выбором единицы изменения минимальной шары (как в птохе). А пока что приходится выставлять в байтах.

2Delion: вот именно, что сколько людей, столько и мнений. Кто-то считает этот опрос абсурдным, а кто-то нет, поэтому не нужно лишний раз флудить: не нравится - не голосуй!

Автор: rival 14.10.2009, 7:28

русские горки( russian hill hub ,RusHill )или русская пуля из-за скорости работы =) p/s( К@пит;-)шка )

Автор: Otshelnik-Fm 20.10.2009, 22:57

Я за текущее название. Очень патриатично даже.

p.s. хаб работал на автопилоте пока я путешествовал - ни одного вылета (v_1.0.5e).

Автор: Setuper 21.10.2009, 0:20

У меня есть следующая идея: хаб - это просто сервер работающий на nmdc протоколе, а все другие возможности реализуются плагинами. Плагины могут взаимодействовать между собой, и каждый плагин имеет собственные настройки.

Возможные плагины:

Lua
Mysql
Commands
Bans
Profiles
Unflood

Стоит ли сделать так, или лучше запихнуть это всё как обычно в хаб?
Просто если делать плагинами, то можно будет выбрать то, что нужно. Для больших хабов можно будет исключить некоторые нагрузочные плагины. Те, кто не захочет юзать бд, смогут отключить плагин и хранить настройки в файлах.

Автор: Delion 21.10.2009, 0:29

Цитата
все другие возможности

Лучше распредели возможности между плагинами и самим хабом.

Автор: dimetrius 21.10.2009, 0:42

А почему бы не всунуть это всё в сам хаб, чтоб всё отлажено было и проблем в случае чего не возникало. Но и чтоб была возможность полностью отключать что надо допустим правкой конфигов каких-то, но чтоб не более смены 0 на 1.

Автор: Otshelnik-Fm 21.10.2009, 1:15

Присоединяюсь к dimetrius. Так будет проще конечному пользователю

Автор: Jaska 21.10.2009, 9:00

По логике "конечные пользователь" должен быть админом, и если он не в состоянии подключить плагин то это извините "говноадмин" и проблемы лично его. Я за то чтобы оставить в хабе только одну поддержку nmdc поскольку это позволит другим прогерам писать свои плагины, под свои нужды, возможно даже лучше чем будут задуманы сейчас.

Автор: Alexey 21.10.2009, 11:02

Голосую за модульность.

Интересно, модуль для перла или питона напишет кто-нибудь? Или птока-совместимый луа? ;)

Автор: Setuper 21.10.2009, 11:55

Плагин перла или питона я уверен можно будет реализовать.
Что касается птока-совместимого lua, то тут существует несколько противных факторов (лично с моей точки зрения): использование таблицы tUser считаю нагрузочным фактором, хоть разработчики и попытались убрать из ней большинство полей. Разделение всех api функций по разным таблицам также непонятно, лучше запихнуть всё в Core, так будет легче начинающему программисту и так можно будет одной строкой оптимизировать эту таблицу:

Код
local Core = Core

Идём далее, и находим неудобство, например, в 10 вызовах одной и той же функции SetMan.GetString с разными аргументами, если нам вдруг понадобилось каких-то 10 параметров. То же самое касается и функции Core.GetUserData. Проблема решается использованием битов для каждого из параметров, то есть вызов одной функции с одним аргументом, который описывает необходимые поля.


Теперь по поводу встраивания всех прочих возможностей в хаб. Если использовать плагины, то всё будет работать также отлажено, и при возникновении ошибки сразу будет ясно в каком плагине копать, а не копать во всём хабе. Встраивание в хаб отличается лишь тем, что всё будет переплетено и не будет чёткого разделения, и, кроме этого, лишний неиспользуемый код будет висеть грузом. В случае плагинов, мы просто отключаем этот груз (выбрасываем его).
Кстати, идея такова: плагин представляет из себя dll библиотеку (so библиотеку). Все плагины помещаются в специальную папку plugins, которая создаётся, если она не создана, при запуске хаба. Именно папка plugins сканируется хабом для обнаружения плагинов. Можно сделать настройку: загружать ли новый плагин автоматически или использовать ручную заргузку. Ручная загрузка означает то, что новый плагин не будет загружаться при сканировании этой папки, а в настройках будет помечено, что этот плагин отключен и его можно будет включить вручную (через команду, через веб интерфейс или через gui). Плагины могут взаимодействовать между собой. Например, у нас 2 плагина: плагин антифлуда и плагин банов. Плагин антифлуда имеет настройку бана при обнаружении флуда, и, соответственно, использует функцию бана из плагина банов. Теперь мы отключаем плагин банов. Плагин антифлуда забанить не сможет, а сможет, например, только разъединить пользователя без бана или оповестить о флуде.

На первый взгляд механизм замечательный. Однако, не может ли возникнуть такой ситуации, когда разделение по задачам окажется не столь эффективным, чем кучемола этих задач. Думаю, что такого не должно произойти.

Автор: Delion 21.10.2009, 12:00

Цитата
Например, у нас 2 плагина: плагин антифлуда и плагин банов

Цитата
разделение по задачам окажется не столь эффективным

М-да,пример не очень удачный...

Автор: Jaska 21.10.2009, 12:01

Мне интересно как же между собой плагины будут взаимодействовать? Насколько я знаю напрямую взаимодействовать у них не получится, если только как-то через хаб.

Ждем-с описание API для плагинов big_smile.gif если таковой имеется!

Автор: Setuper 21.10.2009, 12:39

Что значит напрямую взаимодействовать не получится? Взаимодействие сводится к использованию функций другого плагина. Для этого в другом плагине строится абстрактный механизм. И именно эту абстракцию используют плагины для своих нужд. Через абстракцию будут вызываться нужные функции, которые даже не нужно будет описывать и линковать к плагинам и хабу, они будут доступны после подключения соответствующих плагинов к хабу. Естественно плагин сначала убедится, что нужный для работы функции плагин подключен, и только после этого будет вызывать функцию.

Описание api для плагинов приведу, возможно, позже, а может и в ближайшее время.
Это скорее будет не api, а методика по созданию плагинов с соответствующими заголовочными файлами абстрактного механизма хаба.

Для описания методики, наверное будет разумно создать в разделе других языков программирования статейку. Там же можно будет разъяснить принципы наследования и другие понятия языка с++.

Автор: Otshelnik-Fm 28.11.2009, 14:47

Как продвигается разработка? что-то 2 месяца тишина...

Автор: Setuper 28.11.2009, 18:30

Разработка продвигается. Сейчас разрабатывается большой блок (настройки + профили + mysql)

Автор: Alexey 28.11.2009, 22:57

Увидел, что в теме новые сообщения, последний ответ Сетапера, и уже приготовился ставить/смотреть/тестить русхаб... а тут такой облом ;)

Автор: Setuper 28.11.2009, 23:16

Сейчас самая проблемная часть проектируется. Как только я её сделаю, дальше будет намного легче и быстрее идти процесс.

Автор: FallenAngel 29.11.2009, 13:18

Успехов. Что тут еще можно пожелать то?big_smile.gif

Автор: FallenAngel 7.12.2009, 14:54

Хотелось бы, чтобы еще одна "фиговинка" была реализована. big_smile.gif
В настройках прописывается ник админа и ему бы приходили всякие собщения которые приходят опам (с ключом то бишь) но даже если в настройках этого ключа у него нет big_smile.gif Хм.. Вроде доступно объяснил?)

Автор: Setuper 7.12.2009, 17:53

Ага. Реализация функционала операторов не будет привязываться к ключикам))) То есть все настройки зависят только от профиля, но никак не от какого-то атрибута профиля.

Автор: Sekretchik 8.12.2009, 21:05

Молодцы! Стабильно сервер работает - 100%!
Работой серверного ПО под названием -=RusHub=- очень доволен!

Автор: Otshelnik-Fm 2.1.2010, 15:37

С новым годом. Думаю что скоро надо будет выделить подфорум "Русхаб и скрипты для него". Ну или что-то похожее. Продолжаем тестирование

Автор: Wariner 2.1.2010, 18:58

не указанно в каких единицах интервал для создания таймера!

Автор: STRELOK 3.1.2010, 12:09

Вопрос: Когда будет добавлена система банов, киков, предупреждений и заглушек? big_smile.gif)

Автор: Wariner 3.1.2010, 13:05

я сейчас работаю над модулем банов. скоро выложу основу может кто то её доработает если Илюха одобрит))))

Автор: Serx 4.1.2010, 18:27

Наверно глупая просьба, но все же... можно ли написать какую-либо таблицу соответствия функций PtokaX и RusHub ?
Совсем хорошо будет если будет какой-нибудь конвертер наподобие того что переводит скрипты для PtokaX с API на API2...
Или там не настолько много отличий и переделка скриптов вручную не займет много времени при использовании только описания функций в первом посте этой темы?

Автор: Wariner 4.1.2010, 18:52

Все предложения и пожелания думаю стоить тоже отделить в отдельную тему!

Автор: mariner 4.1.2010, 18:59

когда таки будет unix-версия

Автор: Setuper 4.1.2010, 22:21

Для unix версии нужно время.

Автор: Nickolya 4.1.2010, 22:23

Уже забито шикарное апи для скриптов, уже потом делайте что хотите shame.gif

Автор: STRELOK 5.1.2010, 9:43

Когда будет возможно добавлять текстовые файлы, содержимое которых будет выводится по команде, как это сделано в PtokaX?

Автор: Setuper 5.1.2010, 14:30

В принципе данный функционал можно реализовать с помощью скриптов.
Однако, если нужно, я могу встроит это в хаб.

Автор: Wariner 5.1.2010, 14:34

автор предыдущего соообщения и сам справился с этой задачей))))

Автор: Wariner 6.1.2010, 10:33

Хм, вопрос не по хабу а по форуму. может стоит разделить скрипты и модули? т.е. отдельно ветка скриптов отдельно ветка модулей?

Автор: STRELOK 6.1.2010, 13:25

Не могли бы вы добавить аналог функции Core.SendPmToUser?

Автор: Setuper 6.1.2010, 13:57

в русхабе намного продвинутый аналог этой функции содержится в функции Core.SendToUser(UID/sToNick, sData, sNick, sFrom)

UID/sToNick - UID или ник пользователя, которому хотим отослать сообщение
sData - само сообщение

Если указан параметр sNick, то сообщение будет отсылаться в чат от этого ника

Если кроме параметра sNick указан параметр sFrom, то сообщение будет отсылаться в приват от пользователя sFrom, с ником в сообщении sNick.
Для того, чтобы отсылающий и ник в сообщении совпадали, нужно чтобы совпадали параметры sNick и sFrom.

Пример:

Код
Core.SendToUser("Вася", "Тест", "Петя", "Бот")

эта строка отошлёт приватное сообщение "Тест" пользователю с ником "Вася", причём на закладке приватного окна будет указано, что сообщение пришло от "Бот", а в самом сообщении будет так: <Петя> Тест

Надеюсь понятно разъяснил))))
В общем пробуем))

Цитата(Wariner @ 6.1.2010, 10:33) *
Хм, вопрос не по хабу а по форуму. может стоит разделить скрипты и модули? т.е. отдельно ветка скриптов отдельно ветка модулей?

Модули, я думаю, можно обсуждать в разделе "Разработчикам".

Автор: Wariner 6.1.2010, 14:30

насчёт обсуждений понятно, а склад готовых?

Автор: Setuper 6.1.2010, 15:00

Ну пока что модулей почти нету, поэтому их можно выкладывать пока что в одну тему.

Автор: FallenAngel 14.1.2010, 14:49

1. Хочется аналог, причем достаточно большой Птоховской команде !getinfo
2. Доклад обо всем админу (ник его указывать надо будет) или опам - но все, наверно, будут не в восторге. Все - имелось ввиду, как незаход на хаб по какой-либо причине: будь то маленькая/большая шара, некорректный ник и т.д. и т.п.
3. Эм.. даже не знаю как и написать правильно.. Нохочется, чтобы бан поставленный юзером более высоким рангом не смогу бы отменить с нихшим рангом., и так про другие команды..
4.Что-то еще в голове вспоминалось. как вспомню-напишу))

Автор: Nickolya 14.1.2010, 21:55

По пунктам:
1. А как на счет вызова функции другого скрипта с заданными параметрами? Реализуемо? Опять же для модулей будет вполне полезная штука big_smile.gif
2. Как реализуется вызов апи функций скриптов? Хаб знает какие находятся в скрипте и не пытается вызвать не существующую функцю? Если не так, тогда может стоит знать какие функции имеются в скрипте и вызывать по событию только те скрипты что имеют необходимую функцию.
3. Мне кажется стоит умное управление майинфо, для начала парсить его, сделать список разрешенных клиентов, как в птоке, сделать опцию отсечения левых клиентов, сделать опцию кика клиентов с левым тегом который не парсится, позволить как в птоке убирать из тега разные части, проверять хабом новизну майинфо и если после всех исключений оно не меняется - не слать всем юзерам. Таким образом мы немного убираем нагрузку на сеть big_smile.gif

Пока вроде все, может потом еще что придумаю.
FallenAngel, пункты 2,3,4 реализуются скорее скриптами, пункт 1 так же можно возложить на скрипт, не все же пихать в хаб big_smile.gif

Автор: Setuper 14.1.2010, 22:20

FallenAngel, всё это реализуется скриптами.

Nickolya, почти всё так и сделано.
1. Не реализуемо из-за того, что у скриптов разные глобальные окружения.
2. Естественно так и реализовано.
3. Парсить MyINFO возможно стоит. Списки разрешённых клиентов опять же скриптами можно реализовать. Убирать из тэга разные части можно и сейчас, путём исправления команды MyINFO при помощи функции Core.SetCmd (самое главное чтобы синтаксис команды был соблюдён). Если MyINFO не изменилось, то оно и не рассылается всем пользователям - это было с самого начала реализовано.

В общем все предложения забракованы big_smile.gif

Автор: Nickolya 14.1.2010, 23:24

А по поводу 1 пункта, почему? Я не про прямое использование, а через апи фукнцию, типа

Код
Core.CallFunction("script1.lua","Core.SendToAll", "somestring")
Это же получается типа вызова функции апи, или все-таки реализации не подлежит? :(

Автор: Setuper 14.1.2010, 23:33

Так а зачем огород городит, когда вызов функции Core.SendToAll итак доступен из любого глобального окружения?

Автор: Nickolya 14.1.2010, 23:40

Это банальный пример, просто на работоспособность функции... Пусть будет

Код
Core.CallFunction("script1.lua", "SomeFunc", "somestring")

Автор: Setuper 14.1.2010, 23:46

Си функцию так вызвать можно (SendToAll это Си функция), а вот lua функцию вызвать так нельзя. Ведь lua функция может использовать в своём теле какие-то глобальные переменные своего глобального окружения, кроме этого локальные переменные функции привязаны к окружению самой функции, а окружение самой функции наследует глобальное окружение. Поэтому никак.

Автор: Otshelnik-Fm 17.1.2010, 5:13

very good. Is best hub soft in future big_smile.gif. ну а ссылка http://mydc.ru/r/?http://rushub.mydc.ru/ пустая. Забейте там чтоли ссылки на этот форум

Автор: Setuper 17.1.2010, 14:49

Сделал.

Используя потоки добился того, что можно вызвать глобальную функцию другого скрипта с передачей параметров из текущего скрипта, причём глобальная функция будет работать в том окружении, в котором она находится, то есть другими словами вызов функции может менять и вызывать всё что находится в том скрипте в котором определена эта функция)))))))

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

Nickolya, расскажи для чего тебе нужен был данный функционал? big_smile.gif (Хотя понятно, что этот функционал действительно очень мощный)

Автор: STRELOK 17.1.2010, 14:56

Сделайте аналог функции Core.SendToOps(sMsg, sBot)

Автор: Setuper 17.1.2010, 15:01

Кто такие операторы? По какому принципу они определяются? Те у кого ключик есть?

Думаю лучше сделать функцию SendToProfile, а не привязывать статус оператора к ключику (как это сделано в птохе), так как хочется иметь возможность находится в статусе оператора, но без ключика.

Автор: STRELOK 17.1.2010, 15:22

Цитата(Setuper @ 17.1.2010, 17:01) *
Думаю лучше сделать функцию SendToProfile, а не привязывать статус оператора к ключику (как это сделано в птохе), так как хочется иметь возможность находится в статусе оператора, но без ключика.

Начал писать скрипт отсылки сообщения администраторам/операторам хаба, для того, чтобы сообщение отсылалось им. Не хватает данной функции для реализации скрипта.

P.S.: Можно и так big_smile.gif

Автор: Nickolya 17.1.2010, 15:35

Setuper, спасибо большое за функцию, я хотел упростить немного себе жизнь в отношении создания модуля для скрипта, к примеру чтобы не изобретать велосипеды в модулях, а сразу из модуля вызывать фукнцию головного скрипта big_smile.gif

Вопрос: в результате работы фукнции в вызываемом окружении, то что возвращается попадает в окружение скрипта отуда шел вызов?

Функции отсылки профилю действительно не хватает, можно сделать отсылку определенным никам, но если их много мне кажется это будет тормозить... + реально было бы полезно сделать отсылку нескольким профилям, если к примеру 1 аргументом функции является таблица, мы смотрим какие в ней профили прописаны и всем им отсылаем сообщение.

Автор: Setuper 17.1.2010, 15:36

API функция Core.SendToProfile будет конечно работать быстрее, но пока её нету, можешь использовать lua аналог:

Код
Core.SendToProfile = function(iProfile, sData, sNick, sFrom)
  for i, v in ipairs(Core.GetUsers(12)) do
    if v.iProfile == iProfile then
      Core.SendToUser(v.UID, sData, sNick, sFrom)
    end
  end
end


После того как я сделаю api функцию Core.SendToProfile, эту lua функцию можно будет удалить, при этом вызовы этой функции не пострадают big_smile.gif

Автор: Nickolya 17.1.2010, 17:03

А вот ответить на вопросы что заданы немногим выше? big_smile.gif Ждем нового релиза с новыми фукнциями!!! Спасибо огромное! victory.gif

Автор: Setuper 17.1.2010, 17:50

Отсылку по таблице с профилями тоже реализую.


Значение возвращается в том окружении, где вызвана функция.

Автор: Setuper 18.1.2010, 19:20

Список пока не реализованных идей и запросов ( todo / future request / change request / improvement ).

ToDo:


Автор: FallenAngel 21.1.2010, 18:41

Может еще реализуется 2 причины бана? Одна для забаненного, а вторая для администрации?;)

Автор: Setuper 21.1.2010, 19:47

Баны не встроены в хаб, всё это реализуется скриптами big_smile.gif

Автор: alex82 21.1.2010, 22:11

При написании скриптов остро ощущается нехватка функций SendToOps и SendToProfile. Очень хотелось бы увидеть эти функции в следующей версии.

Автор: Setuper 21.1.2010, 22:14

Функция Core.SendToProfile(iProfile/tProfiles, sData, sNick, sFrom) уже готова прямо сейчас могу релиз выложить big_smile.gif

Автор: Otshelnik-Fm 22.1.2010, 1:10

Предложение -
1. сделать запуск хаба с задержкой (при включении компа сетевые службы запускаются чуть позже - проходит инициализация сетевого адаптера).
2 - незнаю возможно ли - консоль чтобы пряталась в трей (чтобы была невидима)
3 - при выходе новых версий чтобы в архиве были files.lua и lua.dll на "своих местах" - это же необходимый минимум?

Не нашел как перезагрузить скрипты без перезагрузки самого хаба...

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

Автор: Setuper 22.1.2010, 1:23

1 - зачем задержка? Когда сетевые службы загрузятся тогда и войдёшь на хаб.
2 - выход - запуск хаба как службу.
3 - обновляться модули, библиотеки и хаб могут независимо друг от друга.

Для возможности перезагрузит все скрипты используй скрипт http://mydc.ru/topic2878.html

Автор: Nickolya 23.1.2010, 15:51

Цитата(Setuper @ 6.1.2010, 23:45) *
Однако, для функции Core.SetConfig исключения составляют настройки: sHubIP, iMainPort, sSubPorts.
При изменении настройки sHubName или sTopic отправляется соответствующая команда. После изменения, настройки сохраняются.

Мне кажется значимый пункт для того чтобы добавить в документацию по функциям.

Автор: Setuper 23.1.2010, 15:56

Спасибо. Добавил big_smile.gif

Автор: Otshelnik-Fm 24.1.2010, 15:38

Setuper - будет ли возможность линковки чатов 2х хабов? На птоке такое было возможно только при танцах с бубнами...

Автор: Setuper 25.1.2010, 1:14

Да, чуть позже напишу отдельный плагин, который будет этим заниматься. Причём линковать собираюсь не только чаты, а полноценно линковать хабы big_smile.gif

Однако, на данный момент есть дела и поважнее. Сейчас передо мной стоит задача сооружения защиты для хаба. В частности это связано с написанием антифлуда и дисконнектом пользователя при каких-либо попытках атаки. На данный момент при неправильно отосланных параметрах nmdc команд, хаб не отключает пользователя, а ждёт правильной команды. Этим могут воспользоваться для атаки хаба путём частых отсылок неправильных параметров в командах. Поэтому как и в птохе, если nmdc команда содержит не правильные параметры, то должно последовать незамедлительное отключение.

Автор: fixx 25.1.2010, 15:13

Максимальное количество символов в нике как задать? А то уже атакуют DCFlood'ом. Там ники с 14-тью произвольными латинскими символами. На птоке в свое время тупо 13 мах выставил и все. big_smile.gif
===========
ЗЫ. Пардон, что не туда написал... Смутила строчка вверху
"MyDC.ru > RusHub > Технические вопросы по RusHub'у", а эту "Предложения для развития" у меня в Гугль хроме еле видно...

Автор: Wariner 25.1.2010, 16:12

думаю ответ будет прост... это легко делается скриптом типа:

Код
local sBot = "Bot"
local iMinLen = 3      -- минимальное количество символов
local iMaxLen = 13   -- максимальное количество символов

function OnValidateNick(UID)
    local tUser = Core.GetUser(UID, 1)
    if string.len(tUser.sNick) < iMinLen then
        Core.SendToUser(UID, ("Ваш ник слишком короткиий! Минимальное количество символов в нике для входа на хаб составляет %d !"):format(iMinLen), sBot)
        Core.Disconnect(UID)
    elseif string.len(tUser.sNick) > iMaxLen then
        Core.SendToUser(UID, ("Ваш ник слишком длинный! Максимальное количество символов в нике для входа на хаб составляет %d !"):format(iMaxLen), sBot)
        Core.Disconnect(UID)
    end
end

Автор: Nickolya 25.1.2010, 16:17

Wariner, юнный падаван, оптимальней наверно будет делать как твой тезка, автор хаба. В его варианте будет вот так:

Код
local sBot = "Bot"
local iMinLen = 3      -- минимальное количество символов
local iMaxLen = 13   -- максимальное количество символов

function OnValidateNick(UID)
    local iNickLen = Core.GetUser(UID, 1).sNick:len()
    if iNickLen < iMinLen then
        Core.SendToUser(UID, ("Ваш ник слишком короткиий! Минимальное количество символов в нике для входа на хаб составляет %d !"):format(iMinLen), sBot)
        Core.Disconnect(UID)
    elseif iNickLen > iMaxLen then
        Core.SendToUser(UID, ("Ваш ник слишком длинный! Максимальное количество символов в нике для входа на хаб составляет %d !"):format(iMaxLen), sBot)
        Core.Disconnect(UID)
    end
end

Если конкретно, то я про конструкцию вида
Код
sNick = Core.GetUser(UID, 1).sNick

Да и ник бота будет вот таким big_smile.gif
Код
sBot = Core.GetConfig("sHubBot")

Автор: Setuper 8.2.2010, 15:02

Так как в моей голове на данный момент летают мысли о создании хорошего модуля банов, то у меня сразу же встаёт вопрос о банах по всевозможным параметрам. В частности: бан по ip, бан по нику, бан по MyINFO параметрам, бан по mac-адресу (в случае успешного определения), и бан по DNS.

Реализовав средство определения имена хоста для последнего типа бана (DNS), возникла трудность, связанная с тем, что при определении хоста иногда возникают задержки (около 5 сек), связанные с отправкой запроса по SMB протоколу, с целью определить имя хоста. Поэтому бан по DNS однозначно отпадает, так как в этом случае время входа на хаб увеличивается примерно на 5 сек, что является недопустимым big_smile.gif

Автор: Артём 8.2.2010, 15:14

Цитата(Setuper @ 8.2.2010, 14:02) *
бан по mac-адресу (в случае успешного определения)

shocked.gif как mac узнать сможете?

Автор: Nickolya 8.2.2010, 16:45

Setuper, а что если узнавать днс в отдельном потоке, не синхронизированным с входом на хаб, а уже потом, по таймеру, определять входит ли юзер в список забаненых, получится что юзер войдет на хаб, а уже потом отключится от хаба, конечно не очень оптимально, но все-таки инструмент кары будет хороший.

Артём, мак уже имеется, это 1 из параметров юзера, наглядно сможешь увидеть используя http://mydc.ru/topic2878.html?#39;а (при входе на хаб в приветствии)

Автор: Setuper 8.2.2010, 17:33

Как вариант возможно.

Автор: Артём 8.2.2010, 18:14

Цитата(Nickolya @ 8.2.2010, 15:45) *
(при входе на хаб в приветствии)

Цитата
• Ваш mac-адрес: n/a

Автор: Setuper 8.2.2010, 18:31

Если между хабом и клиентом есть хотя бы 1 маршрутизатор, то mac адрес клиента определить нельзя. Другими словами, мак-адрес можно определить только для пользователей, которые находятся в том же сегменте, что и хаб.

Автор: Saymon 23.2.2010, 1:47

А может сделать плагин профилей и потом просто ко всем скриптами подключать? Я думаю это будет удобным.

Автор: STRELOK_IS74 23.2.2010, 10:32

Где то уже писал, но повторюсь: Сделайте команду смены Топика хаба.

Автор: Setuper 23.2.2010, 12:43

Saymon, так профиль итак устанавливается в одном скрипте, а потом используется во всех скриптах. То есть в роли плагина тут выступает скрипт.

По поводу установки топика, то можно написать скрипт:

Код
local tAllow = {
  [0] = true,
  [1] = true
}

function OnChat(UID, sData)
  local sTopic = sData:match"%b<> [!%+]settopic (.+)"
  if sTopic then
    local tUser = Core.GetUser(UID, 9)
    if tAllow[tUser.iProfile] then
      Core.SendToAll("*** "..tUser.sNick.." установил новый топик.")
      Core.SetConfig("sTopic", sTopic)
    else
      Core.SendToUser(UID, "У вас нет прав на использование этой команды")
    end
    return true
  end
end

Автор: Jaska 28.2.2010, 3:40

Поскольку необходима реализация сессий для веб-морды хаба, очень бы хотелось получать в OnWebData(WebID, sData) еще ip-адрес отправителя а так же иметь функцию которая бы выводила состояние клиента (подключен/отключен)

Автор: STRELOK_IS74 28.2.2010, 8:04

Цитата(Setuper @ 18.1.2010, 21:20) *
TODO лист:

  • Функция статистики и информации о сервере Core.GetStat().

Предлагаю сделать такую статистику:
Цитата
<RusHubBot> Информация о хабе:
Имя хаба: RusHub
Адрес хаба: 127.0.0.1:411
Топик хаба: RusHubTopic
Платформа хаба: Windows 7
Хаб работает 1 дней, 17 час., 22 мин., 1 сек.
Подключеные юзеры: 10 (1 админы, 1 операторы, 5 зарегистрированные, 2 обычные, 1 боты)
Расшаренные данные: 5,42 ТБ
В среднем данных на юзера: 365,42 ГБ

Автор: Setuper 28.2.2010, 12:43

По поводу определения ip адреса веб-клиента - сделаю.

По поводу статистики хаба, то функция Core.GetStat() будет возвращать Lua таблицу в полях которой будет содержаться различная информация текущей сессии работы хаба:


и тд. и тп.
Данная функция будет возвращать только изменяемые во времени параметры (то есть, не постоянные во времени).

Платформа хаба - это вообще постоянный параметр и он будет возвращаться как поле таблицы Core (так же как и версия хаба Core.sHubVersion).

Имя хаба, адрес хаба, топик хаба - это настройки хаба, и их можно получить при помощи функции Core.GetConfig.

Для получения числа подключенные юзеров тоже есть соответствующая функция. По поводу числа админов, операторов и тд., то это зависит от скриптов (хотя можно сделать функцию, которая возвращает по профильному числу число пользователей данного профиля).

Для получения общего числа расшаренных данных тоже есть функция. Среднее число данных на юзера легко можно подсчитать в скрипте.

Автор: Setuper 1.3.2010, 23:31

Какие предложения по поводу параметров событий OnScriptStart, OnScriptStop и OnScriptRestart ?

Автор: Jaska 1.3.2010, 23:36

Хорошо бы к этому всему добавить OnScriptError

Автор: Setuper 1.3.2010, 23:55

Уже давно есть.

Автор: Otshelnik-Fm 2.3.2010, 20:07

Setuper - вот интересная http://mydc.ru/r/?http://dcpp.wordpress.com/2010/02/13/passive-mode-c-c-connections-and-nat-traversal/ про соединение 2х пассивных пользователей. Будет такое на RusHub-e? В адц протоколе такое возможно при использовании стронга.

Автор: Setuper 2.3.2010, 20:37

Технология понятна, однако для такого фокуса нужно чтобы пассивный клиент отсылал команду на соединение с пассивом, но NMDC клиент устроен так, что при соединении с пассивным он не будет ничего отсылать на хаб.

Хотя это можно обойти, предварительно запомнив режим клиента, отсылать всем пользователям хаба не пассивный режим, а активный. А при соединении пользователей сравнивать запомненные режимы. Эта идея летает уже достаточно давно. По всей видимости реализовать можно.

Автор: alex82 3.3.2010, 18:09

Цитата
OnScriptRestart


А это ещё зачем? Разве не достаточно OnScriptStart и OnScriptStop?

Не могу себе представить поведение функции , когда при рестарте в скрипте обнаружилась ошибка. Вызывать OnScriptStop? Или отправлять false в качестве аргумента, и вызывать OnScriptError?

ИМХО эта функция добавит мазохизма к и без того хитрозакрученному скриптовому API.

Автор: Setuper 3.3.2010, 19:33

Согласен. Событие OnScriptRestart не нужно.
Однако вопрос остаётся открытым. Какие параметры нужны в событиях OnScriptStart и OnScriptStop? Обойтись только именем скрипта?


Цитата
Не могу себе представить поведение функции , когда при рестарте в скрипте обнаружилась ошибка. Вызывать OnScriptStop? Или отправлять false в качестве аргумента, и вызывать OnScriptError?

Не совсем понял. При рестарте в скрипте происходит ошибка, тут же начинает выполняться событие OnError этого скрипта (если оно в нём есть). Если в этом событии ошибка, то скрипт останавливается, в противном случае скрипт останавливается или нет в зависимости от того что возвращает это событие. После этого уже вызываются события OnScriptError во всех остальных скриптах.

Автор: alex82 4.3.2010, 13:10

А зачем там что-либо кроме имени? Для ошибок есть OnScriptError.

Тут важно другое - чтобы функции вызывались так же, как и OnScriptError - без таймера.

Автор: alex82 14.3.2010, 3:18

У меня очередной feature-request:
Функция, возвращающая список настроек. Я думаю, это несложно реализовать.

Автор: Setuper 26.7.2010, 10:22

Назрел вопрос об улучшении в следующей версии. Вопрос такой: может ввести дополнительно умные параметры дабы избежать проверок, которые нужно обязательно делать?
Речь тут идёт о параметрах пользователя. Хочу сделать вот что: UID.iSlots = nil, а UID._iSlots = 0. Если не хочется проверять параметр на nil значение, используем безопасный параметр (с подчеркиванием спереди) с чётко определённым значением по умолчанию.
Стоит ли это сделать или это бредовая идея??

Автор: PomanoB 26.7.2010, 10:56

Стоит, ведь часто какой-нибудь параметр проверяется на nil, и ему присваивается дефолтное значение

Автор: Setuper 26.7.2010, 11:31

Возможно даже стоит сделать функцию, которой можно будет устанавливать значения по умолчанию для параметров. Например, установит значение по умолчанию для отсутствующего тэга как "n/a" или как "отсутствует", для того чтобы без проблем можно было писать те же самые приветствия с перечислением параметров пользователя.

Но тут опять же есть вопрос: можно же сделать глобальные значения по умолчанию для всех скриптов, а можно сделать значения по умолчанию для каждого скрипта в отдельности. Во втором случае, если сделать функцию установки значения по умолчанию, то при старте скрипта можно будет установить нужные значения по умолчанию для текущего скрипта, при этом в других скриптах ничего не сломается.

Может это всё очень надуманно и не стоит этого делать? Или же сделать? И какой из двух вариантов лучше сделать? (склоняюсь ко второму).

Автор: Nickolya 26.7.2010, 12:22

По-моему новых параметров плодить не надо, это уже не красиво получается. А с установкой по умолчанию идея хорошая, но нужно это делать для каждого скрипта индивидуально, что мне кажется заморочкой со стороны программы. Я бы сделал вот так:

Цитата
sMyINFO = $MyINFO $ALL Nick $ $$$$
iShare = 0 -- от 0 и более, без вариантов
sMode = "" -- обычно всегда указывается клиентом, но если нет, значит пустая строка
sDesc = "" -- всегда строка, если описания нет, то она пустая
sEmail = "" -- аналогично описанию
sTag = "" -- аналогично описанию
sConn = "" -- аналогично описанию
iByte = 0 -- тут если нет я так понимаю автоматом 0, пусть так и будет
sClientName = "" -- аналогично описанию
sClientVersion = "" -- аналогично описанию
iSlots = 0 -- если нету, лучше 0, лишних проверок меньше, да и ошибок будет меньше
iUsHubs = 0 -- аналогично слотам
iRegHubs = 0 -- аналогично слотам
iOpHubs = 0 -- аналогично слотам
iLimit = 0 -- аналогично слотам
iOpen = 0 -- аналогично слотам
iBandwidth = 0 -- аналогично слотам
iDownload = 0 -- аналогично слотам
sFraction = "" -- аналогично описанию


Таким образом мы всегда имеем значение в поле. В строковых параметрах понятно, если нет значения - то пустая строка, при конкатенациях не надо будет делать проверки на существование строки, а если, допустим, тег равен "", то понятно что он отсутствует. С булевыми переменными тоже лучше обходиться так же, если нет значения - то false, проверки все равно идут без сравнения (if tUser.bConnected ...). Что касается числовых значений, то лучше их перегонять в 0 при отсутствии, т.к. какая разница, ограничение в 0 или оно равно nil, с остальными параметрами аналогично. Я конечно напишу скрипт под каким угодно апи, но так я считаю будет проще всего.

Автор: Setuper 26.7.2010, 13:27

Цитата
iLimit = 0 -- аналогично слотам
тут есть нюанс. 0 - это означает скорость 0 kb/s, то есть у клиента тотальное ограничение скорости установлено. Это значение не может быть значением по умолчанию!


По поводу удаления всех nil значений для параметров, думаю что это не правильно. Тут в логике будет ошибка. Если пользователь клиента указал значение по умолчанию, а в скрипте для значения по умолчанию мы полагаем отсутствие параметра, то логика нарушается.
В частности nil значения нужны будут для принудительной установки параметров тэга.

Именно поэтому и были предложены тэги с подчёркиванием спереди, так тэги с параметрами по умолчанию.

Автор: Nickolya 31.8.2010, 3:25

Реквестую аналог параметра птоки

Код
iLoginTime    - User login time in seconds from 1.1.1970

Автор: Ksan 31.8.2010, 4:38

Тогда уж и пусть запоминает и выдаёт даты максимальной шары (вместе с самой шарой) и максимального количества юзеров (вместе с самим количеством) за всё время работы РусХаба с первого включения и всё то же самое - за текущую сессию.
Этого так сильно не хватало в Птоке.

Автор: Setuper 31.8.2010, 12:15

Цитата(Nickolya @ 31.8.2010, 4:25) *
Реквестую аналог параметра птоки
Код
iLoginTime    - User login time in seconds from 1.1.1970
Сделаю.

Цитата(Ksan @ 31.8.2010, 5:38) *
Тогда уж и пусть запоминает и выдаёт даты максимальной шары (вместе с самой шарой) и максимального количества юзеров (вместе с самим количеством) за всё время работы РусХаба с первого включения и всё то же самое - за текущую сессию.
Этого так сильно не хватало в Птоке.
Это планируется реализовать в пункте "Функция статистики и информации о сервере" TODO







Есть предложение добавить новую функцию типа Core.AddCmd(sCmd, sFunc)
Эта функция будет оптимизировать обработку команд, так как зачастую почти в каждом скрипте мы парсим команды в событии OnChat. При помощи этой функции можно будет добавлять команду и функцию, которая будет выполняться, если поступила данная команда. Наверное нужно сделать для каждого скрипта свой внутренний список, в который будут добавляться команды, и таким образом, команды с одинаковыми именами смогут существовать в различных скриптах и выполнять различные функции (при поступлении команды).

Введя такую функцию предполагается снять нагрузку на обработку события OnChat.

Пример:
Код
function OnStartup()
  Core.AddCmd("regme", "Regme")
end

function Regme(UID, tParams)
  local sPass = tParams[1]
  if sPass then
    AddReg(UID.sNick, sPass)
  end
end

function AddReg(sNick, sPass)
  ...
end


В данном примере в функцию Regme автоматически подставятся аргументы: UID пользователя и tParams - параметры команды
По умолчанию я думаю зашить префиксы команд + и !, и возможно следует сделать функцию, которая будет менять или добавлять префиксы (я пока что ещё с этой идеей не переспал).

Стоит ли это делать я на данный момент не знаю.

Автор: mariner 31.8.2010, 13:29

я щитаю, что стоит.

Автор: PomanoB 31.8.2010, 13:57

Ага, будет очень удобно

Автор: Nickolya 31.8.2010, 20:08

Есть подобная фишка в хексхабе, в верли тоже на команду отдельное событие. Я считаю что стоит сделать как с таймерами, т.е. функция типа
Core.AddTrigger("somecmd") будет возвращать айди события, а по событию будет вызываться функция OnTrigger(iId), при указании функции в Core.AddTrigger("somecmd", "SomeCmdFunction"), будет вызываьться функция, переданная вторым параметром. А вот передачу параметров в таблице tParams не считаю удобным т.к. они используются всегда по-разному (порой нужно взять параметры через пробел, порой нужна вся строка), поэтому можно просто передавать строку, идущую за командой.

Автор: Saymon 23.10.2010, 12:53

Илья, может добавить пару апи функций отключения хаба и рестарт хаба?

Автор: Setuper 23.10.2010, 14:10

Ок. Добавлю.

Автор: Saymon 23.10.2010, 19:44

Не знаю может на стороне луа как-то сделать, но в хексхабе есть такая функция: (добавление команды в !help )

Цитата
Hex.HelpString(iSection, sLanguage) returns a new object of type HelpString.
The HelpString class is initialized with two parameters:
iSection: 0 = Hub information, 1 = Commands for messages, 2 = Operator commands, 3 = reserved, 4 = Profile management, 5 = DC++ commands, 6 = Extra
sLanguage: a 2-letter language identifier (e.g. "EN", "RO", "DE", ect.).
http://mydc.ru/r/?http://hexhub.sourceforge.net/HexScript/helpstringclass.html

Может что-то подобное сделать тут? Думаю нужная вещь....

Автор: Setuper 23.10.2010, 20:36

По-моему чистыми скриптами всё это сделать легче, чем огород городить

Автор: PomanoB 30.10.2010, 9:34

Предлагаю сделать такую систему настроек для скриптов:

В скрипте вызывается функция, к примеру, Core.RegisterSettings("имя параметра", "значение по умолчанию")
А когда скрипту нужно значение этого параметра, он вызывает Core.GetSettings("имя параметра")

И сделать команды, например, пишешь в чат
!set <имя параметра> <значение>
и этот параметр принимает данное значение.

И, кроме того, надо что бы хаб при старте читал файл autoload.conf, в котором были бы перечислены те параметры и их значения, которые пользователь туда вписал, и хаб устанавливал бы их устанавливал.
Например:
frhb_botname "RusHubBot"
frhb_topic "Добро пожаловать!"
tw_menu "Twitter"
tw_botname "Twitter"
tw_out_time 15
и тд.

Это позволит очень удобно настраивать скрипты, даже не глядя в исходный код.
Пользователям не придется копаться в исходном коде и что-то там править с риском все сломать.

Автор: Setuper 30.10.2010, 10:07

Так а сейчас разве не так сделано?
В файле config.xml хранятся параметры, пользователь может их там изменить на своё усмотрение.
В скрипте есть объект Config.

Код
local sBot = Config.sHubBot -- получили параметр
Config.sHubBot = "NewBotName" -- установили новое значение для параметра


команду !set можно с легкостью реализовать скриптом

Автор: PomanoB 30.10.2010, 14:12

А, понятно.

Автор: Alexey 23.11.2010, 22:35

IPv6. Быть или не быть?

Автор: Setuper 23.11.2010, 23:08

А сильно нужно?

Автор: KT315 24.11.2010, 12:52

Мне кажется, когда действительно будет нужно, оно (IPv6) обязательно появиться big_smile.gif

Автор: DEN 007 17.12.2010, 4:40

Решил внести свою лекту и написать:

это скорей в категорию на потом.
Возможность объединения нескольких серверов в один хаб (кластер)

Автор: Alexey 17.12.2010, 15:32

Уже есть в первом посте.

Автор: Otshelnik-Fm 15.1.2011, 10:40

Голосовой и видеочат по принципу комфорт чата. Планы на это есть?
Или это возможно при соответствующей поддержке в клиенте?

Автор: mariner 15.1.2011, 12:40

Цитата
Голосовой и видеочат по принципу комфорт чата.

Ну если ты разработаешь новый протокол. Совмещающий в себе NMDC и коммфорт.

Автор: Nickolya 15.1.2011, 17:54

А чем плох скайп? (хотя сам и не пользуюсь)
Прекрасная система! Проще там запросить возможность создания серверов с общим чатом, списком юзеров и администраторами big_smile.gif

Автор: Setuper 4.3.2011, 15:42

Как сделать поддержку первой версии команды $UserIP ?

  1. Сделать только для ОПов (для тех, кто с ключиком)
  2. Сделать для тех, у кого она включена (включается из Lua так: UID.bUserIP = true)

Автор: Saymon 4.3.2011, 15:44

2

Автор: Setuper 4.3.2011, 15:59

Хотя есть параметр bInIpList, по которому отправляется ip адрес очередного вошедшего пользователя.
Может стоит только для таких пользователей разрешить отправлять на хаб команду $UserIP ? Хотя с другой стороны, у них итак уже показываются все ip и запрашивать у хаба ip адрес для какого-то ника нет необходимости.

Всё же наверное нужно сделать вариант 2 (Сделать для тех, у кого она включена).
При этом варианте можно будет разрешить как душе угодно.
Хотя наверное разумно вообще сделать возможность получения ip адреса для всех и без каких-либо разрешений, хотя так делать не очень хочется

Автор: Saymon 4.3.2011, 16:03

Setuper, я думаю простым юзерам не нужно видеть айпи адреса остальных. Или как минимум админа и/или операторов.

Автор: Setuper 4.3.2011, 17:25

Тогда есть вариант сделать событие OnUserIP, которое срабатывает при поступлении на хаб команды $UserIP от юзера. Если в событии возвращается true, то не отправлять ip, иначе отправлять. То есть, по умолчанию ip будет отправляться, а при необходимости можно запретить хабу отсылать ip адреса каких-то юзеров big_smile.gif

Автор: Saymon 4.3.2011, 17:33

не пойму, к чему такие сложности? Чем плохо то, что сейчас? eyes_droped.gif

Автор: Setuper 4.3.2011, 18:04

Хочу сделать поддержку первой версии команды $UserIP
С событием мне кажется будет лучшем вариантом

Тут не идёт речь об автоматической отсылке ip адресов при входе на хаб - это поддерживает вторая версия команды. Речь идёт именно о клиентском запросе ip адреса командой $UserIP.

Почитай описание команды $UserIP.

Автор: DEN 007 24.3.2011, 15:03

На будущее так сказать, сделать первый шаг для возможности на уровне хаба поддерживать заголовки, то есть расширить протокол, но это скорей на планы с adc. Думаю будет актуально. Через годик может и лидеры дц клиентов будут поддерживать данное расширение.

Перспективы применения широки, от определения домена с которого пришел юзер до определения юзер агента (клиента) прямо в заголовках. Выбора языка на котором отображать информацию на хабе и многое другое.

P.S. думаю нужно расширять протокол.

Автор: Alexey 24.3.2011, 15:36

Так это не по адресу, надо писать разрабочикам протокола ADC http://mydc.ru/r/?http://www.adcportal.com .
Подкинь посонам дровишек, а то давно не слышали: — Oh... these crazy russians!!!!1

Нахрена козе баян?

Автор: Setuper 24.3.2011, 23:34

Для начала нужно встроить adc. Плюшек, которые нужно сделать итак хватает big_smile.gif

Автор: Setuper 27.3.2011, 19:59

Очередная фича, которую хочется сделать: отлов ошибок (исключений) в функциях, вызываемых из плагинов, и отключение плагина, в котором произошла ошибка (в первую очередь это поможет определить произошла ли ошибка в ядре хаба или в каком-то плагине).
Таким образом, хаб не будет падать при ошибке в плагине, однако функционал отключенного плагина не будет доступен. Возможно нужно будет сделать какой-то отдельный плагин, при помощи функционала которого можно будет подключать и отключать остальные плагины.
При увеличении числа различных плагинов данная фича будет как нельзя кстати.

По поводу реализации: под винду всё прозрачно - ловится SEH исключением. С линуксом всё обстоит сложнее, ибо надо сигнал превратить в исключение да ещё и в определенном состоянии поймать это исключение. Возможно в случае линукса нужно пойти по стопам java реализации исключений и позаимствовать сишный код оттуда big_smile.gif

Автор: mariner 27.3.2011, 20:52

эм, но зачем, если можно реализовать обновленной версией сигналов. Той, которая потокобезопасная.

Автор: Setuper 27.3.2011, 21:01

Не ну как ты себе это представляешь?
Ну поймали мы сигнал, а что дальше делать? Ведь вся идея в том чтобы обработать исключение именно в определённом месте программы, где есть функционал для отключения плагина с ошибкой и после обработки продолжить работу хаба после вызова функции плагина не нарушая стек вызовов, а не где-то непонятно в какой функции и непонятно что после обработки делать. К тому же система принудительно килит процесс после обработки сигнала sigsegv.

Автор: mariner 27.3.2011, 23:26

Мб все-таки sigkill? Который 9ый.

Остальные сигналы можно подменить хендлерами.

Автор: Setuper 19.10.2011, 14:57

Хотелось бы обсудить новую фишку, которая планируется в ближайшей версии.

В свете внедрения протокола ADC возникла необходимость хранить совершенно произвольное число параметров пользователя. Другими словами, если в NMDC протоколе в команде $MyINFO постоянное число параметров, то в аналогичной команде INF протокола ADC число этих параметров в общем случае произвольно и, вообще говоря, не ограничено.

Сделав хранение произвольного числа параметров, сразу же возникла идея создания/установки параметров из Lua.

В итоге, через UID можно создавать и хранить свои параметры под свои нужды. Эти параметры будут жить в оперативке до момента дисконнекта юзера. Причём параметры будут сохранять свой тип данных. Кроме этого, при помощи данных параметров можно передавать данные между скриптами.

Пример:
script1.lua

Код
function OnUserEnter(UID)
  UID.param1 = 123
  UID.param2 = "123"
end


script2.lua
Код
function OnUserEnter(UID)
  print(UID.param1)
  print(UID.param2)
end
в скрипте script2.lua в параметре UID.param1 будет число, а в параметре UID.param2 будет строка, которые и распечатаются.


Так как данные между скриптами должны будут передаваться, то на типы передаваемых данных наложены ограничения, а именно: можно передавать только данные по значению, то есть нельзя передавать Lua таблицы, Lua функции и другие данные, передаваемые по ссылке. Возможна только передача (сохранение в параметрах) следующих типов данных: строки, числа, логические значения.

На данный момент в русхабе существует один параметр подобного рода (UID.sData), в который можно записывать какую-нибудь строку.
Теперь даётся возможность пользователю самому выбирать имя параметра, и расширяются возможные типы параметров.

Автор: Ksan 19.10.2011, 16:35

Код
UID.param2 = "Это тот, который вчера тут спьяну посылал всех и вся. С него глаз не спускать!"
big_smile.gif

Цитата
Эти параметры будут жить в оперативке до момента дисконнекта юзера

В принципе, и в базу их можно сохранять, или в файл.

Автор: ExC0tiC 20.10.2011, 8:18

Цитата
Эти параметры будут жить в оперативке до момента дисконнекта юзера

Я понимаю, что эта фишка ещё полностью не продумана. Поэтому вопрос - при большом онлайне, не будет ли забивать оперативку, и использовать для хранения значений SQLite будет не лучше?

Автор: Setuper 20.10.2011, 8:46

Если не хочешь забивать оперативку - не юзай эти параметры. Чтобы ничего не забивать можно вообще не юзать скрипты.
Параметры исключительно для удобства написания скриптов. А если не хватает оперативки, то может стоит её прикупить? big_smile.gif

Автор: Setuper 25.10.2011, 11:18

В новой версии (на данный момент 2.3.8[beta]) будет модифицирована система логирования.
В настройках уровни логирования iMaxLevel и iMaxErrLevel будут объединены в один уровень логирования iMaxLevel.

Номер уровня логирования может быть одним из следующих:

0 - FATAL
1 - ERROR
2 - WARN
3 - INFO
4 - DEBUG
5 - TRACE

по умолчанию будет выставляться: 3 (INFO).

Автор: DEN 007 25.10.2011, 14:39

Цитата
В итоге, через UID можно создавать и хранить свои параметры под свои нужды. Эти параметры будут жить в оперативке до момента дисконнекта юзера. Причём параметры будут сохранять свой тип данных. Кроме этого, при помощи данных параметров можно передавать данные между скриптами.


Автор: Ksan 25.10.2011, 14:53

Создавать копию предстоящих изменениям данных и процесс изменений производить только с ним, а на это время оригинал останется доступен другим скриптам. Как только копия претерпит окончательно изменения, она заменяет оригинал.
Как-то так..
Хотя, учитывая очень короткое врмя обработки данных (в том числе и изменения их), можно не париться вовсе.

Автор: Setuper 25.10.2011, 19:38

Русхаб работает в один поток, поэтому утверждение о блокировки изменений данных, пока с ними работает один из скриптов, - бессмысленное.
Реализация сохранения параметров куда-то - это уже на плечах самого скриптописателя.

Вообще говоря, эти параметры задумываются как временное хранилище, которое могут использовать все скрипты, поэтому о сохранении речи вообще говоря не идёт. Ведь например ip адрес пользователя (UID.sIP) мы же обычно не сохраняем, однако же его можно в какой-то степени считать тем же самым параметром, правда установлен этот параметр самим хабом, а не скриптом. Более того, внутри хаба параметр для ip или какой либо другой параметр в принципе хранятся одинаково.

Автор: Otshelnik-Fm 3.11.2011, 17:41

Ну на развитие врядли повлияет... - Предлагаю автору заполнить описание "Description" и "Publisher" - при просмотре в "управлении службами" винды или в утилитах типа "Autoruns" от sysinternals сразу бросается в глаза.

Автор: Setuper 3.11.2011, 18:21

Так вроде в последней версии добавлено

Автор: Otshelnik-Fm 31.1.2012, 13:44

Незнаю подходит ли вопрос для этой темы.

Setuper - ведется ли статистика сколько серверов rushub установлено?

Если встроить инструмент (по умолчанию вкл в конфиге) который будет передавать на главный сайт http://rushub.org/ информацию, что вот по такому-то ip - работает rushub (таким образом на главной можно сделать список хабов работающих на данной платформе, страну и город...). Я не говорю о модуле пингера для хаблиста, а о функционале зашитом в сам софт.

Тут конечно могут возникнуть непонятки от админов - но если админ хороший (читающий мануалы), то он увидит что для выключения функции прописать в конфиге... Но если он выключит - то ему хуже - его хаб пропадет с страницы списка хабов сайта rushub.

Автор: Setuper 31.1.2012, 13:49

А что это даст? Лишний исходящий трафик да и только.
Не думаю, что это хорошая идея.

Гораздо полезнее сделать запрос новой версии, хотя делать это я пока не собираюсь.

Автор: DEN 007 31.1.2012, 22:55

Цитата(Otshelnik-Fm @ 31.1.2012, 14:44) *
Незнаю подходит ли вопрос для этой темы.

Setuper - ведется ли статистика сколько серверов rushub установлено?

Я предлагал подобным образом отлавливать ошибки, то есть если в файле лога есть ошибки они отправляются на багтрекер(куда угодно, например в специальную форму на сайте русхаба) и разумеется можно это в конфиге отключить, но поумолчанию включено. (Отправлять не только логи но и информацию о системе не конфиденциальную)

P.S. Просто большинство админов ошибки софта отправлять не будут, а так отлавливать ошибки будет полегче.

Автор: Setuper 1.2.2012, 9:01

Не хочется делать троянское поведение программы big_smile.gif

Грамотнее сделать покрытие кода автотестами.
Вот только разберусь с adc, и займусь написанием юниттестов для русхаба.
Нужно будет сделать покрытие тестами хотя бы процентов на 50, тогда вероятность возникновения ошибок в релизных версиях будет минимальной.

Автор: DEN 007 1.2.2012, 18:19

Цитата(Setuper @ 1.2.2012, 10:01) *
Не хочется делать троянское поведение программы big_smile.gif

Ну гуглу можно))

Автор: Setuper 16.3.2013, 15:21

На данный момент в Lua плагине все api функции отсылки сообщений (Core.SendToUser, Core.SendToAll и тд.) отсылают сообщения сразу.

Если на хабе нету скриптов, которые отсылают сообщения, то в CDM отладчике можно наблюдать "пульсацию" хаба. То есть, сообщения кэшируются и кэш отсылается через интервал, который задаётся в настройках. Таким образом производительность хаба увеличивается.

Единственное исключение - это сообщения чата и pm, которые всегда отсылаются сразу, а не через кэш, дабы у пользователя не складывалось ощущение, что хаб тормозит.

В целях оптимизации рассылки из Lua скрипта предлагается сделать следующее:
все сообщения, кроме чата и pm рассылать через кэш.

То есть, если сообщение с ником:

Код
Core.SendToUser(UID, nick) или
Core.SendToUser(UID, nick, nick) или
Core.SendToAll(UID, nick) или
Core.SendToAll(UID, nick, nick) и тд.
то такие сообщения отсылаются сразу.

Если сообщение без ника, то считать, что это сообщение не чата и не pm, и рассылать его через кэш. В последнем случае сообщение может доходить до адресата не сразу, а в пределах интервала рассылки кэша.

Таким образом, сообщения вида: Core.SendToUser(UID, "Привет") не сразу будут доходить до пользователя.
Более того, если написать Core.SendToUser(UID, "<Bot> Привет") то сообщение так же отправится через кэш и может дойти не сразу.
Сразу будут доходит следующие сообщения: Core.SendToUser(UID, "Привет", "Bot")


Думаю, что игра стоит свеч big_smile.gif

Автор: DEN 007 16.3.2013, 16:30

Цитата(Setuper @ 16.3.2013, 16:21) *
Таким образом, сообщения вида: Core.SendToUser(UID, "Привет") не сразу будут доходить до пользователя.

Как я понял задержка будет такая какую я укажу, тогда вопрос какая оптимальная задержка? То есть кеш в основном распространяется на всякого рода поисковые запросы и т.д.?

Автор: Setuper 16.3.2013, 17:53

за это отвечают параметры: iTimerServPeriod и iTimerConnPeriod
и менять их не рекомендуется

Автор: Saymon21 17.3.2013, 23:47

Сейчас _TRACEBACK = debug.traceback включает стек-трейс только для текущего скрипта. Думаю стоило бы устанавливать стек-трейс и для функций перезапуска/запуска/etc скриптов.
Попробовал в другие скрипты так-же писать данную конструкцию, например Core.RestartScript и Core.StartScript в сообщении об ошибке не показали трейс.
И ещё одно предложение, сделать ещё одно возвращаемое значение в виде таблицы для Core.RestartScripts, на случай если скрипт запущен, но при перезапуске произшла ошибка. Возвращать имя скрипта и сообщение об ошибке.

Автор: Setuper 18.3.2013, 10:15

Функции Core.RestartScript и Core.StartScript отлавливают на данный момент исключительно синтаксические ошибки.
Runtime ошибки они не отлавливают.

Возможно отлов runtime ошибок этими функциями в событии OnStartup будет реализован big_smile.gif

Автор: Alexey 17.6.2014, 20:44

1. Будет ли добавлена функция Core.GetBots()?
2. Хочется, но не можется сделать аналог птоковой функции RegMan.AddReg(sNick, iProfileNumber): DEBUG [sock:512] DcConn(177): Bad state in MyPass :( Можно ли тут что-нибудь сделать?
3. Надо что-нибудь сделать для приходящих ответов на активный поиск: либо отдельное событие (по типу птокового UDPSRArrival), либо признак какой-то в OnSR добавить. OnAny ради этого дёргать не слишком оверхедно?
4. Функции Core.StartScript, Core.RestartScript и Core.StopScript возвращают nil, но не сообщают об отсутствии файла скрипта. Так и должно быть?
5. Где функция обновления списка скриптов? Пока приходится удалять ненужные скрипты из списка, пытаясь остановить их повторно после удаления файла.