📄 mpoolingclient.java
字号:
package net.jumperz.app.httptunnel.MLEYE;
import java.net.*;
import net.jumperz.app.httptunnel.*;
import net.jumperz.net.*;
import net.jumperz.util.*;
public final class MPoolingClient
implements MCommand, MSubject1
{
private static final long INTERVAL = 10000;
private static MPoolingClient instance;
private boolean suspended;
private boolean stopped = false;
private MSubject1 subject = new MSubject1Impl();
//--------------------------------------------------------------------------------------------
public static final synchronized MPoolingClient getInstance()
{
if( instance == null )
{
instance = new MPoolingClient();
}
return instance;
}
//--------------------------------------------------------------------------------------------
private MPoolingClient()
{
//private constructor( Singleton pattern ).
}
//--------------------------------------------------------------------------------------------
public final void execute()
{
while( !stopped )
{
suspended = ( MSessionManager.getInstance().getSessionCount() == 0 );
synchronized( this )
{
while( suspended )
{
try
{
wait();
}
catch( InterruptedException e )
{
break;
}
}
}
doit();
}
}
//--------------------------------------------------------------------------------------------
public final void breakCommand()
{
stopped = true;
Thread.currentThread().interrupt();
}
//--------------------------------------------------------------------------------------------
public final synchronized void resume()
{
if( suspended == true )
{
suspended = false;
notify();
}
}
//--------------------------------------------------------------------------------------------
private void doit()
{
MTunnelData tunnelData = new MTunnelData();
tunnelData.setMethod( MTunnelData.NOOP );
tunnelData.setSequence( 0 );
tunnelData.setSessionName( MStringUtil.generateRandomString() );
byte[] w_buffer = "".getBytes();
tunnelData.setBuffer( w_buffer );
//send NOOP
MHTunnelRequest request = new MHTunnelRequest( tunnelData );
MTunnelRequestSender sender = new MTunnelRequestSender( request );
sender.execute();
int state = sender.getState();
if( state != MTunnelRequestSender.SUCCESS )
{
sleep();
return;
}
Socket socket = sender.getSocket();
MResponseReceiver receiver = new MResponseReceiver( socket );
receiver.execute();
state = receiver.getState();
if( state != MResponseReceiver.SUCCESS )
{
sleep();
return;
}
MHttpResponse response = receiver.getResponse();
MLEYE.getInstance().sendDataToClient( response );
}
//--------------------------------------------------------------------------------------------
private void sleep()
{
try
{
Thread.sleep( 5000 );
}
catch( InterruptedException e )
{
}
}
//--------------------------------------------------------------------------------------------
public void notify1()
{
subject.notify1();
}
//----------------------------------------------------------------
public void register1( MObserver1 observer )
{
subject.register1( observer );
}
//----------------------------------------------------------------
public void removeObservers1()
{
subject.removeObservers1();
}
//----------------------------------------------------------------
public void removeObserver1( MObserver1 observer )
{
subject.removeObserver1( observer );
}
//----------------------------------------------------------------
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -