/**
*
*/
package com.chamago.bison.stream;
import java.io.BufferedInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.SocketTimeoutException;
import org.apache.mina.core.buffer.IoBuffer;
import org.apache.mina.core.future.WriteFuture;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.core.session.IoSession;
import org.apache.mina.handler.stream.StreamIoHandler;
import com.chamago.bison.util.ByteUtil;
/**
* @author Gavin.peng
*
* 2013-10-17 上午10:56:32
× bison
*/
public class BisonStreamIoHandler extends StreamIoHandler {
/* (non-Javadoc)
* @see org.apache.mina.handler.stream.StreamIoHandler#processStreamIo(org.apache.mina.core.session.IoSession, java.io.InputStream, java.io.OutputStream)
*/
@Override
protected void processStreamIo(IoSession session, InputStream in,
OutputStream out) {
session.getConfig().setIdleTime(IdleStatus.BOTH_IDLE, 30);
new DataXceiver(session,in,out).start();
}
@Override
public void sessionIdle(IoSession session, IdleStatus status) {
byte[] buf = new byte[8];
ByteUtil.write(buf, 0, 0);
ByteUtil.write(buf, 4, 1);
session.write(buf);
}
class DataXceiver extends Thread{
private IoSession streamSession;
private DataInputStream in;
private DataOutputStream out;
public DataXceiver(IoSession session,InputStream in,OutputStream out){
this.streamSession = session;
this.in = new DataInputStream(in);
this.out = new DataOutputStream(out);
}
public void run() {
while(true){
try {
//Thread.sleep(10000);
//byte[] msg = new byte[1024];
//int bytes = in.read(msg);
//if(bytes>0){
//System.out.println("request bytes size:"+bytes);
String fileName = in.readUTF();
if(fileName!=null){
System.out.println("request read file:"+fileName);
//this.streamSession.write();
File sendFile = new File("E://cmg-projects//bison//"+fileName);
this.out.writeLong(sendFile.length());
streamSession.write(sendFile);
//this.out.writeInt(0);//end
}
//}
// FileInputStream fis = new FileInputStream(sendFile);
// ByteArrayOutputStream bout = new ByteArrayOutputStream();
// byte[] data = new byte[2048];
// int size = 0;
// int off = 0;
// while((size=fis.read(data))>0){
// bout.write(data,off,size);
// off+=size;
// }
// byte[] content = bout.toByteArray();
// System.out.println("file size is:"+content.length);
//this.out.write(content);
//msg = null;
} catch (Exception e) {
e.printStackTrace();
} finally {
}
}
}
}
}