Apache Mina 2.x 简易入门解析(二)

2014-11-24 09:10:04 · 作者: · 浏览: 11
}

@Override
public void dispose(IoSession arg0) throws Exception {
// TODO Auto-generated method stub

}

@Override
public void finishDecode(IoSession arg0, ProtocolDecoderOutput arg1)
throws Exception {
// TODO Auto-generated method stub

}

}
    2)建立Encoder (MyTextLineEncoder)
      实现了ProtocolEncoder接口
View Code
package com.mai.mina.diyCodecFilter;

import java.nio.charset.Charset;

import org.apache.mina.core.buffer.IoBuffer;
import org.apache.mina.core.session.IoSession;
import org.apache.mina.filter.codec.ProtocolEncoder;
import org.apache.mina.filter.codec.ProtocolEncoderOutput;
import org.apache.mina.filter.codec.textline.LineDelimiter;

public class MyTextLineEncoder implements ProtocolEncoder{

Charset charset = Charset.forName("UTF-8");

@Override
public void dispose(IoSession session) throws Exception {
// TODO Auto-generated method stub

}

@Override
public void encode(IoSession session, Object message, ProtocolEncoderOutput output)
throws Exception {
// TODO Auto-generated method stub
IoBuffer buf = IoBuffer.allocate(100).setAutoExpand(true);

buf.putString(message.toString(), charset.newEncoder());

buf.putString(LineDelimiter.DEFAULT.getValue(), charset.newEncoder());
buf.flip();

output.write(buf);

}

}
    3)建立MyTextLineCodecFactory
      实现了ProtocolCodecFactory接口

package com.mai.mina.diyCodecFilter;

import org.apache.mina.core.session.IoSession;
import org.apache.mina.filter.codec.ProtocolCodecFactory;
import org.apache.mina.filter.codec.ProtocolDecoder;
import org.apache.mina.filter.codec.ProtocolEncoder;

public class MyTextLineCodecFactory implements ProtocolCodecFactory{

@Override
public ProtocolDecoder getDecoder(IoSession arg0) throws Exception {
// TODO Auto-generated method stub
return new MyTextLineDecoder();
}

@Override
public ProtocolEncoder getEncoder(IoSession arg0) throws Exception {
// TODO Auto-generated method stub
return new MyTextLineEncoder();
}

}


  2.2.2 建立服务器端资源(包括Acceptor的配置、Handler建立)
    1). 建立自定义IoHandler(MyServerHandleDemo1)
      实现了IoHandler接口。
    
View Code
package com.mai.mina.diyChat;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Collection;
import java.util.Date;
import java.util.logging.Logger;

import org.apache.mina.core.future.CloseFuture;
import org.apache.mina.core.future.IoFuture;
import org.apache.mina.core.future.IoFutureListener;
import org.apache.mina.core.service.IoHandler;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.core.session.IoSession;


public class MyServerHandleDemo1 implements IoHandler{

private Logger logger = Logger.getLogger(this.getClass().getName());

@Override
public void exceptionCaught(IoSession session, Throwable arg1)
throws Exception {
// TODO Auto-generated method stub
logger.warning("服务器启动发生异常,have a exception : " + arg1.getMessage());
}

@Override
public void messageReceived(IoSession session, Object message) throws Exception {
// TODO Auto-generated method stub
String messageStr = message.