package com.partynetwork.iparty.login; import org.jivesoftware.smack.XMPPConnection; import org.jivesoftware.smack.XMPPException; import org.jivesoftware.smack.packet.Presence; import org.jivesoftware.smack.packet.XMPPError; import com.lidroid.xutils.util.LogUtils; import com.openfire.manager.OfflineMsgManager; import com.openfire.manager.XmppConnection; import com.openfire.service.IMChatService; import com.openfire.service.ReConnectService; import com.partynetwork.dataprovider.util.L; import com.partynetwork.dataprovider.util.MD5Util; import com.partynetwork.iparty.app.AppContext; import com.partynetwork.iparty.app.AppManager; import com.partynetwork.iparty.imessage.OpenfireConstant; import android.content.Context; import android.content.Intent; import android.os.AsyncTask; /** * * 登录异步任务. * * @author shimiso */ public class OpenfireLoginTask extends AsyncTask<String, Integer, Integer> { private Context context; private String account; private String password; public OpenfireLoginTask(Context context, String account, String password) { this.context = context; this.account = account; this.password = password; } @Override protected void onPreExecute() { super.onPreExecute(); } @Override protected Integer doInBackground(String... params) { return login(); } @Override protected void onProgressUpdate(Integer... values) { } @Override protected void onPostExecute(Integer result) { switch (result) { case OpenfireConstant.LOGIN_SECCESS: // 登录成功 AppManager.getAppManager().startService(context); L.i("openfire登陆成功!"); System.out.println("openfire登陆成功!"); break; case OpenfireConstant.LOGIN_ERROR_ACCOUNT_PASS:// 账户或者密码错误 L.i("openfire账户或者密码错误!"); System.out.println("openfire账户或者密码错误!"); break; case OpenfireConstant.SERVER_UNAVAILABLE:// 服务器连接失败 L.i("openfire服务器连接失败!"); System.out.println("openfire服务器连接失败!"); login(); break; case OpenfireConstant.LOGIN_ERROR:// 未知异常 L.i("openfire未知异常!"); System.out.println("openfire未知异常!"); login(); break; } super.onPostExecute(result); } // 登录 private Integer login() { try { XmppConnection.getInstance().regist(account, password); XMPPConnection connection = XmppConnection.getInstance() .getConnection(); System.out.println("############account:"+account); System.out.println("############password:"+password); connection.login(account, password); // 登录 OfflineMsgManager.getInstance(context).dealOfflineMsg(connection);// 处理离线消息 connection.sendPacket(new Presence(Presence.Type.available)); // if (false) {// 隐身登录 // Presence presence = new Presence(Presence.Type.unavailable); // Collection<RosterEntry> rosters = connection.getRoster() // .getEntries(); // for (RosterEntry rosterEntry : rosters) { // presence.setTo(rosterEntry.getUser()); // connection.sendPacket(presence); // } // } System.out.println("openfire登陆成功"); return OpenfireConstant.LOGIN_SECCESS; } catch (Exception xee) { if (xee instanceof XMPPException) { XMPPException xe = (XMPPException) xee; final XMPPError error = xe.getXMPPError(); int errorCode = 0; if (error != null) { errorCode = error.getCode(); } if (errorCode == 401) { return OpenfireConstant.LOGIN_ERROR_ACCOUNT_PASS; } else if (errorCode == 403) { return OpenfireConstant.LOGIN_ERROR_ACCOUNT_PASS; } else { return OpenfireConstant.SERVER_UNAVAILABLE; } } else { return OpenfireConstant.LOGIN_ERROR; } } } }