📄 clientsessionhandler.java.svn-base
字号:
package com.fetion.cmpp.client;
import java.net.InetSocketAddress;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.mina.common.ConnectFuture;
import org.apache.mina.common.IdleStatus;
import org.apache.mina.common.IoHandlerAdapter;
import org.apache.mina.common.IoSession;
import org.apache.mina.common.RuntimeIoException;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.serialization.ObjectSerializationCodecFactory;
import org.apache.mina.filter.logging.LoggingFilter;
import org.apache.mina.transport.socket.SocketConnector;
import org.apache.mina.transport.socket.nio.NioSocketConnector;
import com.fetion.cmpp.common.Message;
import com.fetion.cmpp.common.ServerResponse;
/**
* 客户端连接到服务器端的处理类
* @author Administrator
*
*/
public class ClientSessionHandler extends IoHandlerAdapter {
private static Log logger = LogFactory.getLog(ClientSessionHandler.class);
public static final int CONNECT_TIMEOUT = 30;
private String host;
private int port;
private SocketConnector connector;
private IoSession session;
private CmppListener listener;
private boolean finish =false;
public ClientSessionHandler(String host, int port,CmppListener listener) {
this.host = host;
this.port = port;
this.listener = listener ;
connector = new NioSocketConnector();
connector.getFilterChain().addLast("codec", new ProtocolCodecFilter(new ObjectSerializationCodecFactory()));
connector.getFilterChain().addLast("logger", new LoggingFilter());
connector.setHandler(this);
// connector.setConnectTimeout(CONNECT_TIMEOUT);
}
public boolean isFinish() {
return finish;
}
public void setFinish(boolean finish) {
this.finish = finish;
}
public boolean isConnected() {
return (session != null && session.isConnected());
}
public boolean connect() {
boolean connected = false;
ConnectFuture connectFuture = connector.connect(new InetSocketAddress(host, port));
connectFuture.awaitUninterruptibly();
try {
session = connectFuture.getSession();
connected = true;
}
catch (RuntimeIoException e) {
connector.dispose();
listener.onException(e);
}
return connected;
}
public void disconnect() {
if (session != null) {
session.closeOnFlush().awaitUninterruptibly();
if(connector != null)
connector.dispose();
session = null;
}
}
public void exceptionCaught(IoSession session, Throwable throwable)
throws Exception {
listener.onException(throwable);
}
public void sendCmppMessage(Message message) {
if (session == null) {
//noinspection ThrowableInstanceNeverThrown
listener.onException(new Throwable("not connected"));
} else {
session.write(message);
}
}
public void messageReceived(IoSession session, Object returnMessage)
throws Exception {
ServerResponse serverResponse = (ServerResponse)returnMessage;
listener.onServerResponse(serverResponse);
finish = true;
logger.info("serverResponse : "+serverResponse.getStatus());
}
public void sessionClosed(IoSession arg0) throws Exception {
listener.sessionClosed();
}
public void sessionOpened(IoSession session) throws Exception {
listener.sessionOpened();
}
public void sessionCreated(IoSession session) throws Exception {
// session.write(message);
}
public void sessionIdle(IoSession arg0, IdleStatus arg1) throws Exception {
// TODO Auto-generated method stub
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -