Реализация стандартного шлюза Manad на BeanShell
Материал из BiTel WiKi
(Различия между версиями)
Stark (Обсуждение | вклад) (убрал одинаковые названия функции как не везде могут работать) |
Stark (Обсуждение | вклад) (верунл обратно(случайно попортил )) |
||
Строка 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.*; | ||
Строка 4: | Строка 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.*; | ||
- | + | ||
void doSync() | void doSync() | ||
{ | { | ||
Строка 10: | Строка 20: | ||
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 | ||
{ | { | ||
Строка 23: | Строка 33: | ||
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 ); | ||
Строка 39: | Строка 49: | ||
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 ) ) | ||
Строка 54: | Строка 64: | ||
if ( status.status > 0 ) | if ( status.status > 0 ) | ||
{ | { | ||
- | rule = | + | rule = generateRule( status ); |
command = "remove\t" + cid.intValue() + "\t" + rule; | command = "remove\t" + cid.intValue() + "\t" + rule; | ||
out.println( command ); | out.println( command ); | ||
Строка 62: | Строка 72: | ||
} | } | ||
} | } | ||
- | + | ||
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 = | + | rule = generateRule( 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() ) | ||
{ | { | ||
Строка 82: | Строка 92: | ||
} | } | ||
} | } | ||
- | + | ||
in.close(); | in.close(); | ||
out.close(); | out.close(); | ||
Строка 92: | Строка 102: | ||
} | } | ||
} | } | ||
- | + | ||
- | + | generateRule( status ) | |
{ | { | ||
rule = null; | rule = null; | ||
- | + | ||
// пользовательское правило, без типа | // пользовательское правило, без типа | ||
if( status.ruleType == null ) | if( status.ruleType == null ) | ||
Строка 107: | Строка 117: | ||
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 ) | ||
{ | { | ||
Строка 119: | Строка 129: | ||
return ManadUtils.generateRule( ruleText, addresses, null, ruleType ); | return ManadUtils.generateRule( ruleText, addresses, null, ruleType ); | ||
} | } | ||
+ | </source> |
Версия 13:34, 1 апреля 2009
конфигурация типа шлюза :
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 ); } 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 ); } } generateRule( 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 ); }