001 /**
002 * Jetrix TetriNET Server
003 * Copyright (C) 2001-2003 Emmanuel Bourg
004 *
005 * This program is free software; you can redistribute it and/or
006 * modify it under the terms of the GNU General Public License
007 * as published by the Free Software Foundation; either version 2
008 * of the License, or (at your option) any later version.
009 *
010 * This program is distributed in the hope that it will be useful,
011 * but WITHOUT ANY WARRANTY; without even the implied warranty of
012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
013 * GNU General Public License for more details.
014 *
015 * You should have received a copy of the GNU General Public License
016 * along with this program; if not, write to the Free Software
017 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
018 */
019
020 package net.jetrix.filter;
021
022 import java.util.*;
023 import java.util.logging.*;
024
025 import net.jetrix.*;
026 import net.jetrix.messages.channel.*;
027 import net.jetrix.messages.channel.specials.*;
028
029 /**
030 * Defines a generic filter to be used and extended by filter developers.
031 * GenericFilter makes writing filters easier by dispatching messages to an
032 * appropriate method according to the type of this message (onPline(),
033 * onStartGame(), etc...).
034 *
035 * @author Emmanuel Bourg
036 * @version $Revision: 799 $, $Date: 2009-02-18 17:28:08 +0100 (Wed, 18 Feb 2009) $
037 */
038 public abstract class GenericFilter extends MessageFilter
039 {
040 protected Logger log = Logger.getLogger("net.jetrix");
041
042 public final void process(Message m, List<Message> out)
043 {
044 // overwritable pre processing
045 onMessage(m);
046
047 // message dispatching
048 if (m instanceof SpecialMessage) { onMessage((SpecialMessage) m, out); }
049 else if (m instanceof FieldMessage) { onMessage((FieldMessage) m, out); }
050 else if (m instanceof CommandMessage) { onMessage((CommandMessage) m, out); }
051 else if (m instanceof PlineMessage) { onMessage((PlineMessage) m, out); }
052 else if (m instanceof LevelMessage) { onMessage((LevelMessage) m, out); }
053 else if (m instanceof PlayerLostMessage) { onMessage((PlayerLostMessage) m, out); }
054 else if (m instanceof PlineActMessage) { onMessage((PlineActMessage) m, out); }
055 else if (m instanceof TeamMessage) { onMessage((TeamMessage) m, out); }
056 else if (m instanceof JoinMessage) { onMessage((JoinMessage) m, out); }
057 else if (m instanceof LeaveMessage) { onMessage((LeaveMessage) m, out); }
058 else if (m instanceof PlayerNumMessage) { onMessage((PlayerNumMessage) m, out); }
059 else if (m instanceof StartGameMessage) { onMessage((StartGameMessage) m, out); }
060 else if (m instanceof StopGameMessage) { onMessage((StopGameMessage) m, out); }
061 else if (m instanceof NewGameMessage) { onMessage((NewGameMessage) m, out); }
062 else if (m instanceof EndGameMessage) { onMessage((EndGameMessage) m, out); }
063 else if (m instanceof PauseMessage) { onMessage((PauseMessage) m, out); }
064 else if (m instanceof ResumeMessage) { onMessage((ResumeMessage) m, out); }
065 else if (m instanceof GmsgMessage) { onMessage((GmsgMessage) m, out); }
066 else if (m instanceof PlayerWonMessage) { onMessage((PlayerWonMessage) m, out); }
067 else
068 {
069 onMessage(m, out);
070 }
071 }
072
073 /**
074 * Message pre-processing. This method is called at the beginning of the
075 * <tt>process(Message m, List out)</tt> method and allow custom
076 * processing for all filtered messages.
077 */
078 public void onMessage(Message m) { }
079
080 public void onMessage(Message m, List<Message> out) { out.add(m); }
081
082 public void onMessage(PlineMessage m, List<Message> out)
083 {
084 out.add(m);
085 }
086
087 public void onMessage(PlineActMessage m, List<Message> out)
088 {
089 out.add(m);
090 }
091
092 public void onMessage(TeamMessage m, List<Message> out)
093 {
094 out.add(m);
095 }
096
097 public void onMessage(JoinMessage m, List<Message> out)
098 {
099 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 // message pre-processing
150 onSpecial(m, out);
151
152 // message dispatching
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 }