|
@@ -24,9 +24,7 @@ package dmdirc.parser;
|
24
|
24
|
|
25
|
25
|
import java.io.*;
|
26
|
26
|
import java.net.*;
|
27
|
|
-
|
28
|
|
-interface IDataInEvent { public void onDataIn(IRCParser parser, String data); }
|
29
|
|
-interface IDataOutEvent { public void onDataOut(IRCParser parser, String data); }
|
|
27
|
+import java.util.ArrayList;
|
30
|
28
|
|
31
|
29
|
public class IRCParser implements Runnable {
|
32
|
30
|
|
|
@@ -46,35 +44,59 @@ public class IRCParser implements Runnable {
|
46
|
44
|
private boolean IsFirst = true;
|
47
|
45
|
|
48
|
46
|
// Events
|
49
|
|
- public interface GeneralIRCEvent { public void GeneralEvent(String sName); }
|
50
|
|
- public interface LogEvent { public void LogEvent(String sName, String sData); }
|
|
47
|
+ public interface IMOTDEnd { public void onMOTDEnd(IRCParser tParser); }
|
|
48
|
+ public interface IDataIn { public void onDataIn(IRCParser tParser, String sData); }
|
|
49
|
+ public interface IDataOut { public void onDataOut(IRCParser tParser, String sData); }
|
51
|
50
|
class AllEvents {
|
52
|
|
- GeneralIRCEvent EndOfMOTD = null;
|
53
|
|
- LogEvent DataIn = null;
|
54
|
|
- LogEvent DataOut = null;
|
55
|
|
-
|
56
|
|
- String sEndOfMOTD = "";
|
57
|
|
- String sDataIn = "";
|
58
|
|
- String sDataOut = "";
|
|
51
|
+ ArrayList<IMOTDEnd> EndOfMOTD = new ArrayList<IMOTDEnd>();
|
|
52
|
+ ArrayList<IDataIn> DataIn = new ArrayList<IDataIn>();
|
|
53
|
+ ArrayList<IDataOut> DataOut = new ArrayList<IDataOut>();
|
59
|
54
|
}
|
60
|
55
|
public AllEvents cb = new AllEvents();
|
61
|
56
|
|
62
|
|
- public void SetCallback(String sType, Object eMethod) throws Exception { try { SetCallback(sType,sType,eMethod); } catch (Exception e) { throw e; } }
|
63
|
|
- public void SetCallback(String sType, String sName, Object eMethod) throws Exception {
|
64
|
|
- if (sName.equals("")) { sName = sType; }
|
65
|
|
- sType = sType.toLowerCase();
|
66
|
|
- if (sType.equals("endofmotd")) { cb.EndOfMOTD = (GeneralIRCEvent)eMethod; cb.sEndOfMOTD = sName; }
|
67
|
|
- else if (sType.equals("datain")) { cb.DataIn = (LogEvent)eMethod; cb.sDataIn = sName; }
|
68
|
|
- else if (sType.equals("dataout")) { cb.DataOut = (LogEvent)eMethod; cb.sDataOut = sName; }
|
69
|
|
- else { throw new Exception("No such callback '"+sType+"'");}
|
|
57
|
+ public void AddMOTDEnd(Object eMethod) { cb.EndOfMOTD.add((IMOTDEnd)eMethod); }
|
|
58
|
+ public void DelMOTDEnd(Object eMethod) {
|
|
59
|
+ for (int i = 0; i < cb.EndOfMOTD.size(); i++) {
|
|
60
|
+ if (eMethod.equals((Object)cb.EndOfMOTD.get(i))) { cb.EndOfMOTD.remove(i); break; }
|
|
61
|
+ }
|
|
62
|
+ }
|
|
63
|
+ private void CallMOTDEnd() {
|
|
64
|
+ for (int i = 0; i < cb.EndOfMOTD.size(); i++) {
|
|
65
|
+ // IMOTDEnd(cb.EndOfMOTD.get(i)).OnMOTDEnd(this);
|
|
66
|
+ cb.EndOfMOTD.get(i).onMOTDEnd(this);
|
|
67
|
+ }
|
|
68
|
+ }
|
|
69
|
+
|
|
70
|
+ public void AddDataIn(Object eMethod) { cb.DataIn.add((IDataIn)eMethod); }
|
|
71
|
+ public void DelDataIn(Object eMethod) {
|
|
72
|
+ for (int i = 0; i < cb.DataIn.size(); i++) {
|
|
73
|
+ if (eMethod.equals((Object)cb.DataIn.get(i))) { cb.DataIn.remove(i); break; }
|
|
74
|
+ }
|
|
75
|
+ }
|
|
76
|
+ private void CallDataIn(String data) {
|
|
77
|
+ for (int i = 0; i < cb.DataIn.size(); i++) {
|
|
78
|
+ cb.DataIn.get(i).onDataIn(this, data);
|
|
79
|
+ }
|
|
80
|
+ }
|
|
81
|
+
|
|
82
|
+ public void AddDataOut(Object eMethod) { cb.DataOut.add((IDataOut)eMethod); }
|
|
83
|
+ public void DelDataOut(Object eMethod) {
|
|
84
|
+ for (int i = 0; i < cb.DataOut.size(); i++) {
|
|
85
|
+ if (eMethod.equals((Object)cb.DataOut.get(i))) { cb.DataOut.remove(i); break; }
|
|
86
|
+ }
|
|
87
|
+ }
|
|
88
|
+ private void CallDataOut(String data) {
|
|
89
|
+ for (int i = 0; i < cb.DataOut.size(); i++) {
|
|
90
|
+ cb.DataOut.get(i).onDataOut(this, data);
|
|
91
|
+ }
|
70
|
92
|
}
|
71
|
93
|
|
72
|
94
|
// Constructor.
|
73
|
|
- IRCParser () {}
|
|
95
|
+ IRCParser () { }
|
74
|
96
|
|
75
|
97
|
public void connect(String sHost) throws Exception {
|
76
|
98
|
try {
|
77
|
|
- connect(sHost,6667);
|
|
99
|
+ connect(sHost,6667);
|
78
|
100
|
} catch (Exception e) {
|
79
|
101
|
throw e;
|
80
|
102
|
}
|
|
@@ -146,7 +168,7 @@ public class IRCParser implements Runnable {
|
146
|
168
|
|
147
|
169
|
// Our Method
|
148
|
170
|
private void SendString(String line) {
|
149
|
|
- if (!cb.sDataOut.equals("")) {cb.DataOut.LogEvent(cb.sDataOut,line);} // Ugly++
|
|
171
|
+ CallDataOut(line);
|
150
|
172
|
out.printf("%s\r\n",line);
|
151
|
173
|
}
|
152
|
174
|
|
|
@@ -155,7 +177,7 @@ public class IRCParser implements Runnable {
|
155
|
177
|
String sParam = token[token.length-1];
|
156
|
178
|
|
157
|
179
|
int nParam;
|
158
|
|
- if (!cb.sDataIn.equals("")) {cb.DataIn.LogEvent(cb.sDataIn,line);} // Ugly++
|
|
180
|
+ CallDataIn(line);
|
159
|
181
|
|
160
|
182
|
try {nParam = Integer.parseInt(token[1]);} catch (Exception e) { nParam = -1;}
|
161
|
183
|
|
|
@@ -188,7 +210,7 @@ public class IRCParser implements Runnable {
|
188
|
210
|
|
189
|
211
|
private void ProcessEndOfMOTD(String sParam,String token[]) {
|
190
|
212
|
// Process EndOfMOTD
|
191
|
|
- if (!cb.sEndOfMOTD.equals("")) {cb.EndOfMOTD.GeneralEvent(cb.sEndOfMOTD);} // Ugly++
|
|
213
|
+ CallMOTDEnd();
|
192
|
214
|
}
|
193
|
215
|
|
194
|
216
|
|