mresponsemanager.java

来自「httptunnel.jar httptunnel java 源码」· Java 代码 · 共 100 行

JAVA
100
字号
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 + =
减小字号Ctrl + -
显示快捷键?