Вот функция, если кому нужно, устанавливается также как и
тут. Один минус, при превышении лимита пользователь получит ошибку авторизации т.е. войдет со второй попытки.
Код:
import bitel.billing.server.call.bean.Login;
import bitel.billing.server.radius.*;
import bitel.billing.server.contract.bean.*;
import bitel.billing.server.script.event.*;
import bitel.billing.server.dialup.bean.busevent.*;
import bitel.billing.common.*;
import bitel.billing.server.util.*;
import ru.bitel.bgbilling.server.util.*;
import ru.bitel.bgbilling.kernel.event.*;
import java.sql.*;
import java.util.*;
int MID = 1; // код модуля
public void onEvent( event, setup, con, conSlave )
{
contractId = event.getContractID();
errCode = event.getErrorCode();
if( errCode == 21 ) // если ошибка превышения лимита сессий
{
int count = 0;
String tableName = ServerUtils.getModuleMonthTableName( "log_session", new java.util.Date(), MID );
if( ServerUtils.tableExists( con, tableName ) )
{
String query =
"SELECT session.id FROM " + tableName + " AS session " +
"INNER JOIN user_login_" + MID + " AS login ON session.lid=login.id AND login.cid=? " + "WHERE session.status=0";
PreparedStatement ps = con.prepareStatement( query );
ps.setInt( 1, contractId );
ResultSet rs = ps.executeQuery();
while( rs.next() )
{
int recordId = rs.getInt( 1 );
count++;
EventProcessor.getInstance().publish( new DialupSessionBreakEvent( MID, recordId ) ); // непосредственно киляет сессии
}
}
}
}