Source code: org/rakiura/mbot/WhoThread.java
1
2 package org.rakiura.mbot;
3
4 /**/
5 import java.util.*;
6 import java.io.*;
7
8 /**
9 * Thread for managing user list updates...
10 *
11 * WhoThread.java
12 * Created: Wed Jul 14 16:59:28 1999
13 *
14 *@author Mariusz Nowostawski
15 *@version 0.3 $Revision: 1.1.1.1 $
16 */
17 public class WhoThread extends Thread {
18
19 private Engine engine;
20
21 /**/
22 public WhoThread(Engine engine) {
23 super();
24 this.engine = engine;
25 }
26
27 /**/
28 private boolean b_korekta = false;
29 private int ilezmian = 0;
30 private int trojka = 0;
31 private boolean plus = false;
32 private String mody="";
33 private String nicki="";
34 private String schan="";
35
36 /**/
37 public synchronized void run(){
38 while(true){
39 String line = engine.whoLineVector.getString();
40 while(line !=null && line.indexOf("352") == -1){
41 if(b_korekta) engine.writeLine("MODE "+schan+" "+mody+" "+nicki);
42 b_korekta = false; trojka = 0;
43 line = engine.whoLineVector.getString();
44 }
45 if(line != null && line.indexOf("352") != -1){
46 StringTokenizer st = new StringTokenizer(line, " ");
47 st.nextToken(); // server name
48 st.nextToken(); // number
49 st.nextToken(); // nick
50 String ch = st.nextToken(); // channel
51 if(schan=="" || schan.length() == 0) schan = ch;
52 Channel chan = engine.getChannel(ch);
53 if(chan == null) {
54 chan = new Channel();
55 chan.setName(ch);
56 engine.addChannel(chan);
57 }
58
59 String user = st.nextToken(); // username
60 String server = st.nextToken(); // server
61 String ircServer = st.nextToken(); // irc server
62 String nick = st.nextToken();
63 String status = st.nextToken();
64 boolean op = status.indexOf("@") != -1;
65 boolean oper = status.indexOf("*") != -1;
66 boolean voice = status.indexOf("+") != -1;
67
68 LUser luser = new LUser(nick, user, server);
69 luser.setOp(op);
70 luser.setOper(oper);
71 luser.setVoice(voice);
72 luser.setIrcServer(ircServer);
73
74 Enumeration enum = engine.getUsersForMask(nick+"!"+user+"@"+server);
75 while(enum.hasMoreElements()){//loop throu users
76 User u = (User)enum.nextElement();
77 Enumeration e1 = u.getFlags();
78 while(e1.hasMoreElements())
79 luser.addFlag((Character)e1.nextElement());
80 e1 = u.getChannels();
81 while(e1.hasMoreElements()){
82 String key = (String)e1.nextElement();
83 Enumeration e2 = u.getChanFlags(key);
84 while(e2.hasMoreElements())
85 luser.addFlag(key, (Character)e2.nextElement());
86 }
87 }
88 chan.addUser(nick, luser);
89 if(luser.isOp() && !luser.isFlag(ch,'O'))
90 takeOp(nick, ch);
91 if(!luser.isOp() && luser.isFlag(ch,'O'))
92 giveOp(nick, ch);
93 }
94 }
95 }
96
97 protected void takeOp(String nick, String ch){
98 if(!schan.equals(ch) || ilezmian == 2){
99 engine.writeLine("MODE "+schan+" "+mody+" "+nicki);
100 b_korekta = false; trojka = 0; ilezmian = 0;
101 schan = ch;
102 }
103 if(trojka == 0){
104 mody = "-o"; ilezmian = 1;
105 plus = false;
106 nicki = nick;
107 trojka++;
108 b_korekta = true;
109 }else
110 if(trojka < 3){
111 if(plus){
112 mody += "-";
113 plus = false; ilezmian++;
114 }
115 mody += "o";
116 nicki += " "+nick;
117 trojka++;
118 b_korekta = true;
119 }else{
120 engine.writeLine("MODE "+schan+" "+mody+" "+nicki);
121 b_korekta = false;
122 mody = nicki = "";
123 trojka = 0;
124 }
125 }
126
127 protected void giveOp(String nick, String ch){
128 if(!schan.equals(ch) || ilezmian == 2){
129 engine.writeLine("MODE "+schan+" "+mody+" "+nicki);
130 b_korekta = false; trojka = 0;
131 schan = ch;
132 ilezmian=0;
133 }
134 if(trojka == 0){
135 mody = "+o"; ilezmian = 1;
136 plus = true;
137 nicki = nick;
138 trojka++;
139 b_korekta = true;
140 }else
141 if(trojka < 3){
142 if(!plus){
143 mody += "+";
144 plus = true;
145 }
146 mody += "o";
147 nicki += " "+nick;
148 trojka++;
149 b_korekta = true;
150 }else{
151 engine.writeLine("MODE "+schan+" "+mody+" "+nicki);
152 b_korekta = false;
153 mody = nicki = "";
154 trojka = 0;
155 }
156 }
157
158
159
160 } // LimitThread
161 //////////////////// end of file ////////////////////