Страницы: 1
RSS
Script.
 

Здрасте!



Хочу скрипт для снятия абонплаты дополнить. Нужно чтобы пользователям которые за месяц ничего не скачали с инета не начисялась абонплата! Как это сделать?



Но почему то параметр UserState(20) хранит данные не месяцной давности, а совсем не понятно какие! Почти у всех пользователей нули.



Подскажите как и что?

 
User_ProxyCacheCost      = 20; // Стоимость трафика из кеша



а пользователи у вас через прокси работают?

а так вам нуджно скорее всего проверять значение параметра User_RxBytes              = 50; // Принято, байт

Default38929.3807175926
 

Ну через прокси а как же еще?



Кстати давно хотел спросить Как определяется через прокси или нет?



 

 
в сетевой статистике посмотрите протоколы

если протоко tcp/http>80 то через прокси, если tcp/80 то по нату

кстати возможно я ввел вас в заблуждение.

вы какую функцию используете для получения параметров APIGetAttr или APIGetBillProp?
 

Вот весь код (но немного подправленный мною):



Set Args = WScript.Arguments.Unnamed
if Args.Count <> 3 then
 WScript.Echo "??? usage: cscript.exe rstsess2.vbs APIPassword GroupID Cash /sn:ServerName" 
 WScript.Quit 
end if



APIPass = Args(0)
Obj = Args(1)
Cash = Args(2)



If WScript.Arguments.Named.Exists("sn") Then
 ServName = WScript.Arguments.Named.Item("sn")
 set Srv = CreateObject("TrafInsp.TrafInspAdmin",ServName)
Else
 set Srv = CreateObject("TrafInsp.TrafInspAdmin")
End If
Srv.APILogon(APIPass)



UserList = Srv.ApiGetBillProp(3, Obj)



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



if not IsArray(UserList) or not IsArray(UserList(0)) then
 WScript.Echo "Нет данных" 
 WScript.Quit 
end if



for I = 0 to UBound(UserList, 1)
 User = UserList(I)
 ' Получили строку - описание пользователя
 UserID = User(1)
 UserState = Srv.APIGetUserState(UserID)
 ' Считываем текущее состояние сессии
 OldState = UserState(4)
 OldBall = UserState(19)
 WScript.Echo "Клиент " & User(0) & " --- " & UserState(30) 
        if not (UserState(20) = 0) and not (UserState(21) = 0) then
           ' WScript.Echo "Клиент " & User(0) & " --- " & UserState(20)
           ' Переводим пользователя в СТОП
           ' Srv.APISetUserState UserID, 0, 0, "Script", "Очищаем сессию"
           ' Переводим сессию пользователя в состояние, которое было ранее.
     ' Если надо всех обязательно запустить, то поправьте OldState на "2"
    ' Srv.APISetUserState UserID, Cash+OldBall, OldState, "Script", "Запускаем сессию"
     if Cash+OldBall < 0 then
       ' Так как APISetUserState не вводит отрицательное значение оплаты, вводим это через атрибут
       ' Srv.APISetAttr 3, UserID, "User_Cash", Cash+OldBall, true
    end if
           ' WScript.Echo "Клиент " & User(0) & " на счету " & Cash+OldBall 
        End if 
next

 

Кажется так все и работает!

 

Массив, получаемый функцией APIGetUserState, содержит данные по текущему состоянию клиента - т.е. те, которые вы видите в Мониторе работы.

Страницы: 1
Читают тему (гостей: 2)