/rеквестую сабж на qt в режиме - сервер-модра (чтобы мона было без гуи пахать). ну и да - кроссплатформенность тоже не помешает
Setuper
Респект Илюха!!!!!!! Прям ЛЕТАЕТ все!!! Удачи в дальнейших разработках
IP адрес 0.0.0.0 означает любой доступный ip адрес на твоей машине. Хаб пока не проверяет занятость 413 порта, поэтому проследи за этим!
Что касается ADC, то всё же некоторую, хоть и малую оптимизацию этот протокол, по сравнению с NMDC, содержит. Хотя бы в том, что ключевые слова команд короче (не более 4 символов), следовательно меньше передаётся в сеть, следовательно меньше трафа потребляется, следовательно чуть быстрее всё передаётся. Однако, это практически не возможно заметить
Радует, что караван идёт.
ай-я-яй. какой молодец илья! Еще бы таки птоковое апи скриптовое (желательно расширенное), чтоб мона скрипты прикрутить и про упертого PPK можно забыть
В ближайшее время думаю прикручу lua
Тут 2 задачи: lua и mysql.
Сам хаб уже готов. Остаётся сделать дополнительные (приятные) вещи))
Хотя ещё много что нужно сделать: баны, антифлуд, и тд.
Хотелось-бы отправлять хабтопик после мотд, а не до.
2Setuper:
По возможности - хорошо бы заглушку на время, по IP и диапазону IP (это особенно важно по расплодившимся динамическим адресам), и тихую (чтоб заглушенный не знал, что заглушен) - это тоже важно для борьбы с рекламщиками - спамерами с динамическими IP.
Или хотя бы по IP на время, как минимум.
Это в сочетании с киком уже позволит вполне успешкно жить хабу даже без скриптов.
все работает, люди заходят, а вот как команды управления использовать никак не пойму.
Спасибо Setuper! Сегодня вечером перенесу основной хаб на твой.
Без скриптов перенесешь? Там же нет ещё Луа.
И нет никаких способов воздействия на юзеров.
И регистрации.
Если я правильно понимаю.
По крайней мере, хелпа никакого нет и Сетапер не говорил.
Луа - ну я думаю недолго с ним. Просто интересно в бою посмотреть. Так случилось что мой хаб - тест почти всегда (да простят меня пользователи). Регистрация - в локалке не так уж и много пользователей. Так что не так страшно. Хелпа тут не надо - все есть в hub_config.dat
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... вобщем всё отобразилось.
Во общем штука хорошая, а если за неё и взяться, то думаю что в будущем данный сервер будет самым лучшим из всех ДЦ серверов. Учитывая что мы знаем что требуется видеть в меню администрации и в меню пользователя. Я лично, когда данный хаб станет лучше, я перейду на него+можно даже будет писать что бы ты хотел видеть на хабе и это возможно реализует. Во общем Желаю отличного развития. Я думаю, когда сделается профили там уже пойдёт легче... да и вообще чем больше сделана тем легче, смотри через год уже по всему миру будут пользоваться им!!!!!
P.S. Если чем смогу помочь то помогу, хотя я бесполезен=(
p.s. - предлагаю закрепить первый пост (он нужен на остальных страницах тоже)
Смотрю в архиве libmysql.dll и после запуска db_config.dat появилась. а как в базу записывать? - lua держит?
Прикрепил.
К базе данных пока подключения нет. Это только подготовительные работы.
Вот ещё вопрос назрел... Делать ли систему подключения к хабу сторонних dll библиотек, так называемых плагинов? То есть чтобы другие с++ программисты могли написать свой дополнительный плагин, запихнуть в dll и подключить к хабу.
И сделать ли lua как плагин (dll библиотеку)?
Идея: реализуй возможность линковки двух и более хабов.
Рунет тебя не забудет.
Хорошая идея. Возможно попробую реализовать позже, когда хаб будет более стабильным и будет подключены бд и lua
Провёл тестирование на вместимость списков (хеш-таблиц) до 10000 пользователей
так для чего libmysql.dll нужна?
может не ндо, это, вэбсервер то?
есть отличные вэбсервера. нужен тока mysql.
Лично меня бы устроил обычный GUI Не хочется (да и не можется) возиться с вебом, проблемы на серверной стороне (хаб у меня удаленный на линуксе).
В 53 посту ссылка (интересно она отличается от версии 1.0.3 в 1 посте?) - работает отлично. Багов не замечено. От себя могу назвать стабильной версией .
Веб сервер апач - чем он вам не нравится? ( я против когда все в одном).
В 56 посту вопрос открыт, и еще один вопрос: Как свернуть в трей консоль хаба? - эта функция нужна.
И как запустить rusHub как системную службу?
По поводу линковки - было бы неплохо. Также как и управление через веб или icq
Итак, по порядку.
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 (у меня установлен, и отлично работает).
предлагаю убрать все предыдущие версии иначе щас начнётся великая путаница! Думаю что в теме должен присутствовать только последний релиз!
Кстати о логах... как насчет опциональной возможности вести лог гл.чата самим хабом?
думаю не стоит. Все-таки лучше не тащить все в хаб, а сделать нормальную систему подключаемых модулей.
Система логов нужна, это однозначно, в плане падений, ошибок, работы и всего прочего что касается работы всей системы. А вот уже логи чата или что-то такое дополнительное можно делать скриптами, именно для того чтобы было проще изменить все под себя.
делион. начинаем считать ресурсы. не все могут позволить, чтобы хаб вел 100500 логов и делал это сам. для логов давно созданы базы данных. Т.к. логи чата оно должно типо "при входе" показывать? Если чат тактивный - ресурсов будет есть достаточно, а в базах данных это все нормально будет решаться.
Пока речь идёт о логировании действий хаба для обнаружения багов, а не чата. И логироваться они будут на текущую сессию работы хаба.
Конечно для логирования чата оптимальнее использовать бд, однако, думаю, что нужно реализовать обе возможности по выбору либо запись в бд, либо запись в файл, а администратор уже будет сам выбирать подключать ли ему бд или нет это в идеале, однако хз, возможно будет только через бд, посмотрим...
Оооооо... появилось API!! Шикарно, шикарно! Ждём остальных вкусностей.
Хаб будет распознавать реконнект юзеров?
По поводу хабтопика, я в прошлый раз недостаточно ясно изложил своё пожелание, прошу прощения. А хотел я, что-бы сообщение хабтопика было последним сообщением, которое отсылается пользователю при входе на хаб. После Сообщения Дня, статистики, истории последних сообщений и т.д и т.п., после всех скриптов, обрабатывающих вход, самым последним. Какая разница? IMHO, это логично. А во-вторых, я к этому привык. Надеюсь на понимание.
PS: Предлог "посредством" пишется слитно.
Класс! А когда будет версия с луа уже??? Пока от себя хочу пожелать на будущее для луа: чтобы была отдельная папка libs которая создается если ее нет при запуске хаба и из нее подгружаются либсы для скриптов по умолчанию, это чтобы не было путаницы с библиотеками. И по поводу апи: когда будет апи настроек хаба мы тут же сделаем веб-интерфейс, обещаю! И я надеюсь имена функций меняться не будут, а то будет большая путаница?! Кстати, как вам идея общего веб-интерфейса для хабов на нашем портале (кому лень ставить апач и скрипты на него), надо будет только закинуть скриптик в свой хаб, настроить там права и ввести имя и пароль пользователя имеющего права на изменение настроек (может конечно это дурацкая идея)?
Не выкладываю версию с lua плагином, только из-за того, что на данном этапе (этапе разработки) api функции могут меняться.
Когда будет окончательное согласование и ясность, при достаточном количестве функций, тогда и выложу либу lua.dll и новую версию хаба
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). Кстати, символ | на конце сообщения также уже отсутствует.
Ну вот... Не удержался и раскрыл некоторые фишки
Что касается папки libs, то это я сделаю
По поводу функции реконнекта, то это реализую чуть позже. Пока это не так уж и важно.
1.
По поводу совместимости можно будет написать такой же скриптик, как я писал для быстрого перевода скриптов, ну или руками переводить, или возможно написать конвертер.
Я не повторяю api птохи, так как считаю, что некоторые вещи там сделаны не лучшим образом. Всё же когда хаб работает быстро - это радует глаз! Поэтому всё ради оптимизации.
реквестую юникс сервию!!1111111 Я хотеть это!
Вообще шикарный апи. А возможно как-нить реализовать функцию обращения к другому скрипту? Допустим поменять какие-то значения в таблице... и еще можно ли сделать чтобы Core.SendToAllWithoutNick(sNick, sData) принимала так же tNick тоесть таблицы с никами, сама проходила по ней и отпрвляла всем кроме этих пользователей?
Функцию обращения к другому скрипту реализовать конечно можно, однако, есть одно но. Чтобы найти другой скрипт нужно будет пробежаться по всем скрипам, что является далеко не оптимальным решением. На дынный момент все скрипты хранятся в векторе. Для того, чтобы находить скрипт за одну итерацию нужно будет сделать хранение всех скриптов в хеш-таблице. Пока что я этого делать не буду, однако, предложение дельное и я обязательно реализую это
Что касается предложения по поводу функции SendToAllWithoutNick, то тут тоже не всё так просто, однако, опять же возможно и я постараюсь сделать, хотя и не сейчас, а чуть позже
Сделать надо ещё очень много...
Ну окей) главное запиши в ToDo потому что первого очень нехватает ..
Отличный хаб. Ребятки-разработчики, я за Вас помолюсь. Дай Вам Бог всем самых лучших идей и жизненных успехов. RusHub - удачи тебе!!!
По-моему актуально (или маленький реквест): в функцю OnUserConnected(sIP) добавить еще один параметр (или два), в котором будет передан адрес на который заходит юзер (еще одним параметром можно сделать порт на который он заходит, хотя это и не очень обязательно), либо же сделать чтобы это значение можно было получить вызвав функцию что передает дополнительные параметры пользователя. И надеюсь функция что возвращает доп. параметры будет работать как с ip, так и с ником юзера, к примеру данная функция (OnUserConnected), где мы знаем только айпи. Все это хочется чтобы знать с какого порта и адреса заходит юзер, чтобы, к примеру, сообщить ему что он зашел на старый адрес который больше не поддерживается или же просто для статистики
И еще хочу спросить, не надо ли функции апи, что вызываются по событию (они же ивенты, events), поместить в отдельную таблицу, к примеру Api, чтобы функции выглядели примерно так: Api.OnUserConnected(sIP), не будет ли это оптимизацией выполнения скрипта?
Все остальные замечания к месту, надеюсь разработчик (он же Илюха) не захлебнется в наших запросах и все сделает как надо, еще раз удачи!
P.S.: может уже пора открывать ветку на форуме для хаба?
Думаю как только появится "очерченая" версия (с api минимальным) можно смело открывать ветку
Что касается 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.
Поэтому все предложенные идеи бракуются
Что касается отдельной ветки, то пока ещё рано
Насчёт портов сделаю.
Насчёт ip адреса и ника в параметрах глобальных функций, решил сделать более оптимизированно, объясню чуть позже.
Насчёт веб интерфейса не совсем понял. Можно по-подробнее?
Насчёт библиотеки: библиотеку lua.dll я собираю собственную, потому как в файле исходников luaconf.h нужно прописывать собственные директории scripts и libs, так как по умолчанию там прописана директория lua, поэтому если использовать стандартную библиотеку lua5.1.dll, то скрипты и библиотеки нужно будет помещать в папку lua, а не в папки scripts и libs соответственно, что не удобно.
Однако, стандартные библиотеки отсюда
Поэтому с совместимостью всё путём Стандартные библиотеки нужно будет качать отсюда:
Стандартные библиотеки для vs9:
lua5_1_4_Win32_dll9_lib.zip ( 105.27 килобайт )
: 4
Хехе Сделал ещё круче. Не нужно никаких дополнительных библиотек. Я просто переименовал свою либу в lua5.1.dll, и теперь она подцепляется любыми либами, скаченными с вышеупомянутого сайта Я что-то сразу не додумался до этого))))
В общем всё путём. Проверил luasql пашет
Спасибо, ждем информации Про библиотеку спрашивал чтобы знать как дополнительные длл будут существовать, будут ли они подходить без применения напильника, получается что так, значит просто класс!
Ну да. Можно сделать всё, что угодно. Все настройки будут храниться в базе данных откуда их можно модифицировать хоть через что. Хоть через сайт, хоть через прогу.
Адреса хаба я думаю будет не достаточно. Нужно будет ещё настройки бд (хост, юзер, пароль и название базы).
Не ко всем базам данных можно конектиться из внешки, тут можно придумать доп. причендалы, но это уже моя заморочка, опять же сделать можно все что угодно
Потом вопрос: вот лежит в базе данных настройка, она берется оттуда только при запуске (или при обновлении настроек) или же каждый раз мы получаем эту настройку? К примеру лимит по слотам, в базе данных установлен в минимум 5 штук, мы каждый раз при входе юзера извлекаем настройку из базы данных???
Нет. Настройка загружается один раз, при старте хаба. Однако, предусмотрена функция перезагрузки. Поэтому можно написать dll библиотеку, которая будет работать с настройками, и функция из этой dll библиотеки сможет вызываться функцией из php. Я над этим ещё работаю.
То есть, мы меняем что либо средствами php и после изменения вызываем функцию php, которая привязана к дополнению (дополнения (dll либы) подключаются в файле php.ini, например как это делается для бд, extension=php_mysql.dll). Наша библиотека дополнения подгружена как дополнительный плагин хаба, и будет перезагружать только что изменённую настройку.
Идея потрясная и достаточно оптимальная
Кстати, на данный момент реализовал определение мак адреса пользователя, однако, будут определяться только маки пользователей, которые подключаются к хабу напрямую, а не через шлюз. Для остальных пользователей переменная мак адреса будет содержать строку "n/a".
В общем мак адреса будут определяться только в локальных сетях с соединением напрямую (не через шлюз)
Ну за шлюзом то никак и не определить, а вот то что ты сделал в локале это тебе +10!
Ну в локалке тоже могут быть шлюзы. Например, шлюз сегмента. В таких локалках мак адрес будет определяться только в том сегменте, в котором находится хаб.
Я сделал определения мака, а будет ли оно нужно будет видно позже.
Ну.. Очень круто это всё! Желаю Setuper тебе времени свободного побольше . Последняя версия работает стабильно. Только вот заметил я что у меня только 63/64 человека подключено - уже 5 дней подряд. Ни больше и не меньше. ..
А в логи смотрел? И сам перезаходил на хаб. Попробуй другим клиентом войти и проверить увеличивается ли число.
Как насчёт ADC версии проекта?
Не вижу особого смысла в переходе на adc. Возможно в будущем, когда он станет более распространён.
Ущё раз выражаю огромную признательность за разработку RusHabа.
Вопрос:
Можно ли реализовать функцию, которая позволяла бы в MOTD (в виде приветствия)
отображать Ник присоединившегося пользователя, его IP, количество пользователей на хабе,
ну и шару подключившегося?
Это все можно будет я полагаю сделать с помощью lua
м-м-м-м... Буду ждать с нетеРпеньем!!!
Да, ник и другие параметры в сообщении дня можно будет сделать при помощи скриптов.
Отдельная ветка разработки adc... Возможно позже.
1. Интересно, реально ли при установке хаба (хоть Птоки, хоть РусХаба) вместе с хабом из одного комплекта поставить и библиотеки? Подобрать комплект минимальный (или максимальный ) библиотек и сразу пусть ставятся.
2. Ещё больше интересует такая же возможность для линуха, ибо я до сих пор не могу добиться, чтоб владелец сервера почесался и поставил хотя бы LFS...
3. Исходя из этих 2-х пунктов, - нельзя ли приделать к РусХабу библиотеки? И если будет сделана версия для линуха, то линуховые библиотеки..
О каких библиотеках идёт речь? Я что-то не понял.
О библиотеках для скриптов? LFS, mysql и тд?
Да. Для погоды, PX-control, Юзер-инфо и т.д.
А что так сложно эти либы положить в папку libs?
Уважаемый Setuper , а бан IP диапазонов тоже будет реализовываться скриптами или как в Ptokax? (или я слишком спешу?)
P.S.
RusHab отработал трое суток без каких либо проблем. Сутки на версии 1.0.4 и двое суток на 1.0.5. Но может проблем не было из-за малого кол-ва юзверов? (10 человек в режиме теста).
Всё будет, но со временем.
Да, проблем нет именно из-за малого количества пользователей, однако, я вроде нашёл ошибку))
А как "оперативно" - без перезапуска RusHuba сменить топики (sTopic) или (sHubTopic)?
В первом посте:
Lua API функции:
2. Core.SendToAll(sData)
3. Core.SendToAllWithoutNick(sNick, sData)
Мне кажется, либо в функции №3 слово Without надо заменить на With или From, либо не мешало бы пояснить смысл последней функции. Иначе не пойму, почему называется "БЕЗ_ника", а ник все же есть, а предыдущая функция как раз реально без ника (и без всяких уточнений в названии).
ПослатьВсемКромеНика(Ник, Данные)
А так понятнее?
да все ясно же! функция отсыла всем и функция отсыла всем, кроме
Как Алексей показал - на русском - так понятно.
А вот английский вариант - неправильный, без комментариев не понять.
Ну раз теперь объяснили, так тому и быть.
Хотя можно было бы и так:
Core.SendToAllExceptNick(sNick, sData)
Тестил на онлайне в 1,5к. Память хавается логами просто ужасно! Тем не менее хаб летает. После пары минут работы вылезла ошибка переполнения буфера в клиенте.
Думаю сделать настройку для уровня логирования, чтобы можно было снизить количество логирующихся событий или вовсе отключить лог.
Думаю глюки именно из-за больших логов, точнее из-за огромного файлового потока логов.
Для того, чтобы хаб не ел процессорное время служит параметр настроек iStepDelay. Когда на хаб нет нагрузки, хаб пробегает циклы очень быстро и из-за этого ест процессор. Устанавливаем параметр iStepDelay = 10 (это означает задержку на каждом цикле в 10 мсек), и хаб не есть процессорное время. Можно варьировать этот параметр и тем самым загружать или разгружать хаб. Однако, увеличение этого параметра ведёт к замедлению действий. Самым быстрым действиям соответствует 0 в этом параметре!!!
добавились 2 параметра -
iStartPing = 300
iPingInterval = 60
Что они задают?
Илюх, стесняюсь спросить, название хаба окончательное?
Ага. Рад выслушать все предложения по поводу названия и не только
Ну давайте тогда завтра в 10 по мск на хабе встретимся и обсудим.
Название Отличное - RusHub
создал опрос))
Уважаемый Setuper
Вот http://mydc.ru/index.html?showtopic=401&view=findpost&p=21903 написал для чего и как
СПАСИБО ЗА ПРОЕКТ!
Удачи Вам! Все работает отлично. На сегодняшний день - ошиПков нет
А смысл в этом ответе? Не хочешь - не отвечай
Как раз смысл в опросе мнений, нравится ли название или нет, - есть. А вот смысла писать не нужный никому ответ, который является не однозначным, как раз нету. Повторяю, тем, кому всё равно, предлагаю не голосовать или посмотреть результат, лишившись голоса))
Вопрос "тупого" - как выставить минимальное ограничение по шаре в 5 Гб
iMinShare = 0 - какое тут число указать? чет к вечеру голова кругом идет... Чувствую что 5 ...
iMinShare = 5368709120 - это 5 Гб (5368709120 байт)
После того, как будет сделана веб-морда, можно будет в ней сделать текст-боксы с выбором единицы изменения минимальной шары (как в птохе). А пока что приходится выставлять в байтах.
2Delion: вот именно, что сколько людей, столько и мнений. Кто-то считает этот опрос абсурдным, а кто-то нет, поэтому не нужно лишний раз флудить: не нравится - не голосуй!
русские горки( russian hill hub ,RusHill )или русская пуля из-за скорости работы =) p/s( К@пит;-)шка )
Я за текущее название. Очень патриатично даже.
p.s. хаб работал на автопилоте пока я путешествовал - ни одного вылета (v_1.0.5e).
У меня есть следующая идея: хаб - это просто сервер работающий на nmdc протоколе, а все другие возможности реализуются плагинами. Плагины могут взаимодействовать между собой, и каждый плагин имеет собственные настройки.
Возможные плагины:
Lua
Mysql
Commands
Bans
Profiles
Unflood
Стоит ли сделать так, или лучше запихнуть это всё как обычно в хаб?
Просто если делать плагинами, то можно будет выбрать то, что нужно. Для больших хабов можно будет исключить некоторые нагрузочные плагины. Те, кто не захочет юзать бд, смогут отключить плагин и хранить настройки в файлах.
А почему бы не всунуть это всё в сам хаб, чтоб всё отлажено было и проблем в случае чего не возникало. Но и чтоб была возможность полностью отключать что надо допустим правкой конфигов каких-то, но чтоб не более смены 0 на 1.
Присоединяюсь к dimetrius. Так будет проще конечному пользователю
По логике "конечные пользователь" должен быть админом, и если он не в состоянии подключить плагин то это извините "говноадмин" и проблемы лично его. Я за то чтобы оставить в хабе только одну поддержку nmdc поскольку это позволит другим прогерам писать свои плагины, под свои нужды, возможно даже лучше чем будут задуманы сейчас.
Голосую за модульность.
Интересно, модуль для перла или питона напишет кто-нибудь? Или птока-совместимый луа? ;)
Плагин перла или питона я уверен можно будет реализовать.
Что касается птока-совместимого lua, то тут существует несколько противных факторов (лично с моей точки зрения): использование таблицы tUser считаю нагрузочным фактором, хоть разработчики и попытались убрать из ней большинство полей. Разделение всех api функций по разным таблицам также непонятно, лучше запихнуть всё в Core, так будет легче начинающему программисту и так можно будет одной строкой оптимизировать эту таблицу:
Мне интересно как же между собой плагины будут взаимодействовать? Насколько я знаю напрямую взаимодействовать у них не получится, если только как-то через хаб.
Ждем-с описание API для плагинов если таковой имеется!
Что значит напрямую взаимодействовать не получится? Взаимодействие сводится к использованию функций другого плагина. Для этого в другом плагине строится абстрактный механизм. И именно эту абстракцию используют плагины для своих нужд. Через абстракцию будут вызываться нужные функции, которые даже не нужно будет описывать и линковать к плагинам и хабу, они будут доступны после подключения соответствующих плагинов к хабу. Естественно плагин сначала убедится, что нужный для работы функции плагин подключен, и только после этого будет вызывать функцию.
Описание api для плагинов приведу, возможно, позже, а может и в ближайшее время.
Это скорее будет не api, а методика по созданию плагинов с соответствующими заголовочными файлами абстрактного механизма хаба.
Для описания методики, наверное будет разумно создать в разделе других языков программирования статейку. Там же можно будет разъяснить принципы наследования и другие понятия языка с++.
Как продвигается разработка? что-то 2 месяца тишина...
Разработка продвигается. Сейчас разрабатывается большой блок (настройки + профили + mysql)
Увидел, что в теме новые сообщения, последний ответ Сетапера, и уже приготовился ставить/смотреть/тестить русхаб... а тут такой облом ;)
Сейчас самая проблемная часть проектируется. Как только я её сделаю, дальше будет намного легче и быстрее идти процесс.
Успехов. Что тут еще можно пожелать то?
Хотелось бы, чтобы еще одна "фиговинка" была реализована.
В настройках прописывается ник админа и ему бы приходили всякие собщения которые приходят опам (с ключом то бишь) но даже если в настройках этого ключа у него нет Хм.. Вроде доступно объяснил?)
Ага. Реализация функционала операторов не будет привязываться к ключикам))) То есть все настройки зависят только от профиля, но никак не от какого-то атрибута профиля.
Молодцы! Стабильно сервер работает - 100%!
Работой серверного ПО под названием -=RusHub=- очень доволен!
С новым годом. Думаю что скоро надо будет выделить подфорум "Русхаб и скрипты для него". Ну или что-то похожее. Продолжаем тестирование
не указанно в каких единицах интервал для создания таймера!
Вопрос: Когда будет добавлена система банов, киков, предупреждений и заглушек? )
я сейчас работаю над модулем банов. скоро выложу основу может кто то её доработает если Илюха одобрит))))
Наверно глупая просьба, но все же... можно ли написать какую-либо таблицу соответствия функций PtokaX и RusHub ?
Совсем хорошо будет если будет какой-нибудь конвертер наподобие того что переводит скрипты для PtokaX с API на API2...
Или там не настолько много отличий и переделка скриптов вручную не займет много времени при использовании только описания функций в первом посте этой темы?
Все предложения и пожелания думаю стоить тоже отделить в отдельную тему!
когда таки будет unix-версия
Для unix версии нужно время.
Уже забито шикарное апи для скриптов, уже потом делайте что хотите
Когда будет возможно добавлять текстовые файлы, содержимое которых будет выводится по команде, как это сделано в PtokaX?
В принципе данный функционал можно реализовать с помощью скриптов.
Однако, если нужно, я могу встроит это в хаб.
автор предыдущего соообщения и сам справился с этой задачей))))
Хм, вопрос не по хабу а по форуму. может стоит разделить скрипты и модули? т.е. отдельно ветка скриптов отдельно ветка модулей?
Не могли бы вы добавить аналог функции Core.SendPmToUser?
в русхабе намного продвинутый аналог этой функции содержится в функции Core.SendToUser(UID/sToNick, sData, sNick, sFrom)
UID/sToNick - UID или ник пользователя, которому хотим отослать сообщение
sData - само сообщение
Если указан параметр sNick, то сообщение будет отсылаться в чат от этого ника
Если кроме параметра sNick указан параметр sFrom, то сообщение будет отсылаться в приват от пользователя sFrom, с ником в сообщении sNick.
Для того, чтобы отсылающий и ник в сообщении совпадали, нужно чтобы совпадали параметры sNick и sFrom.
Пример:
насчёт обсуждений понятно, а склад готовых?
Ну пока что модулей почти нету, поэтому их можно выкладывать пока что в одну тему.
1. Хочется аналог, причем достаточно большой Птоховской команде !getinfo
2. Доклад обо всем админу (ник его указывать надо будет) или опам - но все, наверно, будут не в восторге. Все - имелось ввиду, как незаход на хаб по какой-либо причине: будь то маленькая/большая шара, некорректный ник и т.д. и т.п.
3. Эм.. даже не знаю как и написать правильно.. Нохочется, чтобы бан поставленный юзером более высоким рангом не смогу бы отменить с нихшим рангом., и так про другие команды..
4.Что-то еще в голове вспоминалось. как вспомню-напишу))
По пунктам:
1. А как на счет вызова функции другого скрипта с заданными параметрами? Реализуемо? Опять же для модулей будет вполне полезная штука
2. Как реализуется вызов апи функций скриптов? Хаб знает какие находятся в скрипте и не пытается вызвать не существующую функцю? Если не так, тогда может стоит знать какие функции имеются в скрипте и вызывать по событию только те скрипты что имеют необходимую функцию.
3. Мне кажется стоит умное управление майинфо, для начала парсить его, сделать список разрешенных клиентов, как в птоке, сделать опцию отсечения левых клиентов, сделать опцию кика клиентов с левым тегом который не парсится, позволить как в птоке убирать из тега разные части, проверять хабом новизну майинфо и если после всех исключений оно не меняется - не слать всем юзерам. Таким образом мы немного убираем нагрузку на сеть
Пока вроде все, может потом еще что придумаю.
FallenAngel, пункты 2,3,4 реализуются скорее скриптами, пункт 1 так же можно возложить на скрипт, не все же пихать в хаб
FallenAngel, всё это реализуется скриптами.
Nickolya, почти всё так и сделано.
1. Не реализуемо из-за того, что у скриптов разные глобальные окружения.
2. Естественно так и реализовано.
3. Парсить MyINFO возможно стоит. Списки разрешённых клиентов опять же скриптами можно реализовать. Убирать из тэга разные части можно и сейчас, путём исправления команды MyINFO при помощи функции Core.SetCmd (самое главное чтобы синтаксис команды был соблюдён). Если MyINFO не изменилось, то оно и не рассылается всем пользователям - это было с самого начала реализовано.
В общем все предложения забракованы
А по поводу 1 пункта, почему? Я не про прямое использование, а через апи фукнцию, типа
Так а зачем огород городит, когда вызов функции Core.SendToAll итак доступен из любого глобального окружения?
Это банальный пример, просто на работоспособность функции... Пусть будет
Си функцию так вызвать можно (SendToAll это Си функция), а вот lua функцию вызвать так нельзя. Ведь lua функция может использовать в своём теле какие-то глобальные переменные своего глобального окружения, кроме этого локальные переменные функции привязаны к окружению самой функции, а окружение самой функции наследует глобальное окружение. Поэтому никак.
very good. Is best hub soft in future . ну а ссылка
Сделал.
Используя потоки добился того, что можно вызвать глобальную функцию другого скрипта с передачей параметров из текущего скрипта, причём глобальная функция будет работать в том окружении, в котором она находится, то есть другими словами вызов функции может менять и вызывать всё что находится в том скрипте в котором определена эта функция)))))))
Оказывается я был не прав. Оказывается можно реализовывать всё что угодно.
Nickolya, расскажи для чего тебе нужен был данный функционал? (Хотя понятно, что этот функционал действительно очень мощный)
Сделайте аналог функции Core.SendToOps(sMsg, sBot)
Кто такие операторы? По какому принципу они определяются? Те у кого ключик есть?
Думаю лучше сделать функцию SendToProfile, а не привязывать статус оператора к ключику (как это сделано в птохе), так как хочется иметь возможность находится в статусе оператора, но без ключика.
Setuper, спасибо большое за функцию, я хотел упростить немного себе жизнь в отношении создания модуля для скрипта, к примеру чтобы не изобретать велосипеды в модулях, а сразу из модуля вызывать фукнцию головного скрипта
Вопрос: в результате работы фукнции в вызываемом окружении, то что возвращается попадает в окружение скрипта отуда шел вызов?
Функции отсылки профилю действительно не хватает, можно сделать отсылку определенным никам, но если их много мне кажется это будет тормозить... + реально было бы полезно сделать отсылку нескольким профилям, если к примеру 1 аргументом функции является таблица, мы смотрим какие в ней профили прописаны и всем им отсылаем сообщение.
API функция Core.SendToProfile будет конечно работать быстрее, но пока её нету, можешь использовать lua аналог:
А вот ответить на вопросы что заданы немногим выше? Ждем нового релиза с новыми фукнциями!!! Спасибо огромное!
Отсылку по таблице с профилями тоже реализую.
Значение возвращается в том окружении, где вызвана функция.
Список пока не реализованных идей и запросов ( todo / future request / change request / improvement ).
ToDo:
Может еще реализуется 2 причины бана? Одна для забаненного, а вторая для администрации?;)
Баны не встроены в хаб, всё это реализуется скриптами
При написании скриптов остро ощущается нехватка функций SendToOps и SendToProfile. Очень хотелось бы увидеть эти функции в следующей версии.
Функция Core.SendToProfile(iProfile/tProfiles, sData, sNick, sFrom) уже готова прямо сейчас могу релиз выложить
Предложение -
1. сделать запуск хаба с задержкой (при включении компа сетевые службы запускаются чуть позже - проходит инициализация сетевого адаптера).
2 - незнаю возможно ли - консоль чтобы пряталась в трей (чтобы была невидима)
3 - при выходе новых версий чтобы в архиве были files.lua и lua.dll на "своих местах" - это же необходимый минимум?
Не нашел как перезагрузить скрипты без перезагрузки самого хаба...
Если предложения ненужны - просьба разьяснить как сделать первые 2 просьбы
1 - зачем задержка? Когда сетевые службы загрузятся тогда и войдёшь на хаб.
2 - выход - запуск хаба как службу.
3 - обновляться модули, библиотеки и хаб могут независимо друг от друга.
Для возможности перезагрузит все скрипты используй скрипт http://mydc.ru/topic2878.html
Спасибо. Добавил
Setuper - будет ли возможность линковки чатов 2х хабов? На птоке такое было возможно только при танцах с бубнами...
Да, чуть позже напишу отдельный плагин, который будет этим заниматься. Причём линковать собираюсь не только чаты, а полноценно линковать хабы
Однако, на данный момент есть дела и поважнее. Сейчас передо мной стоит задача сооружения защиты для хаба. В частности это связано с написанием антифлуда и дисконнектом пользователя при каких-либо попытках атаки. На данный момент при неправильно отосланных параметрах nmdc команд, хаб не отключает пользователя, а ждёт правильной команды. Этим могут воспользоваться для атаки хаба путём частых отсылок неправильных параметров в командах. Поэтому как и в птохе, если nmdc команда содержит не правильные параметры, то должно последовать незамедлительное отключение.
Максимальное количество символов в нике как задать? А то уже атакуют DCFlood'ом. Там ники с 14-тью произвольными латинскими символами. На птоке в свое время тупо 13 мах выставил и все.
===========
ЗЫ. Пардон, что не туда написал... Смутила строчка вверху
"MyDC.ru > RusHub > Технические вопросы по RusHub'у", а эту "Предложения для развития" у меня в Гугль хроме еле видно...
думаю ответ будет прост... это легко делается скриптом типа:
Wariner, юнный падаван, оптимальней наверно будет делать как твой тезка, автор хаба. В его варианте будет вот так:
Так как в моей голове на данный момент летают мысли о создании хорошего модуля банов, то у меня сразу же встаёт вопрос о банах по всевозможным параметрам. В частности: бан по ip, бан по нику, бан по MyINFO параметрам, бан по mac-адресу (в случае успешного определения), и бан по DNS.
Реализовав средство определения имена хоста для последнего типа бана (DNS), возникла трудность, связанная с тем, что при определении хоста иногда возникают задержки (около 5 сек), связанные с отправкой запроса по SMB протоколу, с целью определить имя хоста. Поэтому бан по DNS однозначно отпадает, так как в этом случае время входа на хаб увеличивается примерно на 5 сек, что является недопустимым
Setuper, а что если узнавать днс в отдельном потоке, не синхронизированным с входом на хаб, а уже потом, по таймеру, определять входит ли юзер в список забаненых, получится что юзер войдет на хаб, а уже потом отключится от хаба, конечно не очень оптимально, но все-таки инструмент кары будет хороший.
Артём, мак уже имеется, это 1 из параметров юзера, наглядно сможешь увидеть используя http://mydc.ru/topic2878.html?#39;а (при входе на хаб в приветствии)
Как вариант возможно.
Если между хабом и клиентом есть хотя бы 1 маршрутизатор, то mac адрес клиента определить нельзя. Другими словами, мак-адрес можно определить только для пользователей, которые находятся в том же сегменте, что и хаб.
А может сделать плагин профилей и потом просто ко всем скриптами подключать? Я думаю это будет удобным.
Где то уже писал, но повторюсь: Сделайте команду смены Топика хаба.
Saymon, так профиль итак устанавливается в одном скрипте, а потом используется во всех скриптах. То есть в роли плагина тут выступает скрипт.
По поводу установки топика, то можно написать скрипт:
Поскольку необходима реализация сессий для веб-морды хаба, очень бы хотелось получать в OnWebData(WebID, sData) еще ip-адрес отправителя а так же иметь функцию которая бы выводила состояние клиента (подключен/отключен)
По поводу определения ip адреса веб-клиента - сделаю.
По поводу статистики хаба, то функция Core.GetStat() будет возвращать Lua таблицу в полях которой будет содержаться различная информация текущей сессии работы хаба:
Какие предложения по поводу параметров событий OnScriptStart, OnScriptStop и OnScriptRestart ?
Хорошо бы к этому всему добавить OnScriptError
Уже давно есть.
Setuper - вот интересная
Технология понятна, однако для такого фокуса нужно чтобы пассивный клиент отсылал команду на соединение с пассивом, но NMDC клиент устроен так, что при соединении с пассивным он не будет ничего отсылать на хаб.
Хотя это можно обойти, предварительно запомнив режим клиента, отсылать всем пользователям хаба не пассивный режим, а активный. А при соединении пользователей сравнивать запомненные режимы. Эта идея летает уже достаточно давно. По всей видимости реализовать можно.
Согласен. Событие OnScriptRestart не нужно.
Однако вопрос остаётся открытым. Какие параметры нужны в событиях OnScriptStart и OnScriptStop? Обойтись только именем скрипта?
А зачем там что-либо кроме имени? Для ошибок есть OnScriptError.
Тут важно другое - чтобы функции вызывались так же, как и OnScriptError - без таймера.
У меня очередной feature-request:
Функция, возвращающая список настроек. Я думаю, это несложно реализовать.
Назрел вопрос об улучшении в следующей версии. Вопрос такой: может ввести дополнительно умные параметры дабы избежать проверок, которые нужно обязательно делать?
Речь тут идёт о параметрах пользователя. Хочу сделать вот что: UID.iSlots = nil, а UID._iSlots = 0. Если не хочется проверять параметр на nil значение, используем безопасный параметр (с подчеркиванием спереди) с чётко определённым значением по умолчанию.
Стоит ли это сделать или это бредовая идея??
Стоит, ведь часто какой-нибудь параметр проверяется на nil, и ему присваивается дефолтное значение
Возможно даже стоит сделать функцию, которой можно будет устанавливать значения по умолчанию для параметров. Например, установит значение по умолчанию для отсутствующего тэга как "n/a" или как "отсутствует", для того чтобы без проблем можно было писать те же самые приветствия с перечислением параметров пользователя.
Но тут опять же есть вопрос: можно же сделать глобальные значения по умолчанию для всех скриптов, а можно сделать значения по умолчанию для каждого скрипта в отдельности. Во втором случае, если сделать функцию установки значения по умолчанию, то при старте скрипта можно будет установить нужные значения по умолчанию для текущего скрипта, при этом в других скриптах ничего не сломается.
Может это всё очень надуманно и не стоит этого делать? Или же сделать? И какой из двух вариантов лучше сделать? (склоняюсь ко второму).
По-моему новых параметров плодить не надо, это уже не красиво получается. А с установкой по умолчанию идея хорошая, но нужно это делать для каждого скрипта индивидуально, что мне кажется заморочкой со стороны программы. Я бы сделал вот так:
Реквестую аналог параметра птоки
Тогда уж и пусть запоминает и выдаёт даты максимальной шары (вместе с самой шарой) и максимального количества юзеров (вместе с самим количеством) за всё время работы РусХаба с первого включения и всё то же самое - за текущую сессию.
Этого так сильно не хватало в Птоке.
я щитаю, что стоит.
Ага, будет очень удобно
Есть подобная фишка в хексхабе, в верли тоже на команду отдельное событие. Я считаю что стоит сделать как с таймерами, т.е. функция типа
Core.AddTrigger("somecmd") будет возвращать айди события, а по событию будет вызываться функция OnTrigger(iId), при указании функции в Core.AddTrigger("somecmd", "SomeCmdFunction"), будет вызываьться функция, переданная вторым параметром. А вот передачу параметров в таблице tParams не считаю удобным т.к. они используются всегда по-разному (порой нужно взять параметры через пробел, порой нужна вся строка), поэтому можно просто передавать строку, идущую за командой.
Илья, может добавить пару апи функций отключения хаба и рестарт хаба?
Ок. Добавлю.
Не знаю может на стороне луа как-то сделать, но в хексхабе есть такая функция: (добавление команды в !help )
По-моему чистыми скриптами всё это сделать легче, чем огород городить
Предлагаю сделать такую систему настроек для скриптов:
В скрипте вызывается функция, к примеру, Core.RegisterSettings("имя параметра", "значение по умолчанию")
А когда скрипту нужно значение этого параметра, он вызывает Core.GetSettings("имя параметра")
И сделать команды, например, пишешь в чат
!set <имя параметра> <значение>
и этот параметр принимает данное значение.
И, кроме того, надо что бы хаб при старте читал файл autoload.conf, в котором были бы перечислены те параметры и их значения, которые пользователь туда вписал, и хаб устанавливал бы их устанавливал.
Например:
frhb_botname "RusHubBot"
frhb_topic "Добро пожаловать!"
tw_menu "Twitter"
tw_botname "Twitter"
tw_out_time 15
и тд.
Это позволит очень удобно настраивать скрипты, даже не глядя в исходный код.
Пользователям не придется копаться в исходном коде и что-то там править с риском все сломать.
Так а сейчас разве не так сделано?
В файле config.xml хранятся параметры, пользователь может их там изменить на своё усмотрение.
В скрипте есть объект Config.
А, понятно.
IPv6. Быть или не быть?
А сильно нужно?
Мне кажется, когда действительно будет нужно, оно (IPv6) обязательно появиться
Решил внести свою лекту и написать:
это скорей в категорию на потом.
Возможность объединения нескольких серверов в один хаб (кластер)
Уже есть в первом посте.
Голосовой и видеочат по принципу комфорт чата. Планы на это есть?
Или это возможно при соответствующей поддержке в клиенте?
А чем плох скайп? (хотя сам и не пользуюсь)
Прекрасная система! Проще там запросить возможность создания серверов с общим чатом, списком юзеров и администраторами
Как сделать поддержку первой версии команды $UserIP ?
2
Хотя есть параметр bInIpList, по которому отправляется ip адрес очередного вошедшего пользователя.
Может стоит только для таких пользователей разрешить отправлять на хаб команду $UserIP ? Хотя с другой стороны, у них итак уже показываются все ip и запрашивать у хаба ip адрес для какого-то ника нет необходимости.
Всё же наверное нужно сделать вариант 2 (Сделать для тех, у кого она включена).
При этом варианте можно будет разрешить как душе угодно.
Хотя наверное разумно вообще сделать возможность получения ip адреса для всех и без каких-либо разрешений, хотя так делать не очень хочется
Setuper, я думаю простым юзерам не нужно видеть айпи адреса остальных. Или как минимум админа и/или операторов.
Тогда есть вариант сделать событие OnUserIP, которое срабатывает при поступлении на хаб команды $UserIP от юзера. Если в событии возвращается true, то не отправлять ip, иначе отправлять. То есть, по умолчанию ip будет отправляться, а при необходимости можно запретить хабу отсылать ip адреса каких-то юзеров
не пойму, к чему такие сложности? Чем плохо то, что сейчас?
Хочу сделать поддержку первой версии команды $UserIP
С событием мне кажется будет лучшем вариантом
Тут не идёт речь об автоматической отсылке ip адресов при входе на хаб - это поддерживает вторая версия команды. Речь идёт именно о клиентском запросе ip адреса командой $UserIP.
Почитай описание команды $UserIP.
На будущее так сказать, сделать первый шаг для возможности на уровне хаба поддерживать заголовки, то есть расширить протокол, но это скорей на планы с adc. Думаю будет актуально. Через годик может и лидеры дц клиентов будут поддерживать данное расширение.
Перспективы применения широки, от определения домена с которого пришел юзер до определения юзер агента (клиента) прямо в заголовках. Выбора языка на котором отображать информацию на хабе и многое другое.
P.S. думаю нужно расширять протокол.
Так это не по адресу, надо писать разрабочикам протокола ADC
Подкинь посонам дровишек, а то давно не слышали: — Oh... these crazy russians!!!!1
Нахрена козе баян?
Для начала нужно встроить adc. Плюшек, которые нужно сделать итак хватает
Очередная фича, которую хочется сделать: отлов ошибок (исключений) в функциях, вызываемых из плагинов, и отключение плагина, в котором произошла ошибка (в первую очередь это поможет определить произошла ли ошибка в ядре хаба или в каком-то плагине).
Таким образом, хаб не будет падать при ошибке в плагине, однако функционал отключенного плагина не будет доступен. Возможно нужно будет сделать какой-то отдельный плагин, при помощи функционала которого можно будет подключать и отключать остальные плагины.
При увеличении числа различных плагинов данная фича будет как нельзя кстати.
По поводу реализации: под винду всё прозрачно - ловится SEH исключением. С линуксом всё обстоит сложнее, ибо надо сигнал превратить в исключение да ещё и в определенном состоянии поймать это исключение. Возможно в случае линукса нужно пойти по стопам java реализации исключений и позаимствовать сишный код оттуда
эм, но зачем, если можно реализовать обновленной версией сигналов. Той, которая потокобезопасная.
Не ну как ты себе это представляешь?
Ну поймали мы сигнал, а что дальше делать? Ведь вся идея в том чтобы обработать исключение именно в определённом месте программы, где есть функционал для отключения плагина с ошибкой и после обработки продолжить работу хаба после вызова функции плагина не нарушая стек вызовов, а не где-то непонятно в какой функции и непонятно что после обработки делать. К тому же система принудительно килит процесс после обработки сигнала sigsegv.
Мб все-таки sigkill? Который 9ый.
Остальные сигналы можно подменить хендлерами.
Хотелось бы обсудить новую фишку, которая планируется в ближайшей версии.
В свете внедрения протокола ADC возникла необходимость хранить совершенно произвольное число параметров пользователя. Другими словами, если в NMDC протоколе в команде $MyINFO постоянное число параметров, то в аналогичной команде INF протокола ADC число этих параметров в общем случае произвольно и, вообще говоря, не ограничено.
Сделав хранение произвольного числа параметров, сразу же возникла идея создания/установки параметров из Lua.
В итоге, через UID можно создавать и хранить свои параметры под свои нужды. Эти параметры будут жить в оперативке до момента дисконнекта юзера. Причём параметры будут сохранять свой тип данных. Кроме этого, при помощи данных параметров можно передавать данные между скриптами.
Пример:
script1.lua
Если не хочешь забивать оперативку - не юзай эти параметры. Чтобы ничего не забивать можно вообще не юзать скрипты.
Параметры исключительно для удобства написания скриптов. А если не хватает оперативки, то может стоит её прикупить?
В новой версии (на данный момент 2.3.8[beta]) будет модифицирована система логирования.
В настройках уровни логирования iMaxLevel и iMaxErrLevel будут объединены в один уровень логирования iMaxLevel.
Номер уровня логирования может быть одним из следующих:
0 - FATAL
1 - ERROR
2 - WARN
3 - INFO
4 - DEBUG
5 - TRACE
Создавать копию предстоящих изменениям данных и процесс изменений производить только с ним, а на это время оригинал останется доступен другим скриптам. Как только копия претерпит окончательно изменения, она заменяет оригинал.
Как-то так..
Хотя, учитывая очень короткое врмя обработки данных (в том числе и изменения их), можно не париться вовсе.
Русхаб работает в один поток, поэтому утверждение о блокировки изменений данных, пока с ними работает один из скриптов, - бессмысленное.
Реализация сохранения параметров куда-то - это уже на плечах самого скриптописателя.
Вообще говоря, эти параметры задумываются как временное хранилище, которое могут использовать все скрипты, поэтому о сохранении речи вообще говоря не идёт. Ведь например ip адрес пользователя (UID.sIP) мы же обычно не сохраняем, однако же его можно в какой-то степени считать тем же самым параметром, правда установлен этот параметр самим хабом, а не скриптом. Более того, внутри хаба параметр для ip или какой либо другой параметр в принципе хранятся одинаково.
Ну на развитие врядли повлияет... - Предлагаю автору заполнить описание "Description" и "Publisher" - при просмотре в "управлении службами" винды или в утилитах типа "Autoruns" от sysinternals сразу бросается в глаза.
Так вроде в последней версии добавлено
Незнаю подходит ли вопрос для этой темы.
Setuper - ведется ли статистика сколько серверов rushub установлено?
Если встроить инструмент (по умолчанию вкл в конфиге) который будет передавать на главный сайт http://rushub.org/ информацию, что вот по такому-то ip - работает rushub (таким образом на главной можно сделать список хабов работающих на данной платформе, страну и город...). Я не говорю о модуле пингера для хаблиста, а о функционале зашитом в сам софт.
Тут конечно могут возникнуть непонятки от админов - но если админ хороший (читающий мануалы), то он увидит что для выключения функции прописать в конфиге... Но если он выключит - то ему хуже - его хаб пропадет с страницы списка хабов сайта rushub.
А что это даст? Лишний исходящий трафик да и только.
Не думаю, что это хорошая идея.
Гораздо полезнее сделать запрос новой версии, хотя делать это я пока не собираюсь.
Не хочется делать троянское поведение программы
Грамотнее сделать покрытие кода автотестами.
Вот только разберусь с adc, и займусь написанием юниттестов для русхаба.
Нужно будет сделать покрытие тестами хотя бы процентов на 50, тогда вероятность возникновения ошибок в релизных версиях будет минимальной.
На данный момент в Lua плагине все api функции отсылки сообщений (Core.SendToUser, Core.SendToAll и тд.) отсылают сообщения сразу.
Если на хабе нету скриптов, которые отсылают сообщения, то в CDM отладчике можно наблюдать "пульсацию" хаба. То есть, сообщения кэшируются и кэш отсылается через интервал, который задаётся в настройках. Таким образом производительность хаба увеличивается.
Единственное исключение - это сообщения чата и pm, которые всегда отсылаются сразу, а не через кэш, дабы у пользователя не складывалось ощущение, что хаб тормозит.
В целях оптимизации рассылки из Lua скрипта предлагается сделать следующее:
все сообщения, кроме чата и pm рассылать через кэш.
То есть, если сообщение с ником:
за это отвечают параметры: iTimerServPeriod и iTimerConnPeriod
и менять их не рекомендуется
Сейчас _TRACEBACK = debug.traceback включает стек-трейс только для текущего скрипта. Думаю стоило бы устанавливать стек-трейс и для функций перезапуска/запуска/etc скриптов.
Попробовал в другие скрипты так-же писать данную конструкцию, например Core.RestartScript и Core.StartScript в сообщении об ошибке не показали трейс.
И ещё одно предложение, сделать ещё одно возвращаемое значение в виде таблицы для Core.RestartScripts, на случай если скрипт запущен, но при перезапуске произшла ошибка. Возвращать имя скрипта и сообщение об ошибке.
Функции Core.RestartScript и Core.StartScript отлавливают на данный момент исключительно синтаксические ошибки.
Runtime ошибки они не отлавливают.
Возможно отлов runtime ошибок этими функциями в событии OnStartup будет реализован
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. Где функция обновления списка скриптов? Пока приходится удалять ненужные скрипты из списка, пытаясь остановить их повторно после удаления файла.