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

📄 clientsessionhandler.java.svn-base

📁 华为短信网关实现的功能,包括服务器端和客户端代码
💻 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 + -