1//
2// This file is part of the aMule Project.
3//
4// Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org )
5// Copyright (c) 2002-2011 Merkur ( devs@emule-project.net / http://www.emule-project.net )
6//
7// Any parts of this program derived from the xMule, lMule or eMule project,
8// or contributed by third-party developers are copyrighted by their
9// respective authors.
10//
11// This program is free software; you can redistribute it and/or modify
12// it under the terms of the GNU General Public License as published by
13// the Free Software Foundation; either version 2 of the License, or
14// (at your option) any later version.
15//
16// This program is distributed in the hope that it will be useful,
17// but WITHOUT ANY WARRANTY; without even the implied warranty of
18// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19// GNU General Public License for more details.
20//
21// You should have received a copy of the GNU General Public License
22// along with this program; if not, write to the Free Software
23// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA
24//
25
26#ifndef FRIENDLIST_H
27#define FRIENDLIST_H
28
29
30#include "Types.h"	// Needed for uint32
31
32class wxString;
33class CFriend;
34class CMD4Hash;
35class CClientRef;
36
37class CFriendList
38{
39	typedef std::list<CFriend*> FriendList;
40public:
41	CFriendList();
42	~CFriendList();
43
44	bool		IsAlreadyFriend(uint32 dwLastUsedIP, uint32 nLastUsedPort);
45	void		SaveList();
46	void		LoadList();
47	CFriend*	FindFriend(const CMD4Hash& userhash, uint32 dwIP, uint16 nPort);
48	CFriend*	FindFriend(uint32 ecid);
49	void 		AddFriend(CFriend* toadd, bool notify = true);
50	void		AddFriend(const CClientRef& toadd);
51	void		AddFriend(const CMD4Hash& userhash, uint32 lastUsedIP, uint32 lastUsedPort, const wxString& name, uint32 lastSeen = 0, uint32 lastChatted = 0);
52	void		RemoveFriend(CFriend* toremove);
53	void		RequestSharedFileList(CFriend* Friend);
54
55	void		SetFriendSlot(CFriend* Friend, bool new_state);
56	void		StartChatSession(CFriend* Friend);
57	void		RemoveAllFriendSlots();
58
59	// Iterator class
60	class const_iterator {
61		// iterator for internal list
62		FriendList::const_iterator m_it;
63	public:
64		// constructs
65		const_iterator() {};
66		const_iterator(const FriendList::const_iterator& it) { m_it = it; };
67		// operators
68		bool operator != (const const_iterator& it) const { return m_it != it.m_it; }
69		const_iterator& operator ++ ()	{ ++ m_it; return *this; }	// prefix  (assignable)
70		void operator ++ (int)			{ ++ m_it; }				// postfix (not assignable)
71		const CFriend* operator * () { return *m_it; }
72	};
73	// begin/end iterators for looping
74	const_iterator begin() const { return const_iterator(m_FriendList.begin()); }
75	const_iterator end() const { return const_iterator(m_FriendList.end()); }
76
77
78private:
79	FriendList m_FriendList;
80};
81
82#endif
83// File_checked_for_headers
84