📄 mmultihost.java
字号:
package net.jumperz.app.MGuardian.plugin;
import java.io.*;
import java.util.*;
import java.net.*;
import net.jumperz.net.*;
import net.jumperz.util.*;
import java.util.regex.*;
public class MMultiHost
extends MGuardianPlugin
{
/*
www1.example.com=192.168.1.2
www2.example.com=192.168.1.3:80
www3.example.com=192.168.1.3:82
*/
private Map hostPeerMap = new HashMap();
private String configFileName;
private MPeer defaultPeer;
private Pattern pattern = Pattern.compile( "([0-9]{1,3}\\.){3}[0-9]{1,3}" );
//--------------------------------------------------------------------------------
public void startup()
throws IOException
{
configFileName = control.getProperty( "multiHost.configFileName" );
if( configFileName == null )
{
throw new IOException( "'multiHost.configFileName' must be set in 'control' file." );
}
MProperties prop = new MProperties();
prop.load( new FileInputStream( configFileName ) );
Set keySet = prop.getKeySet();
Iterator p = keySet.iterator();
while( p.hasNext() )
{
String key = ( String )p.next();
String value = ( String )prop.getProperty( key );
int port = 80;
String[] array = value.split( ":" );
if( array.length == 2 )
{
port = Integer.parseInt( array[ 1 ] );
}
String host = array[ 0 ];
/*
Matcher matcher = pattern.matcher( host );
if( !matcher.matches() )
{
throw new IOException( host + " must be an IP address." );
}
*/
MPeer peer = new MPeer( host, port );
hostPeerMap.put( key, peer );
}
defaultPeer = new MPeer( control.getProperty( "targetHost" ), Integer.parseInt( control.getProperty( "targetPort" ) ) );
}
//--------------------------------------------------------------------------------
public Map execute( Map sessionInfo )
throws IOException
{
MHttpRequest request = ( MHttpRequest )sessionInfo.get( "request" );
String host = request.getHeaderValue( "Host" );
Map pluginResult = new HashMap();
Socket oldSocket = ( Socket )sessionInfo.get( "serverSideSocket" );
MPeer oldPeer = null;
if( oldSocket != null )
{
oldPeer = new MPeer( oldSocket );
}
MPeer targetPeer = ( MPeer )hostPeerMap.get( host );
if( targetPeer == null )
{
if( oldSocket == null )
{
return null;
}
else
{
if( oldPeer.equals( defaultPeer ) )
{
//reuse socket
return null;
}
else
{
Socket newSocket = defaultPeer.getSocket();
pluginResult.put( "serverSideSocket", newSocket );
return pluginResult;
}
}
}
else
{
if( oldSocket == null )
{
Socket newSocket = targetPeer.getSocket();
pluginResult.put( "serverSideSocket", newSocket );
return pluginResult;
}
else
{
if( oldPeer.equals( targetPeer ) )
{
//reuse socket
return null;
}
else
{
System.err.println( "hoge" );//TODO
Socket newSocket = targetPeer.getSocket();
pluginResult.put( "serverSideSocket", newSocket );
return pluginResult;
}
}
}
}
//--------------------------------------------------------------------------------
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -