📄 clientiohandler.java
字号:
package mina.client;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.apache.mina.common.ByteBuffer;
import org.apache.mina.common.IdleStatus;
import org.apache.mina.common.IoSession;
import org.apache.mina.handler.StreamIoHandler;
public class ClientIoHandler extends StreamIoHandler{
IoSession session = null;
List implList = new ArrayList();
Object resultObject;
Object lock = new Object();
public ClientIoHandler(){
//init impls.
RpcClientImpl impl = RpcClientImpl.getInstance();
implList.add(impl);
//impl.setHandler(this);
}
private void initImpls(){
Iterator it = implList.iterator();
while(it.hasNext())
{
Object obj = it.next();
if(obj instanceof AbstractClientImpl){
AbstractClientImpl impl = (AbstractClientImpl)obj;
impl.setSession(session);
System.out.println("add this handler");
impl.setHandler(this);
}
}
}
public void messageReceived(IoSession session, Object buf) {
System.out.println("receive message.");
System.out.println(buf.toString());
synchronized(lock){
try {
//String s = String.valueOf(((ByteBuffer)buf).getObject());
//System.out.println("rrrrss=="+s);
resultObject = ((ByteBuffer)buf).getObject();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
lock.notify();
}
}
protected void processStreamIo(IoSession session, InputStream is, OutputStream os) {
System.out.println("process stream info,"+session.getRemoteAddress());
// try {
// ObjectInputStream dis = new ObjectInputStream(is);
// resultObject = dis.readObject();
// lock.notify();
// } catch (IOException e) {
// resultObject = null;
// e.printStackTrace();
// } catch (ClassNotFoundException e) {
// resultObject = null;
// e.printStackTrace();
// }
}
public void sessionOpened(IoSession session) {
// Set reader idle time to 10 seconds.
// sessionIdle(...) method will be invoked when no data is read
// for 10 seconds.
System.out.println("open session..");
this.session = session;
initImpls();
session.setIdleTime(IdleStatus.READER_IDLE, 10);
}
public void sessionClosed(IoSession session) {
// Print out total number of bytes read from the remote peer.
System.err.println("Total " + session.getReadBytes() + " byte(s)");
}
public void sessionIdle(IoSession session, IdleStatus status) {
// Close the connection if reader is idle.
if (status == IdleStatus.READER_IDLE)
session.close();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -