Roman Pogosyan 3 Posted 2011-08-09 11:11:22 Share Posted 2011-08-09 11:11:22 Вот слегка модифицировал стг для того чтоб не лезть в базу сторонними скриптами для получения названия тарифа извините диф делать не смогу (много чего переделывал и не все пока работает) но кому нузхно могут дописать и так в файле projects/stargazer/user_impl.cpp находим string scriptOnConnect = blablabla Дописываем после етой строчки string tarifname; tarifname.append(tariffName); далее находим strprintf(&scriptOnConnectParams, blablabla и переделываем ее в такой вид strprintf(&scriptOnConnectParams, "%s \"%s\" \"%s\" \"%f\" \"%d\" \"%s\"\"%s\"", scriptOnDisonnect.c_str(), login.c_str(), inet_ntostring(lastIPForDisconnect).c_str(), (double)cash, id,tarifname.c_str(), dirsStr); компилируем и заменяем файл stargazer из projects в /usr/sbin теперь в скрипте onConnect параметр $5 означает имя тарифа То же самое проделываем с string scriptOnDisconnect для получаения тарифа в скрипте дисконекта Link to post Share on other sites
madf 279 Posted 2011-08-10 07:34:09 Share Posted 2011-08-10 07:34:09 Вместо string tarifname; tarifname.append(tariffName); и strprintf(&scriptOnConnectParams, "%s \"%s\" \"%s\" \"%f\" \"%d\" \"%s\"\"%s\"", scriptOnDisonnect.c_str(), login.c_str(), inet_ntostring(lastIPForDisconnect).c_str(), (double)cash, id,tarifname.c_str(), dirsStr); проще сделать так: strprintf(&scriptOnConnectParams, "%s \"%s\" \"%s\" \"%f\" \"%d\" \"%s\"\"%s\"", scriptOnDisonnect.c_str(), login.c_str(), inet_ntostring(lastIPForDisconnect).c_str(), (double)cash, id,tariffName.ConstData().c_str(), dirsStr); Да и вообще, вместо конструирования и вызова append можно обойтись одним конструированием: std::string tariffname(tariffName); Но предыдущий вариант предпочтительнее, т.к. не требует дополнительной памяти, тактов процессора и строк кода. А вообще в планах есть реализация настраиваемого списка параметров, как это сделано в rscriptd. Link to post Share on other sites
Roman Pogosyan 3 Posted 2011-08-10 08:46:01 Author Share Posted 2011-08-10 08:46:01 Вместо string tarifname; tarifname.append(tariffName); и strprintf(&scriptOnConnectParams, "%s \"%s\" \"%s\" \"%f\" \"%d\" \"%s\"\"%s\"", scriptOnDisonnect.c_str(), login.c_str(), inet_ntostring(lastIPForDisconnect).c_str(), (double)cash, id,tarifname.c_str(), dirsStr); проще сделать так: strprintf(&scriptOnConnectParams, "%s \"%s\" \"%s\" \"%f\" \"%d\" \"%s\"\"%s\"", scriptOnDisonnect.c_str(), login.c_str(), inet_ntostring(lastIPForDisconnect).c_str(), (double)cash, id,tariffName.ConstData().c_str(), dirsStr); Да и вообще, вместо конструирования и вызова append можно обойтись одним конструированием: std::string tariffname(tariffName); Но предыдущий вариант предпочтительнее, т.к. не требует дополнительной памяти, тактов процессора и строк кода. А вообще в планах есть реализация настраиваемого списка параметров, как это сделано в rscriptd. В принципе все то же самое , преобразование в стринг а потом в чар, только сточек меньше П.С. Я не занимаюсь проф программированием , скорее это хобби и иногда по нужде так что оптимальный код реально не выдам просто исходя из костылей для нарезки скорости название тарифа надо было запихнуть , вот и запихнул видал тут народ делился скриптами в выковыриванием из файловой бд, для базы это еще куча строчек , вот решил подправить и поделится, кстате сделал так же отображение тарифа в клиенте , тоже нужная фишка для "современного" зверя. в будущем если будет время попытаюсь на .NET переложить код для более "современных" форм клиента. Просто перекладывать на .NET структуры довольно жуткая возьня Link to post Share on other sites
madf 279 Posted 2011-08-10 09:13:46 Share Posted 2011-08-10 09:13:46 ... В принципе все то же самое , преобразование в стринг а потом в чар, только сточек меньше П.С. Я не занимаюсь проф программированием , скорее это хобби и иногда по нужде так что оптимальный код реально не выдам просто исходя из костылей для нарезки скорости название тарифа надо было запихнуть , вот и запихнул видал тут народ делился скриптами в выковыриванием из файловой бд, для базы это еще куча строчек , вот решил подправить и поделится, кстате сделал так же отображение тарифа в клиенте , тоже нужная фишка для "современного" зверя. в будущем если будет время попытаюсь на .NET переложить код для более "современных" форм клиента. Просто перекладывать на .NET структуры довольно жуткая возьня Нет, не то же самое. Нет промежуточного преобразования в std::string. ConstData() возвращает константную ссылку на внутреннее представление. И в char * тоже преобразования нет, т.к. c_str() возвращает константный указатель на внутренний буфер. Т.е. это последовательный доступ к "потрохам" поля tariffName. После компиляции со включенным -finline-functions (включается на самом низком уровне оптимизации, т.е. почти всегда) вызовов ConstData() и c_str() не останется, будет только работа со внутренним буфером напрямую. По поводу отображения тарифа в авторизаторе - патчи есть? Могу включить в основное дерево. Link to post Share on other sites
Zero_real 4 Posted 2011-08-10 09:50:24 Share Posted 2011-08-10 09:50:24 Хотелось бы и передачу тарифа включить в основное дерево... Link to post Share on other sites
Roman Pogosyan 3 Posted 2011-08-10 09:55:25 Author Share Posted 2011-08-10 09:55:25 Патчей нет могу написать что проделал Link to post Share on other sites
Roman Pogosyan 3 Posted 2011-08-10 10:32:25 Author Share Posted 2011-08-10 10:32:25 В принципе вот все что было изменено буквально 6 строчек кода Tarif_out_todo.doc Link to post Share on other sites
madf 279 Posted 2011-08-10 10:43:36 Share Posted 2011-08-10 10:43:36 Хотелось бы и передачу тарифа включить в основное дерево... Только в виде конфигурируемого списка параметров Link to post Share on other sites
madf 279 Posted 2011-08-10 10:47:25 Share Posted 2011-08-10 10:47:25 В принципе вот все что было изменено буквально 6 строчек кода doc, ужас какой. Тут бы хватило простого текстового файла или даже ссылки на pastebin. AliveSyn6 можно было не трогать, это поддержка старого протокола. Классический авторизатор с этим, скорее всего, работать не будет или будет глючить. Link to post Share on other sites
Roman Pogosyan 3 Posted 2011-08-10 10:49:29 Author Share Posted 2011-08-10 10:49:29 В принципе вот все что было изменено буквально 6 строчек кода doc, ужас какой. Тут бы хватило простого текстового файла или даже ссылки на pastebin. AliveSyn6 можно было не трогать, это поддержка старого протокола. Классический авторизатор с этим, скорее всего, работать не будет или будет глючить. Если не менять клиента он работает покрайней мере мой работал просто в лабле всего 4 буквы писал я голову ломал в чем дело , потом долшло что либы пересобрать надо было На счет дока просто описал поподробнее если кому надо до релиза доделать (если впишите в релиз) Link to post Share on other sites
madf 279 Posted 2011-08-10 11:21:18 Share Posted 2011-08-10 11:21:18 В принципе вот все что было изменено буквально 6 строчек кода doc, ужас какой. Тут бы хватило простого текстового файла или даже ссылки на pastebin. AliveSyn6 можно было не трогать, это поддержка старого протокола. Классический авторизатор с этим, скорее всего, работать не будет или будет глючить. Если не менять клиента он работает покрайней мере мой работал просто в лабле всего 4 буквы писал я голову ломал в чем дело , потом долшло что либы пересобрать надо было На счет дока просто описал поподробнее если кому надо до релиза доделать (если впишите в релиз) Просто повезло что поле status в AliveSyn8 не используется. Ну в таком виде оно точно в код не попадет. Тут надо в отдельную версию протокола его вынести, типа AliveSyn9. Link to post Share on other sites
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now