📄 mresponsemanager.java
字号:
package net.jumperz.app.httptunnel.MREYE;
import java.io.*;
import java.net.*;
import java.util.*;
import net.jumperz.util.*;
import net.jumperz.app.httptunnel.*;
public final class MResponseManager
{
private HashMap socketTimeMap; //socket and time
private ArrayList responseList;
private MREYE rEye;
public static final long INTERVAL = 4000;
public static final long TIMEOUT = 10000;
public static final int KEEP = 4;
private static MResponseManager instance;
//----------------------------------------------------------------------------------------------
public static final MResponseManager getInstance()
{
if( instance == null )
{
instance = new MResponseManager();
}
return instance;
}
//----------------------------------------------------------------------------------------------
private MResponseManager()
{
rEye = MREYE.getInstance();
socketTimeMap = new HashMap();
responseList = new ArrayList();
}
//----------------------------------------------------------------------------------------------
/**
* If a socket is waiting too long, send NOOP and close socket.
*/
public final synchronized void timerTimer()
{
Iterator p = socketTimeMap.keySet().iterator();
while( p.hasNext() )
{
Socket socket = ( Socket )p.next();
Integer timeWait = ( Integer ) socketTimeMap.get( socket );
int intTimeWait = timeWait.intValue();
intTimeWait += INTERVAL;
if( intTimeWait > TIMEOUT )
{
p.remove();
rEye.sendNOOP( socket );
}
else
{
socketTimeMap.put( socket, new Integer( intTimeWait ) );
}
}
}
//----------------------------------------------------------------------------------------------
public final synchronized void addSocket( Socket socket )
{
if( responseList.size() == 0
&& socketTimeMap.size() >= KEEP
)
{
//if there are many sockets already,
//send NOOP immediatery.
rEye.sendNOOP( socket );
}
else
{
Integer timeWait = new Integer( 0 );
socketTimeMap.put( socket, timeWait );
checkData();
}
}
//----------------------------------------------------------------------------------------------
public final synchronized void putResponse( MResponse response )
{
responseList.add( response );
checkData();
}
//----------------------------------------------------------------------------------------------
public final synchronized void checkData()
{
Iterator p = socketTimeMap.keySet().iterator();
if( p.hasNext() )
{
if( !responseList.isEmpty() )
{
Socket socket = ( Socket )p.next();
p.remove();
MResponse response = ( MResponse )( responseList.remove( 0 ) );
rEye.sendResponse( socket, response );
}
}
}
//----------------------------------------------------------------------------------------------
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -