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

📄 evafriendlist.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 "evafriendlist.h" #include <stdio.h>QQFriend::sortItem QQFriend::field2Sort = Sort_Nick;QQFriend::QQFriend(){	initalizeBuddy();} QQFriend::QQFriend(const unsigned int qqid, const unsigned short qqFace){	initalizeBuddy( qqid, qqFace);}QQFriend::QQFriend(const QQFriend &rhs){	*this = rhs;}void QQFriend::setFriendItem( const FriendItem &item){	qqNum = item.getQQ();	face = item.getFace() ;	age = item.getAge();	gender = item.getGender();	nick = item.getNick();	extFlag = item.getExtFlag();	commonFlag = item.getCommonFlag();	loginTime = item.getLoginTime();	idleTime = item.getIdleTime();	lastRefreshTime = item.getLastRefreshTime();}void QQFriend::setFriendOnlineEntry( const FriendOnlineEntry &entry){	if(qqNum != entry.getQQ()) return;	unknown4 = entry.getUnknown1_4();	IP = entry.getIP();  // 4 bytes	port = entry.getPort();	unknown11 = entry.getUnknown2_11();	status = entry.getStatus();	unknown13_14 = entry.getUnknown3_13_14();	memcpy(unknownKey, entry.getUnknownKey(), QQ_KEY_LENGTH);		unknown31_32 = entry.getUnknown4_31_32();	onlineExtFlag = entry.getExtFlag();	onlineCommonFlag = entry.getCommFlag();	unknown35_36 = entry.getUnknown5_35_36();}void QQFriend::setUserInformation( const ContactInfo &info){	userInfo = info;	if(info.count()<5) {		return;	}	face = (unsigned short)(atoi(info.at(ContactInfo::Info_face).c_str()));	age = (char)(atoi(info.at(ContactInfo::Info_age).c_str()));	gender = (char)(atoi(info.at(ContactInfo::Info_gender).c_str()));	nick  = info.at(ContactInfo::Info_nick);}QQFriend &QQFriend::operator=(const QQFriend &rhs){	qqNum = rhs.getQQ();	face = rhs.getFace();	age = rhs.getAge();	gender = rhs.getGender();	nick = rhs.getNick();		extFlag = rhs.getExtFlag();    	commonFlag = rhs.getCommonFlag();  	loginTime = rhs.getLoginTime();	idleTime = rhs.getIdleTime();	lastRefreshTime = rhs.getLastRefreshTime();		//int qqNum;	unknown4 = rhs.getUnknown1_4();	IP = rhs.getIP();  // 4 bytes	port = rhs.getPort();	unknown11 = rhs.getUnknown2_11();	status = rhs.getStatus();	unknown13_14 = rhs.getUnknown3_13_14();	memcpy(unknownKey, rhs.getUnknownKey(), QQ_KEY_LENGTH);	unknown31_32 = rhs.getUnknown4_31_32();	onlineExtFlag = rhs.getOnlineExtFlag();	onlineCommonFlag = rhs.getOnlineCommFlag();	unknown35_36 = rhs.getUnknown5_35_36();		timeOnline = rhs.getOnlineTime();	level = rhs.getLevel();	hoursToLevelUp = rhs.getHoursToLevelUp();		clientVersion = rhs.getVersion();		mExtraInfo = rhs.getExtraInfo();	mSignature = rhs.getSignature();	mSignatureModifyTime = rhs.getSignatureModifyTime();	m_Memo = rhs.getMemo();	memcpy(fileSessionKey, rhs.getFileSessionKey(), QQ_KEY_LENGTH);		userInfo = rhs.getUserInformation();		field2Sort = rhs.getSortField();		groupIndex = rhs.getGroupIndex();		m_Sequence = rhs.getSequence();	m_ChatFontSize = rhs.getChatFontSize();	m_ChatFontColor = rhs.getChatFontColor();        return *this;}int QQFriend::operator==(const QQFriend &rhs) const {	if( qqNum != rhs.getQQ()) return 0;	return 1;}// for this part, we compare the field by field2Sortint QQFriend::operator<(const QQFriend &rhs) const {	switch(field2Sort){		case Sort_QQ:			if(qqNum< rhs.getQQ()) return 1;			break;		case Sort_Nick:			if(nick < rhs.getNick()) return 1;			break;		case Sort_Status:			if(status == rhs.getStatus())  return 1;			if(status == QQ_FRIEND_STATUS_ONLINE) return 1;			if(rhs.getStatus() == QQ_FRIEND_STATUS_ONLINE) return 0;			if(status == QQ_FRIEND_STATUS_LEAVE)  return 1;			if(rhs.getStatus() == QQ_FRIEND_STATUS_LEAVE) return 0;			return 1;	}	return 0;}void QQFriend::initalizeBuddy(const unsigned int qqid, const unsigned short qqFace){	qqNum = qqid;	face = qqFace;	age = BUDDY_INVALID_FIELD;	gender = BUDDY_INVALID_FIELD;	char *temp = (char*)malloc(20 * sizeof(char));	if(temp==NULL) {		fprintf(stderr, "Memomry not enough, exit.\n");		exit(0);	}	sprintf(temp,"%d",qqid);	nick.assign(temp);	free(temp);	extFlag = BUDDY_INVALID_FIELD;	commonFlag = BUDDY_INVALID_FIELD;	loginTime = BUDDY_INVALID_FIELD;	idleTime = BUDDY_INVALID_FIELD;	lastRefreshTime = BUDDY_INVALID_FIELD;		unknown4 = BUDDY_INVALID_FIELD;	IP = 0;	port = BUDDY_INVALID_FIELD;	unknown11 = BUDDY_INVALID_FIELD;	status = BUDDY_INVALID_FIELD;	unknown13_14 = BUDDY_INVALID_FIELD;		memset(unknownKey, 0, QQ_KEY_LENGTH);	unknown31_32 = BUDDY_INVALID_FIELD;	onlineExtFlag = BUDDY_INVALID_FIELD;	onlineCommonFlag = BUDDY_INVALID_FIELD;	unknown35_36 = BUDDY_INVALID_FIELD;		mExtraInfo = 0;	mSignature = "";	mSignatureModifyTime = 0;	m_Memo.name = "";	m_Memo.telephone = "";	m_Memo.mobile = "";	m_Memo.address = "";	m_Memo.email = "";	m_Memo.zipcode = "";	m_Memo.note = "";		clientVersion = BUDDY_INVALID_FIELD;	memset(fileSessionKey, 0, QQ_KEY_LENGTH);		groupIndex = 0;  // set default to zero, "My Buddies"		timeOnline = 0;	level = 0;	hoursToLevelUp = 0;	m_Sequence = 0;	m_ChatFontSize = 9;	m_ChatFontColor = 0;}void QQFriend::setOnlineTime(const unsigned int time ) {	timeOnline = time;}/*  ======================================================= */const bool FriendList::hasFriend(const unsigned int id) {	std::map<unsigned int, QQFriend>::iterator iter;	iter = getFriendPosition(id);	if( iter == privateList.end()) return false;	else		return true;}QQFriend *FriendList::getFriend(const unsigned int id){	std::map<unsigned int, QQFriend>::iterator iter = getFriendPosition(id);	if(iter == privateList.end()) return NULL;		return &privateList[id];}bool FriendList::deleteFriend(const unsigned int id){	std::map<unsigned int, QQFriend>::iterator iter = getFriendPosition(id);	if( iter == privateList.end()) return false;	privateList.erase(iter);	return true;}void FriendList::addFriend(const QQFriend &frd){	std::map<unsigned int, QQFriend>::iterator iter = getFriendPosition(frd.getQQ());	if( iter != privateList.end()) {		privateList[frd.getQQ()].setGroupIndex(frd.getGroupIndex());		//updateFriend(frd);		return;	}	privateList[frd.getQQ()] = frd;}void FriendList::updateFriend( const QQFriend &frd){	deleteFriend(frd.getQQ());      // delete it first	addFriend(frd);                   // add new one;}bool FriendList::updateFriendIP(const unsigned int id, const unsigned int ip){	std::map<unsigned int, QQFriend>::iterator iter = getFriendPosition(id);	if(iter == privateList.end()) return false;		privateList[id].setIP(ip);	return true;}bool FriendList::updateFriendFace(const unsigned int id, const unsigned short face){	std::map<unsigned int, QQFriend>::iterator iter = getFriendPosition(id);	if(iter == privateList.end()) return false;		privateList[id].setFace(face);	return true;}bool FriendList::updateFriendPort(const unsigned int id, const unsigned short p){	std::map<unsigned int, QQFriend>::iterator iter = getFriendPosition(id);	if(iter == privateList.end()) return false;		privateList[id].setPort(p);	return true;}bool FriendList::updateFriendStatus(const unsigned int id, const char status){	std::map<unsigned int, QQFriend>::iterator iter = getFriendPosition(id);	if(iter == privateList.end()) return false;	privateList[id].setStatus(status);	return true;}bool FriendList::updateFriendFileSessionKey(const unsigned int id, const unsigned char *key){	std::map<unsigned int, QQFriend>::iterator iter = getFriendPosition(id);	if(iter == privateList.end()) return false;		privateList[id].setFileSessionKey(key);	return true;}bool FriendList::updateFriendGroupIndex(const unsigned int id, const int index){	std::map<unsigned int, QQFriend>::iterator iter = getFriendPosition(id);	if(iter == privateList.end()) return false;		privateList[id].setGroupIndex(index);	return true;}bool FriendList::updateFriendLevel(const unsigned int id, const unsigned int online, const unsigned short level, const unsigned short hours){	std::map<unsigned int, QQFriend>::iterator iter = getFriendPosition(id);	if(iter == privateList.end()) return false;		privateList[id].setOnlineTime(online);	privateList[id].setLevel(level);	privateList[id].setHoursToLevelUp(hours);		return true;}bool FriendList::addFriendItemTo( const unsigned int id, const FriendItem &item){	std::map<unsigned int, QQFriend>::iterator iter = getFriendPosition(id);	if(iter == privateList.end()) return false;		privateList[id].setFriendItem(item);	return true;}bool FriendList::addOnlineFriendEntryTo( const unsigned int id, const FriendOnlineEntry & entry){	std::map<unsigned int, QQFriend>::iterator iter = getFriendPosition(id);	if(iter == privateList.end()) return false;		privateList[id].setFriendOnlineEntry(entry);	return true;}bool FriendList::addContactInfoTo( const unsigned int id, const ContactInfo &info){	std::map<unsigned int, QQFriend>::iterator iter = getFriendPosition(id);	if(iter == privateList.end()) return false;	privateList[id].setUserInformation(info);	return true;}const int FriendList::numberOfOnlines(){	int onlines = 0;        std::map<unsigned int, QQFriend>::iterator iter;	for(iter =privateList.begin(); iter != privateList.end(); ++iter){		switch(iter->second.getStatus()){		case QQ_FRIEND_STATUS_ONLINE:			onlines++;			break;		case QQ_FRIEND_STATUS_OFFLINE:			break;		case QQ_FRIEND_STATUS_LEAVE:			onlines++;			break;		case QQ_FRIEND_STATUS_INVISIBLE:			break;		}	}	return onlines;}std::list<QQFriend> FriendList::getFriendsInGroupIndexOf( const int index){	std::list<QQFriend> groupFriends;        std::map<unsigned int, QQFriend>::iterator iter;	for(iter =privateList.begin(); iter != privateList.end(); ++iter){		if(index == (iter->second).getGroupIndex())			groupFriends.push_back(iter->second);	}	return groupFriends;}std::list<QQFriend> FriendList::getAllFriends( const unsigned int myId ){	std::list<QQFriend> allFriends;        std::map<unsigned int, QQFriend>::iterator iter;	for(iter =privateList.begin(); iter != privateList.end(); ++iter){		allFriends.push_back(iter->second);	}	if(myId)		allFriends.push_back(QQFriend(myId, 0));	QQFriend::sortItem order = QQFriend::getSortField();	QQFriend::setSortField(QQFriend::Sort_QQ);	allFriends.sort();	QQFriend::setSortField(order);	return allFriends;}std::map<unsigned int, QQFriend>::iterator FriendList::getFriendPosition(const unsigned int id){	return privateList.find(id);}bool FriendList::setExtraInfo(const unsigned int id, const short info){	std::map<unsigned int, QQFriend>::iterator iter = getFriendPosition(id);	if(iter == privateList.end()) return false;		privateList[id].setExtraInfo(info);	return true;}const std::map< unsigned int, unsigned int > FriendList::getMemberSignatureList(const unsigned int start, const unsigned int myId, const bool hasSignature){	std::map< unsigned int, unsigned int > list;	int count =0 ;	std::list<QQFriend> qqList = getAllFriends(myId);	std::list<QQFriend>::iterator qqIter;		for(qqIter = qqList.begin(); qqIter != qqList.end(); ++qqIter){		//printf(" qq: %d\n", qqIter->getQQ());		if(qqIter->getQQ()>=start && (qqIter->hasSignature()|| (qqIter->getQQ() == myId && hasSignature))){			list[qqIter->getQQ()] = qqIter->getSignatureModifyTime();			count++;			if(count>99) break;		}	}	// printf("member signature size: %d(%d)\t friend size: %d\n", list.size(), count, privateList.size()); 	return list;}bool FriendList::setSignature( const unsigned int id, const std::string sig, const unsigned int time ){	std::map<unsigned int, QQFriend>::iterator iter = getFriendPosition(id);	if(iter == privateList.end()) return false;		privateList[id].setSignature(sig, time);	return true; }const std::list< unsigned int > FriendList::getUserHeadList(const unsigned int myId, const bool hasUserHead ){ std::list<unsigned int> results; std::list<QQFriend> qqList = getAllFriends(myId); std::list<QQFriend>::iterator qqIter;  for(qqIter = qqList.begin(); qqIter != qqList.end(); ++qqIter){		if( qqIter->hasUserHead() || (qqIter->getQQ() == myId && hasUserHead))			results.push_back(qqIter->getQQ());	}	return results;}bool FriendList::setMemo( const unsigned int id, const MemoItem& memo ){	std::map<unsigned int, QQFriend>::iterator iter = getFriendPosition(id);	if(iter == privateList.end()) return false;		privateList[id].setMemo(memo);	return true;	}

⌨️ 快捷键说明

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