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;
}
}
}
}