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

📄 evauser.cpp

📁 linux下的eva源代码
💻 CPP
字号:
/*************************************************************************** *   Copyright (C) 2004 by yunfan                                          * *   yunfan_zg@163.com                                                     * *                                                                         * *   This program is free software; you can redistribute it and/or modify  * *   it under the terms of the GNU General Public License as published by  * *   the Free Software Foundation; either version 2 of the License, or     * *   (at your option) any later version.                                   * *                                                                         * *   This program is distributed in the hope that it will be useful,       * *   but WITHOUT ANY WARRANTY; without even the implied warranty of        * *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         * *   GNU General Public License for more details.                          * *                                                                         * *   You should have received a copy of the GNU General Public License     * *   along with this program; if not, write to the                         * *   Free Software Foundation, Inc.,                                       * *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             * ***************************************************************************/ #include "evauser.h"#include "evausersetting.h"#include "evaqtutil.h"#include "evautil.h"#include <string.h>#include <qevent.h>std::string EvaUser::qunName = "Qun List";std::string EvaUser::anonymousName = "Anonymous";std::string EvaUser::blackName = "Black List";EvaUser::EvaUser(const unsigned int id, const std::string &password){		char *tmp = (char *)malloc(password.length() * sizeof(char));        memcpy(tmp, password.c_str(), password.length());	qqNum = id;	md5Password = new char[16];	memcpy(md5Password, EvaUtil::doMd5Md5(tmp, password.length()), 16);	timeOnline = 0;	level = 0;	hoursToLevelUp = 0;	mSignature = "";	mSignatureModifyTime = 0;	status = Eva_Offline;	groupNames.clear();	setting = new EvaUserSetting(id);	setting->loadSettings();	isBuddyListLoaded = false;	isQunListLoaded = false;	mLoginManager = new EvaLoginProcess();}EvaUser::EvaUser(const unsigned int id, const char *md5Password){	qqNum = id;		this->md5Password = new char[16];	memcpy(this->md5Password, md5Password, 16);		timeOnline = 0;	level = 0;	hoursToLevelUp = 0;	mSignature = "";	mSignatureModifyTime = 0;		status = Eva_Offline;	groupNames.clear();	setting = new EvaUserSetting(id);	mLoginManager = new EvaLoginProcess();}EvaUser::~EvaUser(){	delete md5Password;	delete setting;}char EvaUser::getStatusCode(const UserStatus status) {	char statusCode;	switch(status){	case Eva_Online:		statusCode = QQ_FRIEND_STATUS_ONLINE;		break;	case Eva_Offline:		statusCode = QQ_FRIEND_STATUS_OFFLINE;		break;	case Eva_Invisible:		statusCode = QQ_FRIEND_STATUS_INVISIBLE;		break;	case Eva_Leave:		statusCode = QQ_FRIEND_STATUS_LEAVE;		break;	default:		statusCode = QQ_FRIEND_STATUS_OFFLINE;	}	return statusCode;}const bool EvaUser::newGroup( const std::string & name ){	groupNames.push_back(name);	return true;}void EvaUser::clearGroupNames(){	std::string buddy = groupNameAtIndex(0); 	groupNames.clear();	groupNames.push_back(buddy);	}void EvaUser::removeGroupName(const int index){	if(index == 0 ) return; // the first group name cannot be removed	if((uint)index >= groupNames.size()) return; 	std::list<std::string>::iterator iter;	iter = groupNames.begin();	for(int i=0; i<index; i++)		iter++;	groupNames.erase(iter);}const int EvaUser::getGroupIndexOf(const std::string &name){	std::list<std::string>::iterator iter;	int i=0;		for(iter=groupNames.begin(); iter != groupNames.end(); ++iter){		if(name== *iter) break;		++i;	}	if((uint)i>= groupNames.size()) 		return -1;	else 		return i;	}void EvaUser::updateGroupName(const std::string &newName, const int index){	if(index == 0 ) return; // the first group name cannot be removed	if((uint)index >= groupNames.size()) return; 	std::list<std::string>::iterator iter;	iter = groupNames.begin();	int i;	for(i=0; i<index; i++){		iter++;	}	groupNames.insert(iter, newName);	groupNames.erase(iter);}const std::string EvaUser::groupNameAtIndex( const int index ){	if(index == anonymousIndex) return anonymousName;	if(index == blackIndex) return blackName;		if((uint)index>= groupNames.size()) return "My Buddy";		std::list<std::string>::iterator iter;	int i=0;		for(iter=groupNames.begin(); iter != groupNames.end(); ++iter){		if(i==index) break;		++i;	}	return *iter;}const bool EvaUser::loadGroupedBuddyList(){	if(setting->loadBuddyList(this)){		isBuddyListLoaded = true;	}else{		isBuddyListLoaded = false;	}	return isBuddyListLoaded;}const bool EvaUser::saveGroupedBuddyList(){	return setting->saveBuddyList(this, groupNames, details, myFriends, mExtraInfo, mSignature, mSignatureModifyTime);}void EvaUser::customEvent( QCustomEvent * e ){	if(e->type() == EvaLoadGroupedUsersEvent){		EvaBuddyListEvent *ge = (EvaBuddyListEvent *)e;		details = ge->getMyInfo();		groupNames = ge->getGroupNames();		myFriends = ge->getMyFriendList();		mExtraInfo = ge->getExtraInfo();		mSignature = ge->getSignature();		mSignatureModifyTime = ge->getSignatureTime();		emit loadGroupedBuddiesReady();	}	if(e->type() == EvaLoadQunUsersEvent){		EvaQunListEvent *gl = (EvaQunListEvent *)e;		qunList = gl->getQunList();		emit loadQunListReady();	}}const bool EvaUser::loadQunList( ){	if(setting->loadQunList(this)){		isQunListLoaded = true;	}else{		isQunListLoaded = false;	}	return isQunListLoaded;}const bool EvaUser::saveQunList( ){	return setting->saveQunList(this, qunList);}void EvaUser::addLoginVerifyInfo( const GraphicVerifyCode & info ){	m_CodeList.push_back(info);}const GraphicVerifyCode EvaUser::getLoginVerifyInfo( ){	GraphicVerifyCode code;	if(m_CodeList.empty()) return code;	return m_CodeList.front();}GraphicVerifyCode EvaUser::getNextLoginVerifyInfo( ){	GraphicVerifyCode code;	if(m_CodeList.empty()) return code;	code = m_CodeList.front();	m_CodeList.pop_front();	return code;}void EvaUser::clearAllVerifyCodes( ){	if(m_CodeList.size())		m_CodeList.clear();}/** ==========================================================================  */EvaLoginProcess::EvaLoginProcess( ){	initFlags();}const int EvaLoginProcess::nextNumOperation( ){	int num = 0;	switch(mNextStep){	case 0:	case 1:		num = 1;		break;	case 2:		num = 4;		break;	}	return num;}const short EvaLoginProcess::nextStep( ){	short cmd = -1;	switch(mNextStep){	case 0:		cmd = mCommands[0];		break;	case 1:		cmd = mCommands[1];		break;	case 2:{		if(mFlags[mCommands[2]]){			if(mFlags[mCommands[3]]){				if(mFlags[mCommands[4]]){					if(!mFlags[mCommands[5]])						cmd = mCommands[5];				}else					cmd = mCommands[4];			}else				cmd = mCommands[3];		}else			cmd = mCommands[2];		cmd = mCommands[2 + mCurrentStepTwo];		mCurrentStepTwo = (mCurrentStepTwo+1) % 4;		}		break;	}	return cmd;}void EvaLoginProcess::clearCommandFlag( const short cmd ){	switch(cmd){	case QQ_CMD_REQUEST_LOGIN_TOKEN:		mFlags[cmd] = false;		mNextStep = 0;	case QQ_CMD_LOGIN:		mFlags[cmd] = false;		mNextStep = 1;		break;	case QQ_CMD_REQUEST_KEY:	case QQ_CMD_GET_USER_INFO:	case QQ_CMD_CHANGE_STATUS:	case QQ_CMD_GET_FRIEND_LIST:		mFlags[cmd] = false;		mNextStep = 2;	}}void EvaLoginProcess::finishedCommand( const short cmd ){	if(isReady()) return;	switch(cmd){	case QQ_CMD_REQUEST_LOGIN_TOKEN:	case QQ_CMD_LOGIN:		mFlags[cmd] = true;		mNextStep++;		break;	case QQ_CMD_REQUEST_KEY:	case QQ_CMD_GET_USER_INFO:	case QQ_CMD_CHANGE_STATUS:	case QQ_CMD_GET_FRIEND_LIST:		mFlags[cmd] = true;		if(mCurrentStepTwo==4) mNextStep++;	}	if(isReady())		emit processReady();}void EvaLoginProcess::initFlags( ){	mNextStep = 0;	mCurrentStepTwo = 0;	mCommands[0] = QQ_CMD_REQUEST_LOGIN_TOKEN;	mCommands[1] = QQ_CMD_LOGIN;	mCommands[2] = QQ_CMD_REQUEST_KEY;  // note this is only for key type 04	mCommands[3] = QQ_CMD_GET_USER_INFO;	mCommands[4] = QQ_CMD_CHANGE_STATUS;	mCommands[5] = QQ_CMD_GET_FRIEND_LIST;		mFlags[mCommands[0]] = false;	mFlags[mCommands[1]] = false;	mFlags[mCommands[2]] = false;	mFlags[mCommands[3]] = false;	mFlags[mCommands[4]] = false;	mFlags[mCommands[5]] = false;}void EvaLoginProcess::reset( ){	initFlags();}const bool EvaLoginProcess::isReady( ){	return (mFlags[QQ_CMD_REQUEST_LOGIN_TOKEN] && mFlags[QQ_CMD_LOGIN] && 		mFlags[QQ_CMD_REQUEST_KEY] && mFlags[QQ_CMD_GET_USER_INFO] && 		mFlags[QQ_CMD_CHANGE_STATUS] && mFlags[QQ_CMD_GET_FRIEND_LIST]);}const bool EvaLoginProcess::isCommandFinished(const short cmd){	return mFlags[cmd];}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -