1 /***
2 * Jetrix TetriNET Server
3 * Copyright (C) 2001-2003 Emmanuel Bourg
4 *
5 * This program is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU General Public License
7 * as published by the Free Software Foundation; either version 2
8 * of the License, or (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18 */
19
20 package net.jetrix.filter;
21
22 import java.util.*;
23 import java.util.logging.*;
24
25 import net.jetrix.*;
26 import net.jetrix.messages.channel.*;
27 import net.jetrix.messages.channel.specials.*;
28
29 /***
30 * Defines a generic filter to be used and extended by filter developers.
31 * GenericFilter makes writing filters easier by dispatching messages to an
32 * appropriate method according to the type of this message (onPline(),
33 * onStartGame(), etc...).
34 *
35 * @author Emmanuel Bourg
36 * @version $Revision: 799 $, $Date: 2009-02-18 17:28:08 +0100 (Wed, 18 Feb 2009) $
37 */
38 public abstract class GenericFilter extends MessageFilter
39 {
40 protected Logger log = Logger.getLogger("net.jetrix");
41
42 public final void process(Message m, List<Message> out)
43 {
44
45 onMessage(m);
46
47
48 if (m instanceof SpecialMessage) { onMessage((SpecialMessage) m, out); }
49 else if (m instanceof FieldMessage) { onMessage((FieldMessage) m, out); }
50 else if (m instanceof CommandMessage) { onMessage((CommandMessage) m, out); }
51 else if (m instanceof PlineMessage) { onMessage((PlineMessage) m, out); }
52 else if (m instanceof LevelMessage) { onMessage((LevelMessage) m, out); }
53 else if (m instanceof PlayerLostMessage) { onMessage((PlayerLostMessage) m, out); }
54 else if (m instanceof PlineActMessage) { onMessage((PlineActMessage) m, out); }
55 else if (m instanceof TeamMessage) { onMessage((TeamMessage) m, out); }
56 else if (m instanceof JoinMessage) { onMessage((JoinMessage) m, out); }
57 else if (m instanceof LeaveMessage) { onMessage((LeaveMessage) m, out); }
58 else if (m instanceof PlayerNumMessage) { onMessage((PlayerNumMessage) m, out); }
59 else if (m instanceof StartGameMessage) { onMessage((StartGameMessage) m, out); }
60 else if (m instanceof StopGameMessage) { onMessage((StopGameMessage) m, out); }
61 else if (m instanceof NewGameMessage) { onMessage((NewGameMessage) m, out); }
62 else if (m instanceof EndGameMessage) { onMessage((EndGameMessage) m, out); }
63 else if (m instanceof PauseMessage) { onMessage((PauseMessage) m, out); }
64 else if (m instanceof ResumeMessage) { onMessage((ResumeMessage) m, out); }
65 else if (m instanceof GmsgMessage) { onMessage((GmsgMessage) m, out); }
66 else if (m instanceof PlayerWonMessage) { onMessage((PlayerWonMessage) m, out); }
67 else
68 {
69 onMessage(m, out);
70 }
71 }
72
73 /***
74 * Message pre-processing. This method is called at the beginning of the
75 * <tt>process(Message m, List out)</tt> method and allow custom
76 * processing for all filtered messages.
77 */
78 public void onMessage(Message m) { }
79
80 public void onMessage(Message m, List<Message> out) { out.add(m); }
81
82 public void onMessage(PlineMessage m, List<Message> out)
83 {
84 out.add(m);
85 }
86
87 public void onMessage(PlineActMessage m, List<Message> out)
88 {
89 out.add(m);
90 }
91
92 public void onMessage(TeamMessage m, List<Message> out)
93 {
94 out.add(m);
95 }
96
97 public void onMessage(JoinMessage m, List<Message> out)
98 {
99 out.add(m);
100 }
101
102 public void onMessage(LeaveMessage m, List<Message> out)
103 {
104 out.add(m);
105 }
106
107 public void onMessage(PlayerNumMessage m, List<Message> out)
108 {
109 out.add(m);
110 }
111
112 public void onMessage(StartGameMessage m, List<Message> out)
113 {
114 out.add(m);
115 }
116
117 public void onMessage(StopGameMessage m, List<Message> out)
118 {
119 out.add(m);
120 }
121
122 public void onMessage(NewGameMessage m, List<Message> out)
123 {
124 out.add(m);
125 }
126
127 public void onMessage(EndGameMessage m, List<Message> out)
128 {
129 out.add(m);
130 }
131
132 public void onMessage(PauseMessage m, List<Message> out)
133 {
134 out.add(m);
135 }
136
137 public void onMessage(ResumeMessage m, List<Message> out)
138 {
139 out.add(m);
140 }
141
142 public void onMessage(GmsgMessage m, List<Message> out)
143 {
144 out.add(m);
145 }
146
147 private void onMessage(SpecialMessage m, List<Message> out)
148 {
149
150 onSpecial(m, out);
151
152
153 if (m instanceof LinesAddedMessage) { onMessage((LinesAddedMessage) m, out); }
154 else if (m instanceof AddLineMessage) { onMessage((AddLineMessage) m, out); }
155 else if (m instanceof ClearLineMessage) { onMessage((ClearLineMessage) m, out); }
156 else if (m instanceof ClearSpecialsMessage) { onMessage((ClearSpecialsMessage) m, out); }
157 else if (m instanceof RandomClearMessage) { onMessage((RandomClearMessage) m, out); }
158 else if (m instanceof BlockQuakeMessage) { onMessage((BlockQuakeMessage) m, out); }
159 else if (m instanceof BlockBombMessage) { onMessage((BlockBombMessage) m, out); }
160 else if (m instanceof GravityMessage) { onMessage((GravityMessage) m, out); }
161 else if (m instanceof NukeFieldMessage) { onMessage((NukeFieldMessage) m, out); }
162 else if (m instanceof SwitchFieldsMessage) { onMessage((SwitchFieldsMessage) m, out); }
163 }
164
165 /***
166 * Special block message pre-processing. This method is called for all
167 * specials filtered and allow custom processing for all specials
168 * (lines added, blockbomb switchs, etc...).
169 */
170 public void onSpecial(SpecialMessage m, List<Message> out) { }
171
172 public void onMessage(LevelMessage m, List<Message> out)
173 {
174 out.add(m);
175 }
176
177 public void onMessage(FieldMessage m, List<Message> out)
178 {
179 out.add(m);
180 }
181
182 public void onMessage(PlayerLostMessage m, List<Message> out)
183 {
184 out.add(m);
185 }
186
187 public void onMessage(PlayerWonMessage m, List<Message> out)
188 {
189 out.add(m);
190 }
191
192 public void onMessage(CommandMessage m, List<Message> out)
193 {
194 out.add(m);
195 }
196
197 public void onMessage(LinesAddedMessage m, List<Message> out)
198 {
199 if (m instanceof OneLineAddedMessage) { onMessage((OneLineAddedMessage) m, out); }
200 else if (m instanceof TwoLinesAddedMessage) { onMessage((TwoLinesAddedMessage) m, out); }
201 else if (m instanceof FourLinesAddedMessage) { onMessage((FourLinesAddedMessage) m, out); }
202 }
203
204 public void onMessage(OneLineAddedMessage m, List<Message> out)
205 {
206 out.add(m);
207 }
208
209 public void onMessage(TwoLinesAddedMessage m, List<Message> out)
210 {
211 out.add(m);
212 }
213
214 public void onMessage(FourLinesAddedMessage m, List<Message> out)
215 {
216 out.add(m);
217 }
218
219 public void onMessage(AddLineMessage m, List<Message> out)
220 {
221 out.add(m);
222 }
223
224 public void onMessage(ClearLineMessage m, List<Message> out)
225 {
226 out.add(m);
227 }
228
229 public void onMessage(NukeFieldMessage m, List<Message> out)
230 {
231 out.add(m);
232 }
233
234 public void onMessage(RandomClearMessage m, List<Message> out)
235 {
236 out.add(m);
237 }
238
239 public void onMessage(SwitchFieldsMessage m, List<Message> out)
240 {
241 out.add(m);
242 }
243
244 public void onMessage(ClearSpecialsMessage m, List<Message> out)
245 {
246 out.add(m);
247 }
248
249 public void onMessage(GravityMessage m, List<Message> out)
250 {
251 out.add(m);
252 }
253
254 public void onMessage(BlockQuakeMessage m, List<Message> out)
255 {
256 out.add(m);
257 }
258
259 public void onMessage(BlockBombMessage m, List<Message> out)
260 {
261 out.add(m);
262 }
263
264 }