Перейти до

тариф в скриптах onconnect и ondisconnect


Рекомендованные сообщения

Вот слегка модифицировал стг для того чтоб не лезть в базу сторонними скриптами для получения названия тарифа

извините диф делать не смогу (много чего переделывал и не все пока работает) но кому нузхно могут дописать

 

и так в файле 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

 

для получаения тарифа в скрипте дисконекта

Ссылка на сообщение
Поделиться на других сайтах

Вместо

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.

Ссылка на сообщение
Поделиться на других сайтах

Вместо

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.

В принципе все то же самое , преобразование в стринг а потом в чар, только сточек меньше :lol:

П.С.

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

в будущем если будет время попытаюсь на .NET переложить код для более "современных" форм клиента. Просто перекладывать на .NET структуры довольно жуткая возьня

Ссылка на сообщение
Поделиться на других сайтах

...

В принципе все то же самое , преобразование в стринг а потом в чар, только сточек меньше :lol:

П.С.

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

в будущем если будет время попытаюсь на .NET переложить код для более "современных" форм клиента. Просто перекладывать на .NET структуры довольно жуткая возьня

Нет, не то же самое. Нет промежуточного преобразования в std::string. ConstData() возвращает константную ссылку на внутреннее представление. И в char * тоже преобразования нет, т.к. c_str() возвращает константный указатель на внутренний буфер. Т.е. это последовательный доступ к "потрохам" поля tariffName. После компиляции со включенным -finline-functions (включается на самом низком уровне оптимизации, т.е. почти всегда) вызовов ConstData() и c_str() не останется, будет только работа со внутренним буфером напрямую.

 

По поводу отображения тарифа в авторизаторе - патчи есть? Могу включить в основное дерево.

Ссылка на сообщение
Поделиться на других сайтах

Хотелось бы и передачу тарифа включить в основное дерево...

Только в виде конфигурируемого списка параметров :lol:

Ссылка на сообщение
Поделиться на других сайтах

В принципе вот все что было изменено

буквально 6 строчек кода

doc, ужас какой. Тут бы хватило простого текстового файла или даже ссылки на pastebin.

AliveSyn6 можно было не трогать, это поддержка старого протокола.

Классический авторизатор с этим, скорее всего, работать не будет или будет глючить.

Ссылка на сообщение
Поделиться на других сайтах

В принципе вот все что было изменено

буквально 6 строчек кода

doc, ужас какой. Тут бы хватило простого текстового файла или даже ссылки на pastebin.

AliveSyn6 можно было не трогать, это поддержка старого протокола.

Классический авторизатор с этим, скорее всего, работать не будет или будет глючить.

 

Если не менять клиента он работает :lol:

покрайней мере мой работал просто в лабле всего 4 буквы писал я голову ломал в чем дело , потом долшло что либы пересобрать надо было

 

На счет дока просто описал поподробнее если кому надо до релиза доделать (если впишите в релиз)

Ссылка на сообщение
Поделиться на других сайтах

В принципе вот все что было изменено

буквально 6 строчек кода

doc, ужас какой. Тут бы хватило простого текстового файла или даже ссылки на pastebin.

AliveSyn6 можно было не трогать, это поддержка старого протокола.

Классический авторизатор с этим, скорее всего, работать не будет или будет глючить.

 

Если не менять клиента он работает :lol:

покрайней мере мой работал просто в лабле всего 4 буквы писал я голову ломал в чем дело , потом долшло что либы пересобрать надо было

 

На счет дока просто описал поподробнее если кому надо до релиза доделать (если впишите в релиз)

Просто повезло что поле status в AliveSyn8 не используется.

 

Ну в таком виде оно точно в код не попадет. Тут надо в отдельную версию протокола его вынести, типа AliveSyn9.

Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Вхід

Уже зарегистрированы? Войдите здесь.

Войти сейчас
  • Зараз на сторінці   0 користувачів

    Немає користувачів, що переглядають цю сторінку.

×
×
  • Створити нове...