File: Channel.h

package info (click to toggle)
sbnc 1.2-26
  • links: PTS
  • area: main
  • in suites: wheezy
  • size: 6,216 kB
  • sloc: cpp: 17,556; ansic: 15,514; sh: 13,419; tcl: 5,567; php: 448; makefile: 284
file content (116 lines) | stat: -rw-r--r-- 4,271 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
/*******************************************************************************
 * shroudBNC - an object-oriented framework for IRC                            *
 * Copyright (C) 2005-2007 Gunnar Beutner                                      *
 *                                                                             *
 * 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. *
 *******************************************************************************/

/**
 * chanmode_s
 *
 * A channel mode and its parameter.
 */
typedef struct chanmode_s {
	char Mode; /**< the channel mode */
	char *Parameter; /**< the associated parameter, or NULL if there is none */
} chanmode_t;

/* Forward declaration of some required classes */
class CNick;
class CBanlist;
class CIRCConnection;

#ifndef SWIG
int ChannelTSCompare(const void *p1, const void *p2);
int ChannelNameCompare(const void *p1, const void *p2);
#endif

/**
 * CChannel
 *
 * Represents an IRC channel.
 */
class SBNCAPI CChannel : public CObject<CChannel, CIRCConnection>, public CZoneObject<CChannel, 128> {
private:
	char *m_Name; /**< the name of the channel */
	time_t m_Creation; /**< the time when the channel was created */
	time_t m_Timestamp; /**< when the user joined the channel */

	CVector<chanmode_t> m_Modes; /**< the channel modes */
	bool m_ModesValid; /**< indicates whether the channelmodes are known */
	char *m_TempModes; /**< string-representation of the channel modes, used
							by GetChannelModes() */

	char *m_Topic; /**< the channel's topic */
	char *m_TopicNick; /**< the nick of the user who set the topic */
	time_t m_TopicStamp; /**< the time when the topic was set */
	int m_HasTopic; /**< indicates whether there is actually a topic */

	CHashtable<CNick *, false, 64> m_Nicks; /**< a list of nicks who are
												 on this channel */
	bool m_HasNames; /**< indicates whether m_Nicks is valid */

	CBanlist *m_Banlist; /**< a list of bans for this channel */
	bool m_HasBans; /**< indicates whether the banlist is known */

	chanmode_t *AllocSlot(void);
	chanmode_t *FindSlot(char Mode);

public:
#ifndef SWIG
	CChannel(const char *Name, CIRCConnection *Owner, safe_box_t Box);
	virtual ~CChannel(void);
#endif

	const char *GetName(void) const;

	RESULT<const char *> GetChannelModes(void);
	void ParseModeChange(const char *source, const char *modes, int pargc, const char **pargv);

	time_t GetCreationTime(void) const;
	void SetCreationTime(time_t T);

	const char *GetTopic(void) const;
	void SetTopic(const char *Topic);

	const char *GetTopicNick(void) const;
	void SetTopicNick(const char *Nick);

	time_t GetTopicStamp(void) const;
	void SetTopicStamp(time_t TS);

	int HasTopic(void) const;
	void SetNoTopic(void);

	void AddUser(const char *Nick, const char *ModeChar);
	void RemoveUser(const char *Nick);
	void RenameUser(const char *Nick, const char *NewNick);

	bool HasNames(void) const;
	void SetHasNames(void);
	const CHashtable<CNick *, false, 64> *GetNames(void) const;

	void ClearModes(void);
	bool AreModesValid(void) const;
	void SetModesValid(bool Valid);

	CBanlist *GetBanlist(void);
	void SetHasBans(void);
	bool HasBans(void) const;

	bool SendWhoReply(CClientConnection *Client, bool Simulate) const;

	time_t GetJoinTimestamp(void) const;
};