Реализация стандартного шлюза Manad на BeanShell
Материал из BiTel WiKi
import java.io.*; import java.net.*; import java.util.*; import bitel.billing.common.module.ipn.*; import bitel.billing.server.ipn.bean.*;
void doSync() { host = gate.getHost(); port = gate.getPort(); gid = gate.getId();
if ( log.isDebugEnabled() ) { log.debug( gid + " gate: " + host + ":" + port ); }
try
{
socket = new Socket( host, port );
out = new PrintWriter( socket.getOutputStream(), true );
isr = new InputStreamReader( socket.getInputStream() );
in = new BufferedReader( isr );
out.println( "test" ); kods = in.readLine();
if ( log.isDebugEnabled() ) { log.debug( gid + " Test => " + kods + "\n" ); }
// список открытых договоров с шлюза gateRules = new HashSet( 5, 5 ); st = new StringTokenizer( kods ); while ( st.hasMoreTokens() ) { gateRules.add( new Integer( st.nextToken() ) ); }
for( i = 0; i < statusList.size(); i++ ) { status = statusList.get(i); cid = status.contractId;
// флаг того то правило есть на шлюзе flag = false;
// правило для этого договора есть на шлюзе if ( gateRules.contains( cid ) ) { // если правило есть а юзер заблокирован - удаляем правило if ( status.status > 0 )
{
rule = getRule( status ); command = "remove\t" + cid.intValue() + "\t" + rule; out.println( command );
if ( log.isDebugEnabled() ) { log.debug( gid + " " + command ); } }
flag = true; gateRules.remove( cid ); }
// правила нет, а юзер открыт if ( !flag && status.status == IPNContractStatus.STATUS_OPEN ) { rule = getRule( status );
command = "add\t" + cid.intValue() + "\t" + rule; out.println( command );
if ( log.isDebugEnabled() )
{ log.debug( gid + " " + command ); }
} }
in.close(); out.close(); socket.close(); } catch ( e ) { throw new RuntimeException ( e ); } }
getRule( status ) { rule = null;
// пользовательское правило, без типа if( status.ruleType == null ) { rule = status.rule.getRuleText(); } // типизированное правило else { rule = generateRule( status.rule.getRuleText(), status.gateType, status.ruleType ); }
rule = rule.replaceAll( "\r", "" ); rule = rule.replaceAll( "\n", "|" );
return rule; }
generateRule( addresses, gateType, ruleType ) {
ruleText = ManadUtils.getRule( gateType, ruleType ); return ManadUtils.generateRule( ruleText, addresses, null, ruleType );
}