www.pudn.com > cmpp.rar > CmppClient.java


package com.fetion.cmpp.client; 
 
import org.apache.commons.logging.Log; 
import org.apache.commons.logging.LogFactory; 
 
import com.fetion.cmpp.client.conf.ClientConfig; 
import com.fetion.cmpp.client.conf.ClientConfigUtil; 
import com.fetion.cmpp.common.Message; 
import com.fetion.cmpp.common.ServerResponse; 
import com.fetion.cmpp.common.util.ConfigException; 
 
/** 
 * 客户端的核心程序 
 * 包括:发送程序和接收服务器端的响应的程序 
 * @author Administrator 
 * 
 */ 
public class CmppClient implements CmppListener,CmppClientSend { 
	private  Log logger = LogFactory.getLog(getClass()); 
 
	private String host; 
 
	private int port; 
 
	private ClientSessionHandler clientHandler; 
 
	private ServerResponse serverResponse; 
 
	public CmppClient() { 
		ClientConfig config; 
		try { 
			config = ClientConfigUtil.loadConfig(); 
			host = config.getCmppServerName(); 
			port = config.getCmppServerPort(); 
			clientHandler = new ClientSessionHandler(host, port, this); 
		} catch (ConfigException e) { 
			// TODO Auto-generated catch block 
			e.printStackTrace(); 
		} 
	} 
 
	public void setServerResponse(ServerResponse serverResponse) { 
		this.serverResponse = serverResponse; 
	} 
 
	public ServerResponse getServerResponse() { 
		return serverResponse; 
	} 
 
	public void onException(Throwable throwable) { 
		logger.info(throwable.toString()); 
		throwable.printStackTrace(); 
 
	} 
 
	public void onServerResponse(ServerResponse serverResponse) { 
		setServerResponse(serverResponse); 
	} 
 
	public void sessionClosed() { 
		logger.info("session closed"); 
 
	} 
 
	public void sessionOpened() { 
		logger.info("session Opened"); 
 
	} 
 
	private void sendCmppMessage(Message message) { 
		clientHandler.sendCmppMessage(message); 
	} 
 
	public boolean connect() { 
		return clientHandler.connect(); 
	} 
 
	public void disconnectAfterResponse() { 
		while (!clientHandler.isFinish()) 
			try { 
				Thread.sleep(100); 
			} catch (InterruptedException e) { 
				// TODO Auto-generated catch block 
				e.printStackTrace(); 
			} 
		clientHandler.disconnect(); 
	} 
 
	public void disconnectImmedia() { 
		clientHandler.disconnect(); 
	} 
 
	public int sendMessage(Message message) { 
		if (connect()) { 
			sendCmppMessage(message); 
			disconnectAfterResponse(); 
			if (serverResponse != null) 
				return serverResponse.getStatus(); 
			else 
				return ClientConstants.connect_closed_error; 
		}else{ 
			return ClientConstants.connect_server_error; 
		} 
	} 
}