File: ModuleFar.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 (257 lines) | stat: -rw-r--r-- 7,238 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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
/*******************************************************************************
 * 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. *
 *******************************************************************************/

class CCore;
class CIRCConnection;
class CClientConnection;

/**
 * CModuleFar
 *
 * The interface for modules.
 */
struct CModuleFar {
	/**
	 * Destroy
	 *
	 * Destroys the module.
	 */
	virtual void Destroy(void) = 0;

	/**
	 * Init
	 *
	 * Initializes the module.
	 *
	 * @param Root a reference to the CCore object
	 */
	virtual void Init(CCore *Root) = 0;

	/**
	 * InterceptIRCMessage
	 *
	 * Called when a line is received for an IRC connection. Returns "true" if the module
	 * has handled the line.
	 *
	 * @param Connection the IRC connection
	 * @param ArgC the number of arguments
	 * @param ArgV the arguments
	 */
	virtual bool InterceptIRCMessage(CIRCConnection *Connection, int ArgC, const char **ArgV) = 0;

	/**
	 * InterceptClientMessage
	 *
	 * Called when a line is received for a client connection. Returns "true" if the module
	 * has handled the line.
	 *
	 * @param Connection the IRC connection
	 * @param ArgC the number of arguments
	 * @param ArgV the arguments
	 */
	virtual bool InterceptClientMessage(CClientConnection *Connection, int ArgC, const char **ArgV) = 0;

	/**
	 * InterceptClientCommand
	 *
	 * Called when an /sbnc command is received for a client connection. Returns "true" if the module
	 * has handled the command.
	 *
	 * @param Connection the IRC connection
	 * @param Subcommand the command
	 * @param ArgC the number of arguments
	 * @param ArgV the arguments
	 * @param NoticeUser whether to send replies as notices
	 */
	virtual bool InterceptClientCommand(CClientConnection *Connection, const char *Subcommand, int ArgC, const char **ArgV, bool NoticeUser) = 0;

	/**
	 * AttachClient
	 *
	 * Called when a user logs in.
	 *
	 * @param Client the client
	 */
	virtual void AttachClient(CClientConnection *Client) = 0;

	/**
	 * DetachClient
	 *
	 * Called when a user logs out.
	 *
	 * @param Client the client
	 */
	virtual void DetachClient(CClientConnection *Client) = 0;

	/**
	 * ServerDisconnect
	 *
	 * Called when a user disconnects from an IRC server.
	 *
	 * @param Client the name of the user
	 */
	virtual void ServerDisconnect(const char *Client) = 0;

	/**
	 * ServerConnect
	 *
	 * Called when a user connects to an IRC server.
	 *
	 * @param Client the name of the user
	 */
	virtual void ServerConnect(const char *Client) = 0;

	/**
	 * ServerLogon
	 *
	 * Called when the MOTD has been received for an IRC connection.
	 *
	 * @param Client the name of the user
	 */
	virtual void ServerLogon(const char *Client) = 0;

	/**
	 * UserLoad
	 *
	 * Called when a user's config file is loaded from disk.
	 *
	 * @param User the name of the user
	 */
	virtual void UserLoad(const char *User) = 0;

	/**
	 * UserCreate
	 *
	 * Called when a new user is being created.
	 *
	 * @param User the name of the user
	 */
	virtual void UserCreate(const char *User) = 0;

	/**
	 * UserDelete
	 *
	 * Called when a user is being removed.
	 *
	 * @param User the name of the user
	 */
	virtual void UserDelete(const char *User) = 0;

	/**
	 * SingleModeChange
	 *
	 * Called for each mode change.
	 *
	 * @param IRC the irc connection
	 * @param Channel the channel's name
	 * @param Source the source of the mode change
	 * @param Flip whether the mode is set or unset
	 * @param Mode the channel mode
	 * @param Parameter the parameter for the mode change, or NULL
	 */
	virtual void SingleModeChange(CIRCConnection *IRC, const char *Channel, const char *Source, bool Flip, char Mode, const char *Parameter) = 0;

	/**
	 * Command
	 *
	 * Used for inter-module communication. Returns a string if the command has
	 * been handled, or NULL otherwise.
	 *
	 * @param Cmd the command
	 * @param Parameters any parameters for the command
	 */
	virtual const char *Command(const char *Cmd, const char *Parameters) = 0;

	/**
	 * TagModified
	 *
	 * Called when a global tag has been modified.
	 *
	 * @param Tag the name of the tag
	 * @param Value the new value of the tag
	 */
	virtual void TagModified(const char *Tag, const char *Value) = 0;

	/**
	 * UserTagModified
	 *
	 * Called when a user's tag has been modified.
	 *
	 * @param Tag the name of the tag
	 * @param Value the new value of the tag
	 */
	virtual void UserTagModified(const char *Tag, const char *Value) = 0;
};

/**
 * CModuleImplementation
 *
 * A default implementation of CModuleFar.
 */
class CModuleImplementation : public CModuleFar {
private:
	CCore *m_Core;

protected:
	virtual ~CModuleImplementation(void) { }

	virtual void Destroy(void) {
		delete this;
	}

	virtual void Init(CCore *Root) {
		m_Core = Root;
	}

	virtual bool InterceptIRCMessage(CIRCConnection *Connection, int ArgC, const char **ArgV) {
		return true;
	}

	virtual bool InterceptClientMessage(CClientConnection *Connection, int ArgC, const char **ArgV) {
		return true;
	}

	virtual bool InterceptClientCommand(CClientConnection *Connection, const char *Subcommand, int ArgC, const char **ArgV, bool NoticeUser) {
		return false;
	}

	virtual void AttachClient(CClientConnection *Client) { }
	virtual void DetachClient(CClientConnection *Client) { }

	virtual void ServerDisconnect(const char *Client) { }
	virtual void ServerConnect(const char *Client) { }
	virtual void ServerLogon(const char *Client) { }

	virtual void UserLoad(const char *User) { }
	virtual void UserCreate(const char *User) { }
	virtual void UserDelete(const char *User) { }

	virtual void SingleModeChange(CIRCConnection *IRC, const char *Channel, const char *Source, bool Flip, char Mode, const char *Parameter) { }

	virtual const char *Command(const char *Cmd, const char *Parameters) {
		return NULL;
	}

	virtual void TagModified(const char *Tag, const char *Value) { }
	virtual void UserTagModified(const char *Tag, const char *Value) { }
public:
	CCore *GetCore(void) {
		return m_Core;
	}
};