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

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

(Различия между версиями)
Перейти к: навигация, поиск
(убрал типы возращаемых функций)
(убрал одинаковые названия функции как не везде могут работать)
Строка 1: Строка 1:
-
конфигурация типа шлюза :
 
-
 
-
<source lang="bash">
 
-
user_rule.editor.class=bitel.billing.module.services.ipn.editor.ManadContractRuleEditor
 
-
gate_manager.class=bitel.billing.server.ipn.ManadGateWorker
 
-
use.script=1
 
-
</source>
 
-
 
-
Код :
 
-
<source lang="java">
 
import java.io.*;
import java.io.*;
import java.net.*;
import java.net.*;
Строка 14: Строка 4:
import bitel.billing.common.module.ipn.*;
import bitel.billing.common.module.ipn.*;
import bitel.billing.server.ipn.bean.*;
import bitel.billing.server.ipn.bean.*;
-
 
+
void doSync()
void doSync()
{
{
Строка 20: Строка 10:
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
try
{
{
Строка 33: Строка 23:
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: Строка 39:
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: Строка 54:
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: Строка 62:
                     }
                     }
                 }
                 }
-
+
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: Строка 82:
}
}
}
}
-
 
+
in.close();
in.close();
out.close();
out.close();
Строка 102: Строка 92:
}
}
}
}
-
 
+
-
generateRule( status )
+
getRule( status )
{
{
rule = null;
rule = null;
-
+
// пользовательское правило, без типа
// пользовательское правило, без типа
if( status.ruleType == null )
if( status.ruleType == null )
Строка 117: Строка 107:
rule = generateRule( status.rule.getRuleText(), status.gateType, status.ruleType );
rule = generateRule( status.rule.getRuleText(), status.gateType, 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 )
generateRule( addresses, gateType, ruleType )
{
{
Строка 129: Строка 119:
     return ManadUtils.generateRule( ruleText, addresses, null, ruleType );   
     return ManadUtils.generateRule( ruleText, addresses, null, ruleType );   
}
}
-
</source>
 

Версия 13:33, 1 апреля 2009

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 );    	

}

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