All pastes #1769132 Raw Edit

Mina basic usage example

public java v1 · immutable
#1769132 ·published 2010-01-28 09:16 UTC
rendered paste body
BufferCodec.javaimport org.apache.mina.core.buffer.IoBuffer;import org.apache.mina.core.session.IoSession;import org.apache.mina.filter.codec.CumulativeProtocolDecoder;import org.apache.mina.filter.codec.ProtocolCodecFactory;import org.apache.mina.filter.codec.ProtocolDecoder;import org.apache.mina.filter.codec.ProtocolDecoderOutput;import org.apache.mina.filter.codec.ProtocolEncoder;import org.apache.mina.filter.codec.ProtocolEncoderAdapter;import org.apache.mina.filter.codec.ProtocolEncoderOutput;/** * @author omry * @date Jan 21, 2010 */public class BufferCodec implements ProtocolCodecFactory{	BufferDecoder m_decoder;	BufferEncoder m_encoder;	public BufferCodec()	{		m_decoder = new BufferDecoder();		m_encoder = new BufferEncoder();	}	@Override	public ProtocolDecoder getDecoder(IoSession session) throws Exception	{		return m_decoder;	}	@Override	public ProtocolEncoder getEncoder(IoSession session) throws Exception	{		return m_encoder;	}	private static class BufferEncoder extends ProtocolEncoderAdapter	{		@Override		public void encode(IoSession session, Object message, ProtocolEncoderOutput out) throws Exception		{			byte[] buf = (byte[]) message;			IoBuffer buffer = IoBuffer.allocate(buf.length + 4, false);			buffer.putInt(buf.length);			buffer.put(buf);			buffer.flip();			out.write(buffer);		}	}	private static class BufferDecoder extends CumulativeProtocolDecoder	{		@Override		protected boolean doDecode(IoSession session, IoBuffer in, ProtocolDecoderOutput out) throws Exception		{			if (in.prefixedDataAvailable(4))			{				int length = in.getInt();				byte[] bytes = new byte[length];				in.get(bytes);				out.write(bytes);				return true;			}			else			{				return false;			}		}	}}Client.javaimport java.io.IOException;import java.net.InetSocketAddress;import java.net.UnknownHostException;import org.apache.mina.core.future.ConnectFuture;import org.apache.mina.core.service.IoHandlerAdapter;import org.apache.mina.core.session.IoSession;import org.apache.mina.filter.codec.ProtocolCodecFilter;import org.apache.mina.transport.socket.SocketConnector;import org.apache.mina.transport.socket.nio.NioSocketConnector;/** * @author omry  * @date Jan 21, 2010 */public class Client{	public static void main(String[] args) throws UnknownHostException, IOException	{		SocketConnector connector = new NioSocketConnector();		connector.getFilterChain().addLast("codec", new ProtocolCodecFilter(new BufferCodec()));		connector.setHandler(new IoHandlerAdapter()		{			@Override			public void messageReceived(IoSession session, Object message) throws Exception			{				byte[] res = (byte[]) message;				System.out.println("message received : " + new String(res));			}		});		        ConnectFuture cf = connector.connect(new InetSocketAddress("localhost", 8010));        // Wait for the connection attempt to be finished.        cf.awaitUninterruptibly();        cf.getSession().write("hello".getBytes());;        cf.getSession().getCloseFuture().awaitUninterruptibly();        connector.dispose();	}}Server.javaimport java.net.InetSocketAddress;import org.apache.mina.core.service.IoAcceptor;import org.apache.mina.core.service.IoHandlerAdapter;import org.apache.mina.core.session.IdleStatus;import org.apache.mina.core.session.IoSession;import org.apache.mina.filter.codec.ProtocolCodecFilter;import org.apache.mina.filter.logging.LoggingFilter;import org.apache.mina.transport.socket.nio.NioSocketAcceptor;/** * @author omry * @date Jan 21, 2010 */public class Server{	public static void main(String[] args) throws Exception	{		IoAcceptor acceptor = new NioSocketAcceptor();		acceptor.getFilterChain().addLast("logger", new LoggingFilter());		acceptor.getFilterChain().addLast("codec", new ProtocolCodecFilter(new BufferCodec()));		acceptor.getSessionConfig().setReadBufferSize(32000);		acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10);		acceptor.setHandler(new MyIOHandler());		acceptor.bind(new InetSocketAddress(8010));	}		static final class MyIOHandler extends IoHandlerAdapter	{		@Override		public void messageReceived(IoSession session, Object message) throws Exception		{			byte[] buf = (byte[]) message;			System.out.println("messageReceived : " + new String(buf));			session.write(new String(buf).toUpperCase().getBytes());			session.close(false);		}	}}