]> jfr.im git - irc/rizon/acid.git/blob - acid/src/main/java/net/rizon/acid/core/Message.java
8e66aed29efe06d229f1e650a2fc1da73b8ea6a9
[irc/rizon/acid.git] / acid / src / main / java / net / rizon / acid / core / Message.java
1 package net.rizon.acid.core;
2
3 import java.util.HashMap;
4 import net.rizon.acid.plugins.ClassLoader;
5 import org.slf4j.Logger;
6 import org.slf4j.LoggerFactory;
7
8 public abstract class Message
9 {
10 private static final Logger log = LoggerFactory.getLogger(Message.class);
11
12 public static final char BOLD = 2;
13
14 private static final String messageBase = "net.rizon.acid.messages";
15 private static final String[] messageClasses = {
16 "Encap", "EOB", "Error", "Join", "Kick", "Kill", "Mode", "Nick",
17 "Notice", "Part", "Pass", "Ping", "Privmsg", "Quit", "Server", "SID",
18 "SJoin", "SQuit", "Stats", "TMode", "UID", "Whois", "Operwall", "Invite",
19 "BMask"
20 };
21
22 static
23 {
24 reload();
25 }
26
27 protected Message(String name)
28 {
29 messages.put(name.toUpperCase(), this);
30 }
31
32 /*
33 * TS6 spec says that if the TS in the message is greater, the
34 * message should be dropped. do that check here. this is here
35 * to mostly support TS checks in TMODE and BMASK without
36 * copy-pasting shit.
37 */
38 protected boolean shouldDropTsMessage(Integer oldTS, String newTS) {
39 try
40 {
41 return (Integer.parseInt(newTS) > oldTS);
42 }
43 catch (NumberFormatException ex)
44 {
45 ex.printStackTrace();
46 return true;
47 }
48 }
49
50 public void onUser(User source, String[] params) { }
51 public void onServer(Server source, String[] params) { }
52 public void on(String source, String[] params) { }
53
54 private static HashMap<String, Message> messages;
55
56 public static Message findMessage(String name)
57 {
58 return messages.get(name.toUpperCase());
59 }
60
61 public static void reload()
62 {
63 messages = new HashMap<String, Message>();
64
65 try
66 {
67 ClassLoader loader = new ClassLoader("net.rizon.acid.messages.");
68
69 for (String s : messageClasses)
70 loader.loadClass(messageBase + "." + s).newInstance();
71 }
72 catch (Exception ex)
73 {
74 log.error("Error initializing messages", ex);
75 System.exit(-1);
76 }
77 }
78 }