亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? hubmanager.h

?? dc++(一個曾經大量使用的p2p)的源代碼,dc++,開源的p2p源代碼
?? H
字號:
/* 
 * Copyright (C) 2001-2003 Jacek Sieka, j_s@telia.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.
 */

#if !defined(AFX_HUBMANAGER_H__75858D5D_F12F_40D0_B127_5DDED226C098__INCLUDED_)
#define AFX_HUBMANAGER_H__75858D5D_F12F_40D0_B127_5DDED226C098__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include "CriticalSection.h"
#include "HttpConnection.h"
#include "User.h"
#include "SettingsManager.h"

class HubEntry {
public:
	typedef vector<HubEntry> List;
	typedef List::iterator Iter;
	
	HubEntry(const string& aName, const string& aServer, const string& aDescription, const string& aUsers) throw() : 
	name(aName), server(aServer), description(aDescription), users(aUsers) { };
	HubEntry() throw() { };
	HubEntry(const HubEntry& rhs) throw() : name(rhs.name), server(rhs.server), description(rhs.description), users(rhs.users) { }
	virtual ~HubEntry() throw() { };

	GETSETREF(string, name, Name);
	GETSETREF(string, server, Server);
	GETSETREF(string, description, Description);
	GETSETREF(string, users, Users);
};

class FavoriteHubEntry {
public:
	typedef FavoriteHubEntry* Ptr;
	typedef vector<Ptr> List;
	typedef List::iterator Iter;

	FavoriteHubEntry() throw() : connect(false) { };
	FavoriteHubEntry(const HubEntry& rhs) throw() : name(rhs.getName()), server(rhs.getServer()), description(rhs.getDescription()), connect(false) { };
	FavoriteHubEntry(const FavoriteHubEntry& rhs) throw() : name(rhs.getName()), server(rhs.getServer()), description(rhs.getDescription()), password(rhs.getPassword()), connect(rhs.getConnect()), nick(rhs.nick), userdescription(rhs.userdescription) { };
	~FavoriteHubEntry() throw() { }	
	
	const string& getNick(bool useDefault = true) const { 
		return (!nick.empty() || !useDefault) ? nick : SETTING(NICK);
	}

	void setNick(const string& aNick) { nick = aNick; };

	GETSETREF(string, userdescription, UserDescription);
	GETSETREF(string, name, Name);
	GETSETREF(string, server, Server);
	GETSETREF(string, description, Description);
	GETSETREF(string, password, Password);
	GETSET(bool, connect, Connect);
private:
	string nick;
};

class UserCommand {
public:
	typedef vector<UserCommand> List;
	typedef List::iterator Iter;

	UserCommand() { };
	UserCommand(const string& aName, const string& aCommand, const string& aHub,
		const string& aNick) throw() : name(aName), command(aCommand), hub(aHub), 
		nick(aNick) { };

	GETSETREF(string, name, Name);
	GETSETREF(string, command, Command);
	GETSETREF(string, hub, Hub);
	GETSETREF(string, nick, Nick);
};

class HubManagerListener {
public:
	typedef HubManagerListener* Ptr;
	typedef vector<Ptr> List;
	typedef List::iterator Iter;
	enum Types {
		DOWNLOAD_STARTING,
		DOWNLOAD_FAILED,
		DOWNLOAD_FINISHED,
		FAVORITE_ADDED,
		FAVORITE_REMOVED,
		USER_ADDED,
		USER_REMOVED
	};

	virtual void onAction(Types, FavoriteHubEntry*) throw() { };
	virtual void onAction(Types, const string&) throw() { };
	virtual void onAction(Types, const User::Ptr&) throw() { };
	virtual void onAction(Types) throw() { };
};

class SimpleXML;

/**
 * Public hub list, favorites (hub&user). Assumed to be called only by UI thread.
 */
class HubManager : public Speaker<HubManagerListener>, private HttpConnectionListener, public Singleton<HubManager>,
	private SettingsManagerListener
{
public:
	
	void refresh();

	FavoriteHubEntry::List& getFavoriteHubs() { return favoriteHubs; };

	User::List& getFavoriteUsers() { return users; };
	
	void addFavoriteUser(const User::Ptr& aUser) { 
		if(find(users.begin(), users.end(), aUser) == users.end()) {
			users.push_back(aUser);
			fire(HubManagerListener::USER_ADDED, aUser);
			save();
		}
	}

	void removeFavoriteUser(const User::Ptr& aUser) {
		User::Iter i = find(users.begin(), users.end(), aUser);
		if(i != users.end()) {
			fire(HubManagerListener::USER_REMOVED, aUser);
			users.erase(i);
			save();
		}
	}

	bool isFavoriteUser(const User::Ptr& aUser) {
		return (find(users.begin(), users.end(), aUser) != users.end());
	}
	
	//void addFavorite(const HubEntry& aEntry) { addFavorite(FavoriteHubEntry(aEntry)); };
	void addFavorite(const FavoriteHubEntry& aEntry) {
		FavoriteHubEntry* f;

		FavoriteHubEntry::Iter i = getFavoriteHub(aEntry.getServer());
		if(i != favoriteHubs.end()) {
			return;
		}
		f = new FavoriteHubEntry(aEntry);
		favoriteHubs.push_back(f);
		fire(HubManagerListener::FAVORITE_ADDED, f);
		save();
	}

	void removeFavorite(FavoriteHubEntry* entry) {
		FavoriteHubEntry::Iter i = find(favoriteHubs.begin(), favoriteHubs.end(), entry);
		if(i == favoriteHubs.end()) {
			return;
		}
		
		fire(HubManagerListener::FAVORITE_REMOVED, entry);
		favoriteHubs.erase(i);
		delete entry;
		save();
	}
	
	HubEntry::List getPublicHubs() {
		Lock l(cs);
		return publicHubs;
	}

	UserCommand::List& getUserCommands() {
		return userCommands;
	}

	bool isDownloading() {
		return running;
	}

	void save();
private:
	
	enum {
		TYPE_NORMAL,
		TYPE_BZIP2
	} listType;

	HubEntry::List publicHubs;
	FavoriteHubEntry::List favoriteHubs;
	UserCommand::List userCommands;
	User::List users;

	CriticalSection cs;
	bool running;
	HttpConnection* c;
	int lastServer;

	/** Used during loading to prevent saving. */
	bool dontSave;

	friend class Singleton<HubManager>;
	
	HubManager() : running(false), c(NULL), lastServer(0), dontSave(false) {
		SettingsManager::getInstance()->addListener(this);
	}

	virtual ~HubManager() {
		SettingsManager::getInstance()->addListener(this);
		if(c) {
			c->removeListener(this);
			delete c;
			c = NULL;
		}
		
		for_each(favoriteHubs.begin(), favoriteHubs.end(), DeleteFunction<FavoriteHubEntry*>());
	}
	
	string downloadBuf;
	
	FavoriteHubEntry::Iter getFavoriteHub(const string& aServer) {
		for(FavoriteHubEntry::Iter i = favoriteHubs.begin(); i != favoriteHubs.end(); ++i) {
			if((*i)->getServer() == aServer) {
				return i;
			}
		}
		return favoriteHubs.end();
	}

	// HttpConnectionListener
	virtual void onAction(HttpConnectionListener::Types type, HttpConnection* /*conn*/, const u_int8_t* buf, int len) throw();
	virtual void onAction(HttpConnectionListener::Types type, HttpConnection* /*conn*/, const string& aLine) throw();
	virtual void onAction(HttpConnectionListener::Types type, HttpConnection* /*conn*/) throw();
	
 	void onHttpFinished() throw();

	// SettingsManagerListener
	virtual void onAction(SettingsManagerListener::Types type, SimpleXML*) throw();

	void load(SimpleXML* aXml);
	void load();
	
};

#endif // !defined(AFX_HUBMANAGER_H__75858D5D_F12F_40D0_B127_5DDED226C098__INCLUDED_)

/**
 * @file
 * $Id: HubManager.h,v 1.39 2003/07/15 14:53:11 arnetheduck Exp $
 */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
97精品久久久午夜一区二区三区 | 欧美精品v国产精品v日韩精品| 成人91在线观看| 国产成人精品亚洲777人妖| 男人操女人的视频在线观看欧美| 亚洲与欧洲av电影| 午夜精品久久久| 日精品一区二区| 美日韩一区二区三区| 久久成人羞羞网站| 国内久久婷婷综合| eeuss鲁片一区二区三区在线观看 eeuss鲁片一区二区三区在线看 | 韩国av一区二区| 不卡av免费在线观看| 97成人超碰视| 91精品婷婷国产综合久久性色| 欧美一区二区三区公司| 精品国产乱码久久久久久免费| 精品国产乱码久久久久久久| 国产日韩在线不卡| 亚洲日本韩国一区| 日韩精品一区第一页| 国产一区二区三区免费观看| av在线播放不卡| 欧美日韩的一区二区| 日韩精品一区二区三区swag| 国产欧美日韩卡一| 午夜久久久影院| 处破女av一区二区| 欧美日韩国产综合久久| 国产日韩精品一区二区三区在线| 亚洲视频免费观看| 国产一区二区视频在线| 91伊人久久大香线蕉| 日韩亚洲国产中文字幕欧美| 国产精品久久免费看| 日韩电影在线观看电影| 成人av在线资源| 91精品福利在线一区二区三区| 中文字幕国产一区| 久久激五月天综合精品| 色综合久久综合| 精品国产欧美一区二区| 亚洲国产成人porn| 91热门视频在线观看| 久久综合成人精品亚洲另类欧美| 亚洲一区二区在线视频| 成人禁用看黄a在线| 精品久久一二三区| 日韩成人一级大片| 日本精品视频一区二区| 久久久精品免费网站| 美国毛片一区二区| 欧美日韩国产综合久久 | 亚洲资源中文字幕| 99在线精品一区二区三区| 欧美videos中文字幕| 亚洲动漫第一页| 91色婷婷久久久久合中文| 国产午夜精品久久久久久久| 免费在线一区观看| 欧美精品高清视频| 亚洲高清不卡在线观看| 色婷婷av一区二区三区软件| 国产精品婷婷午夜在线观看| 国产精品一区二区三区99| 日韩欧美一级二级三级久久久| 亚洲一二三四在线观看| 在线观看国产91| 亚洲成人手机在线| 91国偷自产一区二区开放时间 | 欧美一区二区三区影视| 亚洲一区中文日韩| 欧美自拍偷拍午夜视频| 一区二区三区四区精品在线视频| 91在线国产观看| 亚洲乱码日产精品bd| 成人午夜免费视频| 中文字幕在线免费不卡| 色综合天天做天天爱| 亚洲综合丝袜美腿| 欧美日韩精品欧美日韩精品一| 天堂va蜜桃一区二区三区| 欧美喷潮久久久xxxxx| 蜜桃一区二区三区在线观看| 亚洲精品在线观| 成人美女在线观看| 一区二区激情视频| 日韩一区二区视频| 成人小视频免费观看| 伊人性伊人情综合网| 在线不卡一区二区| 国产美女精品在线| 自拍偷拍国产精品| 欧美男人的天堂一二区| 国产在线播放一区| 中文字幕一区二区视频| 欧洲一区二区三区在线| 热久久国产精品| 国产女主播一区| 精品视频在线视频| 国产成人在线网站| 一区二区三区不卡在线观看| 日韩一区二区三区电影| 国产成人精品影院| 一区二区三区在线观看网站| 4438成人网| 不卡欧美aaaaa| 天天射综合影视| 中文字幕亚洲区| 日韩午夜av一区| 91丝袜呻吟高潮美腿白嫩在线观看| 亚洲.国产.中文慕字在线| 久久亚洲一级片| 欧美女孩性生活视频| 成人黄色777网| 精品夜夜嗨av一区二区三区| 中文字幕综合网| 欧美精品一区二区三区视频| 在线精品视频免费观看| 国产久卡久卡久卡久卡视频精品| 亚洲综合久久av| 中文乱码免费一区二区| 精品卡一卡二卡三卡四在线| 欧洲激情一区二区| 高清成人在线观看| 狠狠狠色丁香婷婷综合久久五月| 亚洲综合区在线| 1024成人网| 国产精品久久久久久久久免费相片| 日韩一区二区三区三四区视频在线观看| 99re8在线精品视频免费播放| 久久aⅴ国产欧美74aaa| 亚洲国产欧美日韩另类综合| 国产精品福利一区二区三区| 久久久国际精品| 精品国产乱码久久久久久久久| 欧美欧美欧美欧美首页| 在线视频综合导航| 91亚洲精品久久久蜜桃| 丁香网亚洲国际| 国产成人免费在线视频| 国产一区二区毛片| 国产美女视频91| 国产精品正在播放| 韩国精品免费视频| 国产综合成人久久大片91| 国产专区欧美精品| 韩国一区二区在线观看| 精久久久久久久久久久| 狠狠色丁香婷婷综合久久片| 九色|91porny| 国产在线精品一区二区夜色| 国产乱一区二区| 成人激情动漫在线观看| 成人h动漫精品| 不卡视频在线观看| 在线视频你懂得一区二区三区| 色综合天天综合狠狠| 在线区一区二视频| 欧美日韩国产在线播放网站| 91精品国产入口| 久久午夜电影网| 欧美国产日韩a欧美在线观看| 国产精品第一页第二页第三页| 亚洲色图另类专区| 亚洲成人动漫一区| 蜜臀va亚洲va欧美va天堂| 国产激情一区二区三区桃花岛亚洲| 高清不卡一区二区| 在线一区二区三区四区五区| 56国语精品自产拍在线观看| 欧美成人午夜电影| 国产精品久线在线观看| 亚洲国产综合91精品麻豆| 日本伊人精品一区二区三区观看方式| 久久国内精品自在自线400部| 国产美女在线观看一区| 色悠悠亚洲一区二区| 91精品国产福利在线观看| 久久久亚洲国产美女国产盗摄| 亚洲欧洲性图库| 麻豆高清免费国产一区| 99久久夜色精品国产网站| 欧美日韩一区小说| 亚洲国产精品精华液2区45| 亚洲综合色网站| 国产成人免费视| 欧美日韩久久不卡| 国产精品每日更新| 久久国产精品色婷婷| 色系网站成人免费| 国产欧美日韩精品a在线观看| 亚洲一二三专区| 波多野结衣在线一区| 日韩一级黄色大片| 亚洲乱码国产乱码精品精的特点| 精品一区二区三区欧美| 欧美午夜一区二区三区| 中文字幕第一区|