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

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

(Различия между версиями)
Перейти к: навигация, поиск
(Новая: конфигурация типа шлюза : <source lang="bash"> user_rule.editor.class=bitel.billing.module.services.ipn.editor.ManadContractRuleEditor gate_manager.class=bitel.bill...)
 
(9 промежуточных версий не показаны.)
Строка 4: Строка 4:
user_rule.editor.class=bitel.billing.module.services.ipn.editor.ManadContractRuleEditor
user_rule.editor.class=bitel.billing.module.services.ipn.editor.ManadContractRuleEditor
gate_manager.class=bitel.billing.server.ipn.ManadGateWorker
gate_manager.class=bitel.billing.server.ipn.ManadGateWorker
-
use.script = 1
+
use.script=1
</source>
</source>
Строка 14: Строка 14:
import bitel.billing.common.module.ipn.*;
import bitel.billing.common.module.ipn.*;
import bitel.billing.server.ipn.bean.*;
import bitel.billing.server.ipn.bean.*;
-
 
+
-
protected void doSync()
+
void doSync()
{
{
host = gate.getHost();
host = gate.getHost();
port = gate.getPort();
port = gate.getPort();
gid = gate.getId();
gid = gate.getId();
-
+
if ( log.isDebugEnabled() )
if ( log.isDebugEnabled() )
{
{
    log.debug( gid + " gate: " + host + ":" + port );
    log.debug( gid + " gate: " + host + ":" + port );
}
}
-
 
+
-
 
+
-
try
+
-
{
+
socket = new Socket( host, port );
socket = new Socket( host, port );
out = new PrintWriter( socket.getOutputStream(), true );
out = new PrintWriter( socket.getOutputStream(), true );
isr = new InputStreamReader( socket.getInputStream() );
isr = new InputStreamReader( socket.getInputStream() );
in = new BufferedReader( isr );
in = new BufferedReader( isr );
-
 
+
out.println( "test" );
out.println( "test" );
kods = in.readLine();
kods = in.readLine();
-
 
+
-
        if ( log.isDebugEnabled() )
+
                if ( log.isDebugEnabled() )
-
        {
+
                {
-
            log.debug( gid + " Test => " + kods + "\n" );
+
                    log.debug( gid + " Test => " + kods + "\n" );
-
        }
+
                }
-
 
+
// список открытых договоров с шлюза
// список открытых договоров с шлюза
gateRules = new HashSet( 5, 5 );
gateRules = new HashSet( 5, 5 );
Строка 49: Строка 47:
gateRules.add( new Integer( st.nextToken() ) );
gateRules.add( new Integer( st.nextToken() ) );
}
}
-
+
for( i = 0; i < statusList.size(); i++ )
for( i = 0; i < statusList.size(); i++ )
{
{
status = statusList.get(i);
status = statusList.get(i);
cid = status.contractId;
cid = status.contractId;
-
+
// флаг того то правило есть на шлюзе
// флаг того то правило есть на шлюзе
flag = false;
flag = false;
-
+
// правило для этого договора есть на шлюзе
// правило для этого договора есть на шлюзе
if ( gateRules.contains( cid ) )
if ( gateRules.contains( cid ) )
Строка 64: Строка 62:
if ( status.status > 0 )
if ( status.status > 0 )
                 {
                 {
-
rule = generateRule( status );
+
rule = getRule( status );
command = "remove\t" + cid.intValue() + "\t" + rule;
command = "remove\t" + cid.intValue() + "\t" + rule;
out.println( command );
out.println( command );
Строка 72: Строка 70:
                     }
                     }
                 }
                 }
-
+
flag = true;
flag = true;
gateRules.remove( cid );
gateRules.remove( cid );
}
}
-
 
+
// правила нет, а юзер открыт  
// правила нет, а юзер открыт  
if ( !flag &&  
if ( !flag &&  
status.status == IPNContractStatus.STATUS_OPEN )
status.status == IPNContractStatus.STATUS_OPEN )
{
{
-
rule = generateRule( status );
+
rule = getRule( status );
-
 
+
command = "add\t" + cid.intValue() + "\t" + rule;
command = "add\t" + cid.intValue() + "\t" + rule;
out.println( command );
out.println( command );
-
+
    if ( log.isDebugEnabled() )
    if ( log.isDebugEnabled() )
                 {
                 {
Строка 92: Строка 90:
}
}
}
}
-
 
+
in.close();
in.close();
out.close();
out.close();
-
socket.close();
+
socket.close();
-
}
+
-
catch ( e )
+
-
{
+
-
throw new RuntimeException ( e );
+
-
}
+
}
}
-
 
+
-
private generateRule( status )
+
getRule( status )
{
{
rule = null;
rule = null;
-
+
// пользовательское правило, без типа
// пользовательское правило, без типа
if( status.ruleType == null )
if( status.ruleType == null )
Строка 115: Строка 108:
else
else
{
{
-
+
rule = generateRule( status.rule.getRuleText(), status.gateType, status.ruleType );
-
ruleText = ManadUtils.getRule( status.gateType, status.ruleType );
+
-
rule = ManadUtils.generateRuleNew( ruleText,  status.rule.getRuleText(), null, status.ruleType );
+
}
}
-
+
-
+
rule = rule.replaceAll( "\r", "" );
rule = rule.replaceAll( "\r", "" );
rule = rule.replaceAll( "\n", "|" );
rule = rule.replaceAll( "\n", "|" );
-
+
return rule;
return rule;
}
}
 +
 +
generateRule( addresses, gateType, ruleType )
 +
{
 +
    ruleText = ManadUtils.getRule( gateType, ruleType );
 +
    return ManadUtils.generateRule( ruleText, addresses, null, ruleType );   
 +
}
</source>
</source>
 +
 +
примечание : для версий >= 5.1 заменить ManadUtils на ru.bitel.bgbilling.modules.ipn.server.bean.command.GateCommandUtil

Текущая версия на 07:36, 15 июля 2010

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

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.*;
 
void doSync()
{
	host = gate.getHost();
	port = gate.getPort();
	gid = gate.getId();
 
	if ( log.isDebugEnabled() )
	{
	    log.debug( gid + " gate: " + host + ":" + port );
	}
 
 
		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();	
}
 
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 );    	
}

примечание : для версий >= 5.1 заменить ManadUtils на ru.bitel.bgbilling.modules.ipn.server.bean.command.GateCommandUtil

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