⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 clientiohandler.java

📁 给新学mina的同志一个很好的练习例子
💻 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 + -