📄 cmppinputstream.java
字号:
import java.lang.*;
import java.net.*;
import java.io.*;
import CMPPThread;
import CMPPPacketCircle;
import CMPPSynchronizedIO;
public class CMPPInputStream extends CMPPThread
{
final static int DEFAULT_READ_TIMEOUT = 5000;
boolean m_bBlocking = false;
CMPPSynchronizedIO m_io = null;
CMPPPacketCircle m_pc = null;
public CMPPInputStream(CMPPSynchronizedIO io,CMPPPacketCircle pc)
throws CMPPException
{
if(io == null)
{
throw new CMPPException("CMPPInputStream.CMPPInputStream : null synchronized io!");
}
m_io = io;
//设置读取超时
m_io.setSoTimeout(DEFAULT_READ_TIMEOUT);
if(pc == null)
{
throw new CMPPException("CMPPInputStream.CMPPInputStream : null packetcircle!");
}
m_pc = pc;
}
public void run ()
{
CMPPPacket packet = null;
try
{
m_nStatus = THREAD_RUNNING;
while(isRunning())
{
//进入阻塞状态
m_bBlocking = true;
//输入数据包
packet = m_io.read();
//退出阻塞状态
m_bBlocking = false;
if(packet == null)
{
continue;
}
//异步数据环
while(isRunning() && !m_pc.isWritable())//无法写入
{
Thread.sleep(5);//等待
}
//写入数据包
if(m_pc.isWritable() && !m_pc.write(packet))
{
//写入失败数据包丢失!
CMPPLog.log("CMPPInputStream.run : packet lost !",
LogRequest.LOG_EXCEPTION | CMPPLog.LOG_CMPP_INPUT_STREAM);
}
}
}
catch(Exception e)
{
CMPPLog.log(e.getMessage(),
LogRequest.LOG_EXCEPTION | CMPPLog.LOG_CMPP_INPUT_STREAM);
CMPPLog.log("CMPPInputStream.run : unexpected exit !",
LogRequest.LOG_EXCEPTION | CMPPLog.LOG_CMPP_INPUT_STREAM);
}
m_nStatus = THREAD_STOPPED;
CMPPLog.log("CMPPInputStream.run : thread stopped !",
CMPPLog.LOG_CMPP_INPUT_STREAM);
}
public boolean isBlocking()
{
if(m_pc.isWritable())
{
return m_bBlocking;
}
return true;
}
public void startup()
{
super.startup();
CMPPLog.log("CMPPInputStream.startup : inputstream startup !",
CMPPLog.LOG_CMPP_INPUT_STREAM);
}
public void shutdown()
{
super.shutdown();
CMPPLog.log("CMPPInputStream.shutdown : inputstream shutdown !",
CMPPLog.LOG_CMPP_INPUT_STREAM);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -