📄 mguardianimpl.java
字号:
package net.jumperz.app.MGuardian;
import net.jumperz.app.*;
import java.io.*;
import java.util.*;
import java.net.*;
import net.jumperz.io.*;
import net.jumperz.net.*;
import net.jumperz.util.*;
import net.jumperz.util.shutdown.*;
import net.jumperz.app.MGuardian.rule.*;
import net.jumperz.app.MGuardian.plugin.*;
import net.jumperz.app.MGuardian.console.*;
public class MGuardianImpl
implements MApplication
{
private static MGuardianImpl instance;
private MThreadPool threadPool;
private int maxConnectionCount;
private MTimer timer;
private List acceptorList;
private boolean shutdowned = false;
private MLogger logger = MSimpleLogger.getInstance();
boolean enableConsole = false;
//--------------------------------------------------------------------------------------
public static MGuardianImpl getInstance()
{
return instance;
}
//--------------------------------------------------------------------------------
public MThreadPool getThreadPool()
{
return threadPool;
}
//--------------------------------------------------------------------------------
private MGuardianImpl()
{
}
//--------------------------------------------------------------------------------
public void log( String message )
{
logger.log( message );
}
//--------------------------------------------------------------------------------------
public void loadConfig ( String configDirName )
throws Exception
{
MConfig config = MConfig.getInstance();
config.load( configDirName );
log( config.toString() );
// targetport targetaddress
MSession.setTargetPeer( config.getTargetHost(), config.getTargetPort() );
// replaceHostField
MSession.setReplaceHostField( config.getReplaceHostField() );
// replaceLocationField
//MSession.setReplaceLocationField( config.getReplaceLocationField() );
// logFileName
String logFileName = config.getLogFileName();
if( logFileName != null )
{
MSimpleLogger.getInstance().addStream( new FileOutputStream( new File( logFileName ), true ) );
}
// sessionLogDirName
String sessionLogDirName = config.getSessionLogDirName();
if( sessionLogDirName != null )
{
MHttpDataLogger.setSessionLogDirName( sessionLogDirName );
}
// restrictRequestHeader
if( config.getLimitRequestHeader() )
{
MSession.setRequestFilter( config.getRequestFilter() );
}
// restrictResponseHeader
if( config.getLimitResponseHeader() )
{
MSession.setResponseFilter( config.getResponseFilter() );
}
// connect timeout
MSession.setConnectTimeOut( config.getConnectTimeOut() );
// header timeout
MSession.setRequestHeaderTimeOut( config.getRequestHeaderTimeOut() );
// body timeout
MSession.setRequestBodyTimeOut( config.getRequestBodyTimeOut() );
// max connect count
maxConnectionCount = config.getMaxConnectionCount();
MAddressManager.getInstance().setMaxCount( maxConnectionCount );
// urlDecodingCharset
MRequestUriRule.setCharset( config.getUrlDecodingCharset() );
// additionalRequestHeader
MSession.setAdditionalRequestHeaderMap( config.getAdditionalRequestHeaderMap() );
// additionalResponseHeader
MSession.setAdditionalResponseHeaderMap( config.getAdditionalResponseHeaderMap() );
// allowedAddress
MAddressManager.getInstance().setAllowedAddress( config.getAllowedAddressSet() );
// acceptorList
acceptorList = config.getAcceptorList();
// rule
MSession.setRequestRuleList( config.getRequestRuleList() );
MSession.setResponseRuleList( config.getResponseRuleList() );
//commandInterval
MCommandExecuter.getInstance().setInterval( config.getCommandInterval() * 1000 );
//maxQueueCount
MCommandExecuter.getInstance().setMaxQueueCount( config.getMaxQueueCount() );
// thread pool
int threadCount = config.getThreadCount();
threadPool = new MThreadPool( threadCount );
threadPool.setLogger( logger );
// start resolver
new MResolver( threadPool );
// start timer
timer = new MTimer( 1000 );
threadPool.addCommand( timer );
//console
enableConsole = MConfig.getInstance().getEnableConsole();
if( enableConsole )
{
MGuardianConsole.getInstance().setConsoleWorkDirName( config.getRequiredProperty( "consoleWorkDirName" ) );
MGuardianConsole.getInstance().setConsoleWebDirName( config.getRequiredProperty( "consoleWebDirName" ) );
MGuardianConsole.getInstance().init();
timer.register1( MGuardianConsole.getInstance() );
}
MPluginManager.getInstance().startup();
}
//--------------------------------------------------------------------------------------
public static void main( String arg )
throws Exception
{
//MLogger.getInstance().addStream( System.out );
instance = new MGuardianImpl();
instance.initLogger();
try
{
instance.loadConfig( arg );
instance.start();
}
catch( Exception e )
{
e.printStackTrace();
instance.threadPool.stop();
}
}
//--------------------------------------------------------------------------------
public void initLogger()
{
MSimpleLogger.getInstance().addStream( System.out );
}
//--------------------------------------------------------------------------------------
public void start()
throws Exception
{
log( "Guardian@JUMPERZ.NET started." );
MSession.setTimer( timer );
// start commandExecuter
threadPool.addCommand( MCommandExecuter.getInstance() );
threadPool.addCommand( MSocketCloser.getInstance() );
// listen sockets
int count = acceptorList.size();
for( int i = 0; i < count; ++i )
{
MMultiAcceptor acceptor = ( MMultiAcceptor )acceptorList.get( i );
MAcceptorObserver observer = new MAcceptorObserver( acceptor );
acceptor.register1( observer );
threadPool.addCommand( acceptor );
}
//shutdown
MShutdownServer shutdownServer = new MShutdownServer( this );
shutdownServer.start( threadPool );
}
//--------------------------------------------------------------------------------------
public void startSession( Socket in_socket )
{
try
{
MSession session = new MSession( in_socket );
session.register2( MSimpleLogger.getInstance() );
if( enableConsole )
{
session.register2( MGuardianConsole.getInstance() );
}
threadPool.addCommand( session );
}
catch( Exception e )
{
e.printStackTrace();
log( e.toString() );
}
}
//--------------------------------------------------------------------------------
public MTimer getTimer()
{
return timer;
}
//--------------------------------------------------------------------------------------
public void shutdown()
{
if( !shutdowned )
{
shutdowned = true;
if( enableConsole )
{
MGuardianConsole.getInstance().shutdown();
}
threadPool.stop();
MPluginManager.getInstance().shutdown();
MBuffer.closeStreams();
System.exit( 0 );
}
}
//--------------------------------------------------------------------------------
public MLogger getLogger()
{
return logger;
}
//--------------------------------------------------------------------------------------
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -