Реализация стандартного шлюза Manad на BeanShell

Материал из BiTel WiKi

Перейти к: навигация, поиск

конфигурация типа шлюза :

user_rule.editor.class=bitel.billing.module.services.ipn.editor.ManadContractRuleEditor
gate_manager.class=bitel.billing.server.ipn.ManadGateWorker
use.script=1

Код :

import java.io.*;
import java.net.*;
import java.util.*;
import bitel.billing.common.module.ipn.*;
import bitel.billing.server.ipn.bean.*;
 
protected 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 = generateRule( 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 = generateRule( 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 );
	}
}
 
private generateRule( status )
{
	rule = null;
 
	// пользовательское правило, без типа
	if( status.ruleType == null )
	{
		rule = status.rule.getRuleText();
	}
	// типизированное правило
	else
	{	
 
		ruleText = ManadUtils.getRule( status.gateType, status.ruleType );
		rule =  ManadUtils.generateRuleNew( ruleText,  status.rule.getRuleText(), null, status.ruleType );			
	}
 
 
	rule = rule.replaceAll( "\r", "" );
	rule = rule.replaceAll( "\n", "|" );
 
	return rule;
}
ManadUtils.generateRuleNew в 4.5 (ipn вер. 4.5 сборка 117 от 18.11.2008 15:53:19) вызывает исключение
java.lang.reflect.UndeclaredThrowableException
        at bitel.billing.server.ipn.$Proxy0.doSync(Unknown Source)
        at bitel.billing.server.ipn.GateWorker.runScriptSync(GateWorker.java:146)
        at bitel.billing.server.ipn.GateWorker.runSync(GateWorker.java:111)
        at bitel.billing.server.ipn.GateWorker.run(GateWorker.java:86)
Caused by: Error in method invocation: Static method generateRuleNew( java.lang.String, java.lang.String, null, bitel.billing.server.ip
n.bean.RuleType ) not found in class'bitel.billing.server.ipn.bean.ManadUtils' : at Line: 115 : in file: inline evaluation of: ``import
 java.io.*; import java.net.*; import java.util.*; import bitel.billing.co . . . '' : ManadUtils .generateRuleNew ( ruleText , status .
rule .getRuleText ( ) , null , status .ruleType )

Лечится заменой на ManadUtils.generateRule, согласно текущей документации API.

Личные инструменты