content: /*
   * Copyright (C) 2010 Moduad Co., Ltd.
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *      http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  package net.cgt.weixin.service;
  
  import java.util.Properties;
  
  import net.cgt.weixin.Constants;
  import net.cgt.weixin.utils.L;
  import net.cgt.weixin.utils.LogUtil;
  import net.cgt.weixin.utils.SpUtil;
  
  import org.jivesoftware.smack.ConnectionConfiguration;
  import org.jivesoftware.smack.ConnectionConfiguration.SecurityMode;
  import org.jivesoftware.smack.XMPPConnection;
  import org.jivesoftware.smack.XMPPException;
  
  import android.app.Activity;
  import android.content.Context;
  
  /**
   * 连接服务器登陆服务
   * 
   * @author lijian
   * @date 2014-11-22
   */
  public class ClientConService {
  
  	private static final String LOGTAG = LogUtil.makeLogTag(ClientConService.class);
  
  	private Context context;
  
  	/** 加载配置文件 **/
  	private Properties props;
  
  	private String version = "0.0.1";
  
  	private String apiKey;
  
  	private String xmppHost;
  
  	private String xmppPort;
  
  	/** 回调Activity的包名 **/
  	private String callbackActivityPackageName;
  
  	/** 回调Activity的全类名 **/
  	private String callbackActivityClassName;
  
  	private XMPPConnection connection;
  
  	public ClientConService(Context context) {
  		this.context = context;
  		init(context);
  	}
  
  	private void init(Context context) {
  		if (context instanceof Activity) {
  			L.i(LOGTAG, "Callback Activity...");
  			Activity callbackActivity = (Activity) context;
  			callbackActivityPackageName = callbackActivity.getPackageName();
  			callbackActivityClassName = callbackActivity.getClass().getName();
  		}
  
  		props = loadProperties();
  		apiKey = props.getProperty("apiKey", "");
  		xmppHost = props.getProperty("xmppHost", "127.0.0.1");
  		xmppPort = props.getProperty("xmppPort", "5222");
  		L.i(LOGTAG, "apiKey=" + apiKey);
  		L.i(LOGTAG, "xmppHost=" + xmppHost);
  		L.i(LOGTAG, "xmppPort=" + xmppPort);
  
  		SpUtil sp = new SpUtil(context);
  		sp.saveString(Constants.API_KEY, apiKey);
  		sp.saveString(Constants.VERSION, version);
  		sp.saveString(Constants.XMPP_HOST, xmppHost);
  		sp.saveInt(Constants.XMPP_PORT, Integer.parseInt(xmppPort));
  		sp.saveString(Constants.CALLBACK_ACTIVITY_PACKAGE_NAME, callbackActivityPackageName);
  		sp.saveString(Constants.CALLBACK_ACTIVITY_CLASS_NAME, callbackActivityClassName);
  	}
  
  	public boolean login(String account, String password) {
  		ConnectionConfiguration connConfig = new ConnectionConfiguration(xmppHost, Integer.parseInt(xmppPort));
  		//设置安全模式
  		connConfig.setSecurityMode(SecurityMode.required);
  		//设置SASL认证是否启用
  		connConfig.setSASLAuthenticationEnabled(false);
  		//设置数据压缩是否启用
  		connConfig.setCompressionEnabled(false);
  		//是否启用调试模式
  		connConfig.setDebuggerEnabled(true);
  
  		/** 创建connection连接 */
  		XMPPConnection connection = new XMPPConnection(connConfig);
  		setConnection(connection);
  
  		try {
  			// 连接到服务器
  			connection.connect();
  			L.i(LOGTAG, "XMPP connected successfully");
  
  			//登陆
  			connection.login(account, password);
  
  			/** 开启读写线程，并加入到管理类中 */
  			//ClientSendThread cst = new ClientSendThread(connection);
  			//cst.start();
  			//ManageClientThread.addClientSendThread(account,cst);
  
  			return true;
  		} catch (XMPPException e) {
  			L.e(LOGTAG, "XMPP connection failed", e);
  		}
  		return false;
  	}
  
  	/**
  	 * 得到xmpp连接
  	 * 
  	 * @return
  	 */
  	public XMPPConnection getConnection() {
  		return connection;
  	}
  
  	/**
  	 * 设置连接
  	 * 
  	 * @param connection 一个xmpp连接
  	 */
  	public void setConnection(XMPPConnection connection) {
  		this.connection = connection;
  	}
  
  	/**
  	 * 加载Properties配置文件
  	 * 
  	 * @return
  	 */
  	private Properties loadProperties() {
  		Properties props = new Properties();
  		try {
  			int id = context.getResources().getIdentifier("weixin", "raw", context.getPackageName());
  			props.load(context.getResources().openRawResource(id));
  		} catch (Exception e) {
  			L.e(LOGTAG, "Could not find the properties file.", e);
  		}
  		return props;
  	}
  }
  